Exercice 03 : Comprendre et gérer le state Terraform
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Lire et comprendre la structure de
terraform.tfstate - ✅ Utiliser
terraform state list,show,mvetrm - ✅ Comprendre pourquoi le state locking est essentiel en équipe
- ✅ Identifier les cas où
terraform state rmest nécessaire
Durée estimée : 20 minutes
Difficulté : ⭐⭐⭐☆☆ (Intermédiaire)
Prérequis : Terraform installé, projet Docker opérationnel, exercice 02 terminé
📖 Contexte
Le state est la mémoire de Terraform. Il mappe les ressources déclarées dans le code HCL aux ressources réelles sur l'infrastructure. Sans state, Terraform ne saurait pas ce qu'il a créé. Mal géré, le state peut entraîner des destructions accidentelles ou des ressources orphelines.
📋 Énoncé
Vous allez inspecter un state existant, renommer une ressource sans la recréer, retirer une ressource du state sans la supprimer, et comprendre le locking.
Résultat attendu :
- Maîtrise des commandes
terraform state - Compréhension du state locking
🧭 Déroulement de l'exercice
Tâche 1 : Inspecter le state avec terraform state list
Après un terraform apply, listez toutes les ressources trackées dans le state.
Indice :
terraform state listretourne une liste de références au formattype.nom.
Vérification : Les ressources créées apparaissent dans la liste.
Tâche 2 : Afficher une ressource spécifique
Affichez les attributs détaillés d'une ressource spécifique du state.
Indice :
terraform state show docker_container.webaffiche tous les attributs de la ressource en format HCL.
Vérification : Vous lisez l'ID du conteneur, son image, et ses ports dans la sortie.
Tâche 3 : Renommer une ressource avec terraform state mv
Renommez docker_container.web en docker_container.nginx_web dans le state SANS recréer le conteneur.
Indice :
terraform state mv docker_container.web docker_container.nginx_web. Mettez aussi à jourmain.tfpour que le nom corresponde.
Vérification : Après le state mv et la mise à jour de main.tf, terraform plan affiche No changes.
Tâche 4 : Retirer une ressource du state sans la supprimer
Retirez docker_image.nginx du state. Terraform ne gérera plus cette ressource, mais l'image restera présente dans Docker.
Indice :
terraform state rm docker_image.nginx. Utile quand on veut "oublier" une ressource sans la détruire (ex: migration de state).
Vérification : terraform state list ne montre plus l'image. docker images | grep nginx confirme que l'image existe toujours.
Tâche 5 : Comprendre le state locking
Ouvrez deux terminaux et lancez terraform apply simultanément dans les deux. Observez le comportement de verrouillage.
Indice : Le backend local utilise un fichier
.terraform.tfstate.lock.infopendant les opérations. Un deuxièmeapplyconcurrent est bloqué jusqu'à la fin du premier.
Vérification : Le second terminal affiche un message Error acquiring the state lock.
🗂️ Mini-Projet : Gestion de state avancée
# Scénario : renommage de ressource sans recréation
# 1. State actuel
terraform state list
# docker_image.nginx
# docker_container.web
# 2. Renommer dans le state
terraform state mv docker_container.web docker_container.nginx_web
# 3. Mettre à jour main.tf (renommer la ressource)
# resource "docker_container" "nginx_web" { ... }
# 4. Vérifier : aucun changement
terraform plan
# No changes. Your infrastructure matches the configuration.Contenu du state (terraform.tfstate simplifié) :
{
"version": 4,
"resources": [
{
"type": "docker_container",
"name": "nginx_web",
"instances": [{
"attributes": {
"id": "abc123",
"name": "nginx-demo-dev-web"
}
}]
}
]
}Checkpoints :
terraform state listliste toutes les ressources du projetterraform state show docker_container.webaffiche l'ID réel du conteneurterraform state mv docker_container.web docker_container.nginx_web+ mise à jour du code →terraform planafficheNo changesterraform state rm docker_image.nginx→ l'image disparaît du state mais reste dans Dockercat terraform.tfstateest un JSON valide lisible