Aller au contenu

Lab 07 : Utilisation du Stockage objet

Dans cet atelier, nous allons manipulez le stockage objet fourni par 3DS OUTSCALE.

Le stockage objet est une architecture de stockage qui gère les données sous forme d’objets accessibles via des URL plutôt que des fichiers. Il est idéal pour stocker de grandes quantités de données non structurées, telles que des sauvegardes, des archives, des images, des contenus audio et vidéo, ainsi que des données volumineuses.

Le service OUTSCALE Object Storage (OOS) repose sur la technologie RING de Scality. Il est compatible avec l’API Simple Storage Service (S3) d’AWS, ce qui signifie que vous pouvez utiliser OOS avec n’importe quel outil compatible S3Création.

L’interface de la ligne de commande AWS (AWS CLI) est un outil unifié qui permet de gérer vos services AWS. Avec un seul outil à télécharger et à configurer, vous pouvez contrôler plusieurs services AWS à partir de la ligne de commande et les automatiser au moyen de scripts.

https://docs.aws.amazon.com/fr_fr/cli/latest/userguide/getting-started-install.html

Terminal window
sudo apt update && sudo apt upgrade -y && sudo apt install unzip curl -y
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

Vérifiez l’installation à l’aide de la commande suivante.

Terminal window
aws --version

Command completion - AWS Command Line Interface (amazon.com)

Ajouter aws_completer dans le PATH

Terminal window
echo 'export PATH=/usr/local/bin/aws_completer:$PATH' >> .profile
source ~/.profile

Activer la complétion dans le shell

Terminal window
echo "complete -C '/usr/local/bin/aws_completer' aws" >> ~/.bashrc
source ~/.bashrc

Pour une utilisation générale, la commande aws configure est le moyen le plus rapide pour configurer l’installation de votre CLI. Lorsque vous tapez cette commande, l’AWS CLI vous invite à saisir quatre éléments d’information :

Terminal window
aws configure

Spécifiez les éléments de configuration :

  • AWS Access Key ID: Votre access key OUTSCALE.
  • AWS Secret Access Key: Votre secret key OUTSCALE.
  • Default region name : Le nom de la Région du Cloud OUTSCALE que vous souhaitez utiliser.

OOS endpoints

  • Default output format : Cet attribut doit être paramétré sur json (défaut).

Cette commande définit un profil par défaut (default). Pour définir un profil nommé, pour chaque Région que vous pouvez utiliser, utilisez l’attribut --profile suivant cette syntaxe :

Terminal window
aws configure --profile VOTRE_PROFIL

Pour créer un bucket, utilisez la commande create-bucket suivant cette syntaxe :

Terminal window
aws s3api create-bucket \
--bucket formation-bucket-<nm> \
--endpoint https://oos.eu-west-2.outscale.com

Le nom d’un bucket doit :

  • Être unique pour toute la région
  • Contenir entre 3 et 63 caractères
  • Commencer par un caractère alphanumérique
  • Contenir uniquement des minuscules, chiffres et tirets (-)

Le bucket est créé.

Command output

Pour obtenir la liste de vos buckets, utilisez la commande list-buckets:

Terminal window
aws s3api list-buckets --endpoint https://oos.eu-west-2.outscale.com

Command output

La commande list-buckets renvoie les éléments suivants :

  • Buckets: Informations à propos du propriétaire du bucket
    • CreationDate: La date et l’heure de la création du bucket.
    • Name: Le nom que vous avez spécifié pour le bucket.
  • Owner: Informations à propos du propriétaire du bucket.
    • DisplayName: L’ID de votre compte OUTSCALE.

    • ID: Votre ID utilisateur S3.

    • CreationDate: La date et l’heure de la création du bucket.

import { Aside } from ‘@astrojs/starlight/components’;

Pour déposer un objet local dans un bucket, utilisez la commande put-object suivant cette syntaxe :

Terminal window
aws s3api put-object \
--profile YOUR_PROFILE \
--bucket BUCKET \
--key OBJECT \
--body /usr/bin/OBJECT \
--endpoint https://oos.eu-west-2.outscale.com

