Exercice 04 : Comprendre le workflow plan → apply → destroy
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Lire la sortie de
terraform plan(+, ~, -) - ✅ Appliquer les changements et vérifier le résultat
- ✅ Comprendre le rôle du fichier
terraform.tfstate - ✅ Utiliser
terraform showetterraform destroy
Durée estimée : 20 minutes
Difficulté : ⭐⭐☆☆☆ (Débutant+)
Prérequis : Terraform installé, Docker en cours d'exécution, exercice 03 terminé
📖 Contexte
Le workflow Terraform est un cycle en trois étapes : plan (prévisualiser), apply (exécuter), destroy (supprimer). Le state (terraform.tfstate) est la mémoire de Terraform : il mémorise l'état actuel de l'infrastructure pour calculer les changements lors du prochain plan.
📋 Énoncé
Vous allez créer un conteneur Docker, l'inspecter via le state, le modifier, observer la différence dans le plan, et finalement tout détruire.
Résultat attendu :
- Compréhension complète du workflow Terraform
- Lecture fluide de la sortie
terraform plan
🧭 Déroulement de l'exercice
Tâche 1 : Lire terraform plan avant l'apply
Depuis le projet de l'exercice 03, lancez terraform plan sans appliquer. Interprétez chaque symbole.
Indice :
+= créer,~= modifier en place,-/+= détruire et recréer,-= supprimer.
Vérification : Vous identifiez le nombre exact de ressources à créer dans la ligne Plan: X to add, 0 to change, 0 to destroy.
Tâche 2 : Sauvegarder le plan dans un fichier
Sauvegardez le plan dans un fichier binaire tfplan et appliquez-le.
Indice :
terraform plan -out=tfplanpuisterraform apply tfplan. Cela évite la demande de confirmation et garantit l'application exacte du plan prévisualisé.
Vérification : terraform apply tfplan n'affiche pas de prompt de confirmation.
Tâche 3 : Inspecter le state
Après l'apply, examinez le fichier terraform.tfstate et utilisez terraform show pour un affichage lisible.
Indice : Le
tfstateest un fichier JSON. Il contient l'état réel de chaque ressource après la création.
Vérification : terraform show affiche les attributs réels des ressources (IDs, IPs, etc.).
Tâche 4 : Modifier une ressource et observer le plan
Changez le port externe du conteneur de 8080 à 9090 dans main.tf, puis lancez terraform plan.
Indice : Docker ne permet pas de modifier un port d'un conteneur en cours d'exécution. Terraform va donc détruire et recréer le conteneur (
-/+).
Vérification : Le plan affiche # docker_container.web must be replaced avec -/+.
Tâche 5 : Détruire l'infrastructure
Après l'apply de la modification, détruisez toute l'infrastructure avec terraform destroy.
Indice :
terraform destroydemande une confirmation. Tapezyes. Le state devient vide.
Vérification : terraform show n'affiche plus aucune ressource. docker ps ne liste plus le conteneur nginx.
🗂️ Mini-Projet : Cycle complet commenté
Documentez chaque étape du workflow avec les outputs attendus :
# main.tf - v1 : création
resource "docker_container" "web" {
name = "nginx-workflow"
image = docker_image.nginx.image_id
ports {
internal = 80
external = 8080
}
}# main.tf - v2 : modification (changer external port)
resource "docker_container" "web" {
name = "nginx-workflow"
image = docker_image.nginx.image_id
ports {
internal = 80
external = 9090 # changement : 8080 → 9090
}
}Checkpoints :
terraform plansur v1 affichePlan: 2 to add, 0 to change, 0 to destroyterraform applycrée les ressources,docker psconfirme le conteneurcat terraform.tfstateest un JSON valide avec les ressourcesterraform plansur v2 affiche-/+(destroy et recreate pour le conteneur)terraform destroyvide le state (0 resources)