1. Le code #
Lisible et prévisible.
Règles #
- Fichiers standard : main.tf, variables.tf, outputs.tf, versions.tf, README.
- Noms en minuscules avec tirets bas, sans répéter le type de ressource.
- required_version et versions de fournisseurs épinglées ; .terraform.lock.hcl versionné.
- Pas de valeurs codées en dur : variables avec validation, locals pour les calculs.
2. État et sécurité #
Protéger ce qui est critique.
Règles #
- État distant chiffré, versionné, verrouillé, avec accès restreint.
- Un état par couche et par environnement.
- Aucun secret dans le code ni dans les tfvars versionnés ; variables sensibles et valeurs éphémères.
- lifecycle prevent_destroy sur les ressources critiques (bases, buckets d'état).
3. Livraison et maintenance #
Durer.
Règles #
- Plan publié et relu sur chaque demande de fusion ; apply uniquement par pipeline.
- Contrôles automatiques : fmt, validate, tflint, Checkov, terraform test.
- Détection de dérive planifiée ; toute modification manuelle est réintégrée dans le code ou annulée.
- Mises à jour régulières de Terraform, des fournisseurs et des modules (Renovate, Dependabot).
terraform fmt -check -recursive
terraform validate
tflint --recursive
checkov -d . --quiet
terraform test
terraform plan -refresh-only -detailed-exitcode # code 2 = dérive
terraform providers lock -platform=linux_amd64 -platform=darwin_arm64