Cette commande contient les attributs suivants que vous devez spécifier :

  • (optionnel) profile : Le profil nommé que vous voulez utiliser, créé pendant la configuration d’AWS CLI. Pour en savoir plus, voir Installer et configurer AWS CLI.
  • bucket : Le nom du bucket dans lequel vous voulez déposer l’objet.
  • key : Le nom que vous voulez donner à l’objet dans le bucket.
  • body : Le chemin d’accès vers l’objet sur votre machine.
  • endpoint : Le endpoint correspondant à la Région à laquelle vous voulez envoyer la requête.

Le bucket est sécurisé par défaut. Vous pouvez activer des options supplémentaires de sécurité, telles que le versioning. Le versioning permet de conserver plusieurs versions d’un objet pour une récupération en cas de modification ou de suppression accidentelle.

Activer ou désactiver le versioning d’un bucket avec AWS CLI

Terminal window
aws s3api put-bucket-versioning \
--bucket formation-bucket-<nm> \
--versioning-configuration Status=Enabled \
--endpoint https://oos.eu-west-2.outscale.com

L’attribut Status permet l’activation ou la désactivation du versioning sur le bucket. Les valeurs autorisées sont « Enabled » ou « Suspended ».

La commande get-bucket-versioning permet d’obtenir les informations sur le versionning d’un bucket.

Terminal window
aws s3api get-bucket-versioning \
--bucket formation-bucket-<nm> \
--endpoint https://oos.eu-west-2.outscale.com
{
"Status": "Enabled"
}

La commande get-bucket-versioning renvoie l’élément suivant :

  • Status : Le statut du versioning (Enabled | Suspended).

Le défi consiste à manipuler des fichiers dans un bucket et comprendre les versions des objets.

  1. Créez un nouveau fichier vide dans votre éditeur de texte préféré.
<html>
<head>
<title>Ma page index.html</title>
</head>
<body>
<h1>Mon site web statique</h1>
<h2>Formation OOS</h2>
</body>
</html>
  1. Copiez le code HTML fourni dans le fichier.
  2. Enregistrez le fichier sous le nom index.html.
  3. Utilisez la commande put-object pour téléverser le fichier index.html dans le bucket spécifié. Assurez-vous d’inclure les paramètres appropriés tels que le nom du bucket et l’endpoint.
Terminal window
aws s3api put-object --bucket formation-bucket-<nm> --key index.html --body index.html --endpoint https://oos.eu-west-2.outscale.com
  1. Modifiez quelques caractères du fichier index.html à l’aide de votre éditeur de texte.
  2. Utilisez à nouveau la commande “put-object” pour remplacer l’objet existant dans le bucket par la nouvelle version modifiée.
  3. Utilisez la commande list-object-versions avec les paramètres appropriés pour afficher la liste des versions de l’objet “index.html” dans le bucket spécifié.
Terminal window
aws s3api list-object-versions --bucket formation-bucket-<nm> --prefix index.html --endpoint https://oos.eu-west-2.outscale.com
  1. Observez les résultats de la commande précédente et notez vos observations sur les versions de l’objet index.htm” dans le bucket.
  2. Téléchargez les deux versions de l’objet index.html à l’aide de la commande appropriée.
  3. Utilisez un outil de comparaison de fichiers, comme diff, pour comparer les deux versions téléchargées.
Terminal window
aws s3api get-object --bucket formation-bucket-<nm> --key index.html /png/v0_index.html --version-id aJlMrx91SFdR00000000001I4j3QKItW --endpoint https://oos.eu-west-2.outscale.com

Vous pouvez configurer une URL pré-signée qui permet à un objet d’être accessible depuis internet. Tout utilisateur à qui vous envoyez l’URL pré-signée a accès à l’objet pour la durée que vous spécifiez.

  1. Chargez un fichier vide nommé acl-list.txt dans le bucket en utilisant la commande s3api put-object.
  2. Vérifiez que le fichier a été correctement chargé.

Utilisez la commande suivante sur le fichier acl-list.txt :

Terminal window
aws s3 presign s3://bucket-formation/acl-list.txt --expires-in 3600 --endpoint https://oos.eu-west-2.outscale.com

La commande presign renvoie l’élément suivant :

presign output

La gestion des ACL (Access Control List) sur Outscale OOS permet de contrôler les autorisations d’accès aux objets stockés dans un bucket.

