DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesTerraform : variables, modules et gestion du state03 - Comprendre et gérer le state Terraform

Détails

  • 20 minutes
  • Intermédiaire

Objectifs

  • Comprendre la structure JSON du terraform.tfstate
  • Utiliser les commandes terraform state list, show, mv, rm
  • Comprendre le state locking et ses implications
  • Éviter les modifications manuelles du state
Module Terraform : variables, modules et gestion du state

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, mv et rm
  • ✅ Comprendre pourquoi le state locking est essentiel en équipe
  • ✅ Identifier les cas où terraform state rm est 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 list retourne une liste de références au format type.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.web affiche 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 à jour main.tf pour 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.info pendant les opérations. Un deuxième apply concurrent 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

bash
# 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é) :

json
{
  "version": 4,
  "resources": [
    {
      "type": "docker_container",
      "name": "nginx_web",
      "instances": [{
        "attributes": {
          "id": "abc123",
          "name": "nginx-demo-dev-web"
        }
      }]
    }
  ]
}

Checkpoints :

  • terraform state list liste toutes les ressources du projet
  • terraform state show docker_container.web affiche l'ID réel du conteneur
  • terraform state mv docker_container.web docker_container.nginx_web + mise à jour du code → terraform plan affiche No changes
  • terraform state rm docker_image.nginx → l'image disparaît du state mais reste dans Docker
  • cat terraform.tfstate est un JSON valide lisible

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Inspecter le state avec terraform state list
  • Tâche 2 : Afficher une ressource spécifique
  • Tâche 3 : Renommer une ressource avec terraform state mv
  • Tâche 4 : Retirer une ressource du state sans la supprimer
  • Tâche 5 : Comprendre le state locking
  • 🗂️ Mini-Projet : Gestion de state avancée