Terraform est devenu la référence en matière d’Infrastructure as Code. Mais une mauvaise utilisation peut entraîner des catastrophes en production. Voici les bonnes pratiques que j’applique chez mes clients (Danone, AXA, Banque de France).
1. Structure de projet standardisée
Organisez votre code Terraform de manière cohérente et scalable.
terraform/
├── environments/
│ ├── dev/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── terraform.tfvars
│ ├── staging/
│ └── prod/
├── modules/
│ ├── networking/
│ ├── compute/
│ └── database/
└── global/
└── iam/
2. Gestion des états (state)
Ne stockez jamais le fichier terraform.tfstate en local. Utilisez un backend distant avec verrouillage.
terraform {
backend "s3" {
bucket = "terraform-state-prod"
key = "network/terraform.tfstate"
region = "eu-west-3"
dynamodb_table = "terraform-locks"
encrypt = true
}
}
3. Utilisez des modules
Découpez votre infrastructure en modules réutilisables. Testez-les indépendamment.
4. Versionnez et documentez
- Versionnez le code Terraform dans Git
- Documentez les entrées/sorties des modules
- Utilisez des tags sur les versions des modules
5. Validez avant d’appliquer
Intégrez terraform fmt, terraform validate et terraform plan dans votre pipeline CI/CD.
6. Gérez les secrets proprement
N’écrivez jamais de secrets en clair dans les fichiers .tf ou .tfvars. Utilisez un gestionnaire de secrets (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault).
7. IAM et moindre privilège
Le compte ou le rôle qui exécute Terraform doit avoir les permissions strictement nécessaires. Pas de droits *:*.
8. Taguez toutes les ressources
locals {
common_tags = {
Environment = var.environment
ManagedBy = "Terraform"
Owner = "Olivier Brun"
CostCenter = var.cost_center
}
}
9. Appliquez en production avec précaution
- Utilisez des pipelines d’approbation manuelle pour la prod
- Activez les
prevent_destroysur les ressources critiques - Planifiez des tests de restauration réguliers
Récapitulatif
Adoptez ces bonnes pratiques dès le premier jour : structure cohérente, état distant, modules, validation CI/CD, gestion des secrets, moindre privilège et tagging systématique.