Le state local fonctionne seul. À deux, il devient une course critique. Comment poser un backend S3 avec verrou DynamoDB, la base d’un vrai projet.
Terraform stocke dans un fichier terraform.tfstate la carte de ce qu’il a créé. Tant que vous êtes seul sur une machine, ce fichier peut vivre à côté du code. Le jour où un collègue lance terraform apply depuis son laptop, vous avez deux vérités — et bientôt une infrastructure qui ne correspond à aucune des deux.
Le backend distant n’est pas une optimisation. C’est la condition minimale pour travailler à plus d’une personne.
Sans state partagé :
Sur AWS, le pattern standard est :
| Pièce | Rôle |
|---|---|
| Bucket S3 | stocke le fichier d’état |
| Versioning S3 | garde l’historique des states |
| Table DynamoDB | verrou exclusif pendant un apply |
| Chiffrement | le state ne voyage pas en clair |
terraform {
backend "s3" {
bucket = "mon-org-terraform-state"
key = "prod/network/terraform.tfstate"
region = "ca-central-1"
dynamodb_table = "terraform-locks"
encrypt = true
}
}Le key est le chemin logique du state. Un projet multi-comptes utilise en général un state par environnement (ou par composant), jamais un seul fichier géant pour tout.
Le bucket et la table doivent exister avant le premier terraform init qui les utilise. Deux approches propres :
Ce qu’il ne faut pas faire : créer le bucket dans le même root module que l’infra applicative. Terraform ne peut pas stocker son state dans une ressource qu’il est en train de créer.
resource "aws_s3_bucket" "state" {
bucket = "mon-org-terraform-state"
}
resource "aws_s3_bucket_versioning" "state" {
bucket = aws_s3_bucket.state.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_dynamodb_table" "locks" {
name = "terraform-locks"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}Quand vous lancez terraform apply :
LockID)Si un apply est tué au milieu (kill -9, laptop qui s’éteint), le verrou peut rester. La commande terraform force-unlock <ID> existe — et ne doit être utilisée qu’après avoir vérifié qu’aucun collègue n’applique vraiment.
Avant les modules élégants et les workspaces, posez le backend. Un state local est un prototype. Un state S3 versionné, chiffré, verrouillé par DynamoDB, c’est le début d’une infrastructure que plusieurs personnes peuvent faire évoluer sans se marcher dessus.
Développement et déploiement de solutions de données — les premiers modules sont en accès libre.