Vous pouvez accorder des permissions à différents groupes :

  • public : N’importe quelle personne à laquelle vous envoyez l’URL de votre bucket ou de votre objet.
  • authenticated-user : N’importe quel utilisateur connecté avec un compte OUTSCALE qui utilise l’API.

Vous trouverez la liste ACL prête à l’emploi sur le lien suivant :

https://docs.outscale.com/fr/userguide/R%C3%A9f%C3%A9rence-des-Access-Control-List-ACL.html

ACL pour Bucket:

La commande put-bucket-acl permet de configurer l’ACL d’un bucket

Terminal window
aws s3api put-bucket-acl \
--profile YOUR_PROFILE \
--bucket BUCKET \
--acl private \
--grant-full-control "id=USER_ID, id=USER_ID" \
--grant-read "id=USER_ID, id=USER_ID" \
--grant-read-acp "id=USER_ID, id=USER_ID" \
--grant-write "id=USER_ID, id=USER_ID" \
--grant-write-acp "id=USER_ID, id=USER_ID" \
--endpoint https://oos.eu-west-2.outscale.com

Pour obtenir les informations sur l’ACL d’un bucket :

Terminal window
aws s3api get-bucket-acl \
--profile YOUR_PROFILE \
--bucket BUCKET \
--endpoint https://oos.eu-west-2.outscale.com

ACL pour Objet:

La commande put-object-acl permet de configurer l’ACL d’un objet

Terminal window
aws s3api put-object-acl \
--bucket BUCKET \
--key OBJECT \
--acl private \
--grant-full-control "id=USER_ID, id=USER_ID" \
--grant-read "id=USER_ID, id=USER_ID" \
--grant-read-acp "id=USER_ID, id=USER_ID" \
--grant-write "id=USER_ID, id=USER_ID" \
--grant-write-acp "id=USER_ID, id=USER_ID" \
--version-id qAfAAsAAuA00kclkg0A0AAuAAjaAtA. \
--endpoint https://oos.eu-west-2.outscale.com

Pour obtenir les informations sur l’ACL d’un objet :

Terminal window
aws s3api get-object-acl \
--profile YOUR_PROFILE \
--bucket BUCKET \
--key OBJECT \
--version-id qAfAAsAAuA00kclkg0A0AAuAAjaAtA. \
--endpoint https://oos.eu-west-2.outscale.com
  • Appliquez l’ACL publique (public-read) sur le fichier index.html en utilisant la commande aws s3api put-object-acl
  • Chargez le fichier error.html dans le bucket en utilisant la commande s3api put-object
  • Vérifiez que le fichier a été correctement chargé
  • Appliquez l’ACL publique (public-read) sur le fichier en utilisant la commande aws s3api put-object-acl
  • Vérifiez que l’ACL a été correctement mise en place en utilisant la commande aws s3api get-object-acl
  • Créez un fichier website.json avec le contenu suivant :
{
"IndexDocument": {
"Suffix": "index.html"
},
"ErrorDocument": {
"Key": "error.html"
}
}
  • Copiez le fichier website.json sur votre bucket et configurez une ACL public-read :
  • Créez votre site web par le biais de la commande website suivant cette syntaxe :
Terminal window
aws s3 website s3://BUCKET/ \
--profile YOUR_PROFILE \
--index-document index.html \
--error-document error.html \
--endpoint https://oos.eu-west-2.outscale.com
Terminal window
aws s3api put-bucket-website --bucket formation-bucket-<nm> --website-configuration file://website.json --endpoint https://oos.eu-west-2.outscale.com

Votre site web est créé et accessible au format d’adresse suivant : https://<BUCKET>.oos-website.<REGION>.outscale.com

On ne peut déployer sur S3 qu’une application front. C’est-à-dire une application qui est exécutable par un client (votre navigateur).

Par exemple : une application écrite avec le framework Angular ou React, un simple site HTML/CSS etc. Si vous avez découpé votre application en deux parties front-end et back-end, la partie front-end peut très bien être déployée sur S3.

