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 state05 - Configurer un backend pour le state distant

Détails

  • 25 minutes
  • Intermédiaire

Objectifs

  • Configurer un backend S3 avec DynamoDB pour le locking
  • Migrer un state local vers un backend distant
  • Comprendre le travail en équipe avec un state partagé
  • Utiliser terraform init -migrate-state
Module Terraform : variables, modules et gestion du state

Exercice 05 : Configurer un backend pour le state distant

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Configurer un backend local avec un chemin custom
  • ✅ Configurer un backend s3 avec DynamoDB pour le locking
  • ✅ Migrer un state existant avec terraform init -migrate-state
  • ✅ Comprendre pourquoi le state distant est indispensable en équipe

Durée estimée : 25 minutes

Difficulté : ⭐⭐⭐⭐☆ (Intermédiaire+)

Prérequis : Terraform installé, exercice 04 terminé, compte AWS (optionnel pour la partie S3)


📖 Contexte

Par défaut, Terraform stocke le state localement dans terraform.tfstate. En équipe, cela pose deux problèmes : impossible de partager le state, et deux apply simultanés peuvent le corrompre. La solution est un backend distant avec locking : S3 + DynamoDB sur AWS, ou Terraform Cloud.


📋 Énoncé

Vous allez d'abord configurer un backend local avec un chemin personnalisé, puis simuler la configuration d'un backend S3 (avec les commandes nécessaires pour l'infrastructure AWS prérequise).

Résultat attendu :

  • Compréhension de la configuration du backend
  • Configuration S3 + DynamoDB prête à déployer

🧭 Déroulement de l'exercice

Tâche 1 : Configurer un backend local avec chemin custom

Modifiez le backend pour stocker le state dans ./state/terraform.tfstate au lieu du chemin par défaut.

Indice : Le bloc backend "local" dans terraform {} accepte un paramètre path.

Vérification : Après terraform init -migrate-state, le state se trouve dans ./state/terraform.tfstate.


Tâche 2 : Comprendre la structure du backend S3

Analysez la configuration S3 fournie en solution et identifiez : le bucket, la clé, la région, et le paramètre DynamoDB.

Indice : dynamodb_table est le nom de la table DynamoDB utilisée pour le locking. La clé de partition doit être LockID de type String.

Vérification : Vous expliquez le rôle de chaque paramètre du bloc backend "s3".


Tâche 3 : Préparer l'infrastructure du backend S3

Créez un projet Terraform SÉPARÉ (bootstrap/) qui crée le bucket S3 et la table DynamoDB pour le backend.

Indice : Le projet bootstrap ne peut PAS utiliser le backend S3 qu'il crée (boucle). Il utilise le backend local.

Vérification : Le bucket S3 et la table DynamoDB sont créés dans AWS (ou simulés avec LocalStack).


Tâche 4 : Migrer le state vers S3

Ajoutez le bloc backend "s3" dans versions.tf et lancez terraform init -migrate-state.

Indice : Terraform demande confirmation avant de copier le state local vers S3.

Vérification : aws s3 ls s3://mon-bucket-tfstate/ montre le fichier terraform.tfstate.


Tâche 5 : Simuler le travail en équipe

Expliquez et démontrez ce qui se passe quand deux développeurs lancent terraform apply simultanément avec le backend S3 + DynamoDB.

Indice : Le premier apply verrouille la table DynamoDB (clé LockID). Le deuxième reçoit un message d'erreur avec l'ID du lock et l'info du détenteur.

Vérification : La table DynamoDB montre un enregistrement pendant l'apply du premier développeur.


🗂️ Mini-Projet : Bootstrap complet du backend AWS

bootstrap/              # projet Terraform pour créer le backend
├── main.tf
├── outputs.tf
└── versions.tf

mon-projet/             # projet principal utilisant le backend S3
├── main.tf
├── variables.tf
├── outputs.tf
└── versions.tf         # contient le bloc backend "s3"

Infrastructure bootstrap à créer :

hcl
# bootstrap/main.tf
provider "aws" {
  region = "eu-west-3"
}

resource "aws_s3_bucket" "tfstate" {
  bucket = "mon-projet-tfstate-${random_id.suffix.hex}"
}

resource "aws_s3_bucket_versioning" "tfstate" {
  bucket = aws_s3_bucket.tfstate.id
  versioning_configuration {
    status = "Enabled"
  }
}

resource "aws_dynamodb_table" "tfstate_lock" {
  name         = "terraform-state-lock"
  billing_mode = "PAY_PER_REQUEST"
  hash_key     = "LockID"

  attribute {
    name = "LockID"
    type = "S"
  }
}

Checkpoints :

  • Backend local custom : ./state/terraform.tfstate contient le state après migration
  • terraform init -migrate-state copie le state sans perte de données
  • La configuration S3 pointe vers le bon bucket, la bonne clé et la bonne table DynamoDB
  • Le versioning S3 est activé (protection contre la corruption accidentelle)
  • terraform apply concurrent : le deuxième affiche Error acquiring the state lock

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Configurer un backend local avec chemin custom
  • Tâche 2 : Comprendre la structure du backend S3
  • Tâche 3 : Préparer l'infrastructure du backend S3
  • Tâche 4 : Migrer le state vers S3
  • Tâche 5 : Simuler le travail en équipe
  • 🗂️ Mini-Projet : Bootstrap complet du backend AWS