Introduction
Votre équipe souhaite arrêter un serveur de rapports pendant la maintenance, puis le remettre en service avec une adresse publique prévisible. Vous exploiterez une instance EC2, comparerez ses états arrêté et en cours d'exécution, associerez une Elastic IP et vérifierez l'application après un autre cycle d'arrêt et de démarrage.
Vous devez déjà connaître le lancement EC2, SSH et User Data. Ce nouvel environnement fournit sa propre image, son réseau, sa paire de clés et son script de démarrage. Vous lancerez et exploiterez vous-même le serveur.
Lien avec la certification
Les opérations sur les instances et l'adressage public renforcent les concepts de calcul et de réseau des tâches 3.3 et 3.5 des objectifs du domaine 3 d'AWS Certified Cloud Practitioner CLF-C02.
Lancer le serveur de maintenance
Dans cette étape, vous lancerez le serveur d'application et examinerez son état initial et ses adresses.
Commencez dans le répertoire du projet :
cd /home/labex/project
Chargez les identifiants fournis de l'image, du sous-réseau et du groupe de sécurité :
source launch.env
Le script de démarrage fourni configure le message d'accueil de l'application de rapports. Inspectez-le avant de l'utiliser :
cat lifecycle-user-data.sh
Recherchez le message Lifecycle server. Comme dans le laboratoire précédent, --user-data file://... lit le script Bash et le transmet à l'instance au lancement. Créez un serveur nommé lifecycle-server :
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 \
--user-data file://lifecycle-user-data.sh \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=lifecycle-server}]'
Enregistrez l'identifiant de l'instance à partir d'une requête sur son tag de nom pour les opérations suivantes :
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=lifecycle-server \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
Inspectez son état et ses adresses réseau :
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
Confirmez running ; si l'état est encore pending, attendez un instant et répétez la requête. Notez les adresses IPv4 privée et publique affichées. Vous les comparerez après la maintenance.
Ouvrez AWS View et cliquez sur Refresh resources. Sélectionnez lifecycle-server sous Application requests, puis cliquez sur Check application. Confirmez HTTP 200 et Lifecycle server avant de modifier l'état de l'instance.
Arrêter le serveur pour la maintenance
Dans cette étape, vous arrêterez l'instance et confirmerez qu'elle ne peut plus répondre aux requêtes de l'application.
Une instance stopped est éteinte et peut être redémarrée. Une instance terminated a été définitivement supprimée. Pour une instance utilisant EBS comme stockage racine, l'arrêt préserve le volume racine ; l'application est indisponible pendant l'arrêt. Le guide officiel du cycle de vie des instances explique ces différences d'état.
Arrêtez votre instance d'application :
aws ec2 \
stop-instances \
--instance-ids "$INSTANCE_ID"
Attendez stopped. Le waiter interroge périodiquement l'état et se termine sans sortie lorsque la condition est remplie :
aws ec2 \
wait instance-stopped \
--instance-ids "$INSTANCE_ID"
Inspectez à nouveau l'état et les adresses :
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
Confirmez stopped. L'adresse IPv4 privée reste, tandis que l'adresse IPv4 publique attribuée automatiquement est libérée. Vous aurez besoin de l'adresse publique actuelle après le redémarrage.
Actualisez AWS View. Confirmez stopped et que cette instance n'est plus disponible dans le sélecteur des applications en cours d'exécution. Le serveur est indisponible pendant la maintenance, même si son enregistrement et son stockage racine restent présents.
Conserver une adresse publique avec une Elastic IP
Dans cette étape, vous démarrerez le serveur, associerez une Elastic IP et vérifierez que son endpoint public reste associé après un autre cycle d'arrêt et de démarrage.
Démarrez l'instance existante :
aws ec2 \
start-instances \
--instance-ids "$INSTANCE_ID"
Attendez running :
aws ec2 \
wait instance-running \
--instance-ids "$INSTANCE_ID"
Inspectez ses adresses :
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
L'identifiant de l'instance et l'adresse IPv4 privée restent identiques. L'adresse publique attribuée automatiquement change après l'arrêt et le démarrage. Actualisez AWS View et vérifiez à nouveau l'application ; elle doit toujours renvoyer Lifecycle server.
Une Elastic IP est une adresse IPv4 publique allouée à votre compte jusqu'à sa libération. L'allocation réserve l'adresse ; l'association la relie à une instance ou à une interface réseau. Elle peut fournir une adresse stable après l'arrêt et le démarrage, comme l'explique le guide officiel Elastic IP.
Allouez une Elastic IP pour une utilisation dans un VPC et capturez son identifiant d'allocation :
ALLOCATION_ID=$(aws ec2 \
allocate-address \
--domain vpc \
--query 'AllocationId' \
--output text)
Associez cette allocation à votre instance. Enregistrez l'identifiant d'association renvoyé pour le nettoyage :
ASSOCIATION_ID=$(aws ec2 \
associate-address \
--allocation-id "$ALLOCATION_ID" \
--instance-id "$INSTANCE_ID" \
--query 'AssociationId' \
--output text)
Inspectez l'adresse et l'instance associée :
aws ec2 \
describe-addresses \
--allocation-ids "$ALLOCATION_ID" \
--query 'Addresses[].{PublicIPv4:PublicIp,Allocation:AllocationId,Instance:InstanceId}'
Notez l'Elastic IP. Elle remplace l'adresse IPv4 publique attribuée automatiquement à l'instance. Actualisez AWS View et vérifiez l'application pour confirmer que la nouvelle adresse atteint le même serveur.
Effectuez maintenant un autre cycle de maintenance :
aws ec2 \
stop-instances \
--instance-ids "$INSTANCE_ID"
aws ec2 \
wait instance-stopped \
--instance-ids "$INSTANCE_ID"
aws ec2 \
start-instances \
--instance-ids "$INSTANCE_ID"
aws ec2 \
wait instance-running \
--instance-ids "$INSTANCE_ID"
Inspectez une nouvelle fois l'instance :
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
Confirmez que l'adresse publique est toujours l'Elastic IP notée. Actualisez AWS View et cliquez sur Check application. HTTP 200 avec Lifecycle server confirme que le serveur répond via l'adresse conservée après la maintenance.
Libérer l'adresse et terminer le serveur
Dans cette étape, vous libérerez l'adresse allouée et supprimerez définitivement l'instance de l'application.
La dissociation supprime le lien avec l'instance. Elle ne libère pas l'adresse de votre compte. Dissociez d'abord l'association enregistrée :
aws ec2 \
disassociate-address \
--association-id "$ASSOCIATION_ID"
Libérez ensuite l'allocation :
aws ec2 \
release-address \
--allocation-id "$ALLOCATION_ID"
Les adresses IPv4 publiques allouées restent des ressources facturables dans AWS, même lorsqu'une instance est arrêtée. Libérer une adresse devenue inutile fait partie du nettoyage des ressources.
Terminez le serveur :
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
Attendez la terminaison :
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. Répertoriez les allocations Elastic IP restantes :
aws ec2 \
describe-addresses \
--query 'Addresses[].{Allocation:AllocationId,PublicIPv4:PublicIp}'
Le résultat doit être une liste vide, []. Actualisez AWS View et confirmez que le serveur n'est plus une cible en cours d'exécution. Conservez le réseau et la paire de clés préparés.
Résumé
Vous avez arrêté et démarré un serveur d'application EC2, observé les changements d'adresse et associé une Elastic IP. Vous avez vérifié l'accès à l'application par l'adresse conservée après un autre cycle de maintenance. Enfin, vous avez libéré l'allocation et terminé le serveur, confirmant le nettoyage des deux ressources.