Nextcloud est une plateforme de partage de fichiers et de communication open source et auto-hébergée. La combinaison de Nextcloud avec Object Storage va vous offrir un espace de stockage infini pour votre plateforme Nextcloud.

  1. Connectez-vous sur le Dashboard cockpit d’OUTSCALE

  2. Créez un NET avec un CIDR 10.0.0.0/16

  3. Créez une internet gateway myigw et l’associer au NET

  4. Créez un subnet mysubnet avec un CIDR 10.0.1.0/24

  5. Créez une table de routage myrt

  6. Attachez cette route table au subnet mysubnet

  7. Configurer les routes suivantes sur la table de routage myrt

    1. Cible : myigw ID, destination 0.0.0.0/0
    2. Cible : local, destination 10.0.0.0/16
  8. Créez un security group mysg

  9. Déployer une VM avec les paramètres suivants :

    1. Nom myvm
    2. OMI : ubuntu 22.04 ami-cd8d714e
    3. Subnet : mysubnet
    4. Security group : mysg
    5. Type : tinav3.c2r4p2
    6. Disque : taille 20GB et type : gp2
    7. Keypair : créez une nouvelle keypair pour cette VM
  10. Créez et associez une IP publique pour cette VM

  11. Créer un NET endpoint vers le service stockage objet pour le NET. Ce endpoint va permettre une communication directe (interne) entre les VMs dans ce NET vers les bucket S3.

  12. Créez un bucket pour Nextcloud (Remplacez nm par un chiffre de votre choix)

    Terminal window
    aws s3api create-bucket --bucket formation-bucket-<nm> --endpoint https://oos.eu-west-2.outscale.com
  13. Vérifiez que le bucket est vide

    Terminal window
    aws s3api list-objects --bucket formation-bucket-<nm> --endpoint https://oos.eu-west-2.outscale.com
  14. Connectez-vous sur la VM myvm

  15. Installez les prérequis pour l’application Nextcloud

    Terminal window
    apt update
    apt install apache2 mariadb-server libapache2-mod-php
    apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip
    [source, bash]
  16. Téléchargez et installez la dernière version de Nexcloud

    Terminal window
    wget https://download.nextcloud.com/server/releases/latest.tar.bz2
    tar -xjf latest.tar.bz2
    cp -r nextcloud /var/www
  17. Créez une configuration apache /etc/apache2/sites-available/nextcloud.conf avec le contenu suivant :

    <VirtualHost *:80>
    DocumentRoot /var/www/nextcloud
    <Directory /var/www/nextcloud/>
    Options FollowSymlinks
    AllowOverride All
    <IfModule mod_dav.c>
    Dav off
    </IfModule>
    SetEnv HOME /var/www/nextcloud
    SetEnv HTTP_HOME /var/www/nextcloud
    </Directory>
    </VirtualHost>
  18. Activez la configuration

    Terminal window
    a2ensite nextcloud.conf
    a2dissite 000-default
    systemctl reload apache2.service
  19. Changez les droits /var/www/nextcloud/

    Terminal window
    chown -R www-data:www-data /var/www/nextcloud/
  20. Configurez la base de données

    Terminal window
    sudo -i
    mysql -u root -p
  21. Créez une base de données et un utilisateur

    CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password';
    CREATE DATABASE IF NOT EXISTS nextcloud;
    GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'password';
    FLUSH privileges;
  22. Quittez MariaDB

    EXIT;
  23. Pour finaliser l’installation, connectez-vous sur l’url http://MYVMPUBLICIP/ et suivez les étapes exposées via l’interface graphique.

  24. Configurez le stockage objet la bucket « nextcloudbucket ». Editez le fichier nano /var/www/nextcloud/config/config.php et ajoutez le contenu suivant juste après la ligne ’datadirectory’ => ‘/var/www/nextcloud/data’,`

    'objectstore' => array(
    'class' => '\\OC\\Files\\ObjectStore\\S3',
    'arguments' => array(
    'bucket' => 'nextcloudbucket',
    'autocreate' => true,
    'key' => 'REPLACEZACCESSKEY',
    'secret' => 'REMPLACEZPARSECRETKEY',
    'hostname' => 'oos.eu-west-2.outscale.com',
    'port' => 443,
    'use_ssl' => true,
    'region' => 'eu-west-2',
    ),
    ),
  25. Sauvegardez le fichier et ouvrir à nouveau l’interface web de nextcloud et commencez à stockez vos fichier sur la bucket via Nextcloud.

    nextcloud pages

  26. On vient de configurer un bucket comme stockage premier pour l’application « Nextcloud », pour votre information on peut aussi configurer un bucket comme stockage externe (secondaire).