Introduction
Votre application de rapports a besoin d'un disque distinct pour son fichier de rapport. Vous créerez un volume Amazon EBS, l'attacherez à une instance EC2, formaterez et monterez son système de fichiers, puis servirez un rapport depuis ce volume. Vous démonterez, détacherez et supprimerez ensuite les ressources créées.
Vous devez déjà connaître le lancement d'EC2 et SSH. Chaque laboratoire démarre dans un environnement neuf, avec sa propre image d'application, son réseau et sa paire de clés.
Lien avec la certification
Ce laboratoire exerce le choix du stockage par blocs pour une charge EC2 et soutient les notions de stockage de la tâche 3.6 des objectifs du domaine 3 AWS Certified Cloud Practitioner CLF-C02.
Lancez le serveur de stockage
Dans cette étape, vous lancerez l'instance d'application et identifierez sa zone de disponibilité.
Commencez dans votre espace de travail et chargez les identifiants de ressources fournis :
cd /home/labex/project
source launch.env
Lancez une instance nommée storage-server. L'image contient déjà une application de rapports ; vous lui fournirez son volume de données :
aws ec2 \
run-instances \
--image-id "$AMI_ID" \
--instance-type t3.micro \
--subnet-id "$SUBNET_ID" \
--security-group-ids "$SECURITY_GROUP_ID" \
--key-name report-key \
--count 1 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=storage-server}]'
Récupérez l'identifiant de l'instance à partir de son étiquette de nom :
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=storage-server \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
Attendez que l'instance soit en cours d'exécution :
aws ec2 \
wait instance-running \
--instance-ids "$INSTANCE_ID"
Une zone de disponibilité est un emplacement isolé dans une région. Un volume EBS s'attache à une instance située dans la même zone de disponibilité. Consultez la zone de l'instance au lieu de la deviner :
AVAILABILITY_ZONE=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].Placement.AvailabilityZone' \
--output text)
Inspectez l'état et la zone :
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,Zone:Placement.AvailabilityZone}'
Confirmez running. Ouvrez AWS View, cliquez sur Refresh resources, sélectionnez storage-server et cliquez sur Check application. Confirmez HTTP 200 avant d'ajouter le stockage.
Créez et attachez le volume de données
Dans cette étape, vous créerez un volume de données EBS distinct et l'attacherez au serveur en cours d'exécution.
Amazon EBS fournit le stockage par blocs pour EC2. Un volume est une ressource semblable à un disque, tandis qu'un système de fichiers organise les fichiers sur ce disque. Attacher un volume rend son périphérique de blocs disponible ; cela ne crée pas de système de fichiers. Le guide des volumes EBS décrit leur attachement et leur persistance.
Créez un petit volume SSD à usage général vide. gp3 sélectionne le type de volume, --size 1 demande un GiB et la variable de zone le place dans la même zone que l'instance. Conservez son identifiant pour les opérations suivantes :
VOLUME_ID=$(aws ec2 \
create-volume \
--availability-zone "$AVAILABILITY_ZONE" \
--size 1 \
--volume-type gp3 \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=report-data}]' \
--query 'VolumeId' \
--output text)
Attendez que le nouveau volume soit disponible :
aws ec2 \
wait volume-available \
--volume-ids "$VOLUME_ID"
Attachez-le avec le nom de périphérique de l'API /dev/sdf :
aws ec2 \
attach-volume \
--volume-id "$VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdf
Attendez la fin de l'attachement :
aws ec2 \
wait volume-in-use \
--volume-ids "$VOLUME_ID"
Inspectez le volume et son attachement :
aws ec2 \
describe-volumes \
--volume-ids "$VOLUME_ID" \
--query 'Volumes[].{Volume:VolumeId,State:State,Zone:AvailabilityZone,Size:Size,Type:VolumeType,Attachments:Attachments}'
Confirmez in-use, la taille 1, le type gp3 et un attachement à votre instance. Actualisez AWS View et inspectez la ligne du volume. Le volume racine est distinct du nouveau volume de données.
Montez le volume et servez un rapport
Dans cette étape, vous initialiserez le volume de données vide et rendrez un rapport accessible à l'application.
Récupérez l'adresse publique actuelle de l'instance :
PUBLIC_IP=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].PublicIpAddress' \
--output text)
Connectez-vous avec la configuration SSH fournie :
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Dans l'instance, inspectez le périphérique nouvellement attaché. Son nom Linux dans ce laboratoire est /dev/xvdf ; les noms de périphériques peuvent différer du nom d'attachement de l'API. D'autres images EC2 peuvent présenter des noms NVMe : identifiez donc le disque avant toute opération. Le guide officiel de préparation des volumes Linux explique cette distinction.
lsblk -f /dev/xvdf
Confirmez que le périphérique n'a pas de type de système de fichiers. Créez un système de fichiers ext4 uniquement sur ce volume de données neuf et vide. Formater un volume contenant des données les effacerait :
sudo mkfs.ext4 /dev/xvdf
Un point de montage est le répertoire par lequel vous accédez à un système de fichiers. Montez le nouveau système de fichiers dans le répertoire préparé pour l'application de rapports :
sudo mount /dev/xvdf /srv/reports
Confirmez le périphérique source, le système de fichiers et le point de montage :
findmnt /srv/reports
Recherchez /dev/xvdf, ext4 et /srv/reports. Créez un rapport CSV contenant des données fictives. sudo tee écrit dans le système de fichiers appartenant à l'administrateur ; le document incorporé délimité par des guillemets conserve les deux lignes :
sudo tee /srv/reports/report.csv <<'CSV'
period,total
Q1,320
CSV
Relisez le fichier :
cat /srv/reports/report.csv
Revenez au terminal LabEx :
exit
Dans AWS View, sélectionnez storage-server et cliquez sur Read volume report. Confirmez HTTP 200 et le texte CSV period,total et Q1,320. Cette réponse démontre que l'application peut lire le fichier sur le volume monté.
Le montage de ce laboratoire est manuel. Un redémarrage ne rétablit pas automatiquement un montage manuel ; en production, on configure généralement l'UUID du système de fichiers dans /etc/fstab après avoir testé l'entrée.
Démontez, détachez et supprimez
Dans cette étape, vous supprimerez le volume de données et l'instance d'application dans un ordre maîtrisé.
Reconnectez-vous d'abord à l'instance d'application :
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Démontez le système de fichiers avant de détacher son disque. Cela arrête l'accès au système de fichiers et vide les écritures en attente :
sudo umount /srv/reports
Confirmez qu'il n'est plus monté :
findmnt /srv/reports
Un répertoire non monté ne produit aucune sortie et findmnt renvoie un code de sortie non nul ; c'est attendu ici. Revenez au terminal LabEx :
exit
Détachez uniquement votre volume de données :
aws ec2 \
detach-volume \
--volume-id "$VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdf
Attendez que le volume soit de nouveau disponible :
aws ec2 \
wait volume-available \
--volume-ids "$VOLUME_ID"
Supprimez le volume détaché. Cela supprime définitivement ses données : conservez donc les fichiers importants ou une sauvegarde avant de supprimer un volume de production :
aws ec2 \
delete-volume \
--volume-id "$VOLUME_ID"
Terminez l'instance d'application :
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
Attendez la fin de l'instance :
aws ec2 \
wait instance-terminated \
--instance-ids "$INSTANCE_ID"
Inspectez l'état final de l'instance :
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'
Confirmez terminated, puis listez les volumes restants :
aws ec2 \
describe-volumes \
--query 'Volumes[].{Volume:VolumeId,State:State}'
Le résultat attendu est [] : votre volume de données a été supprimé explicitement et le volume racine de cette instance a été supprimé lors de sa terminaison. Actualisez AWS View et confirmez que le serveur n'est plus une cible en cours d'exécution et que la liste des volumes est vide. Conservez le réseau et la paire de clés préparés.
Résumé
Vous avez créé un volume de données EBS dans la même zone de disponibilité qu'une instance EC2, l'avez attaché, formaté un système de fichiers vide et monté pour l'application. Vous avez vérifié une réponse réelle du rapport, puis démonté, détaché et supprimé le volume avant de terminer le serveur.



