--- name: terraform-infra category: meta public: false database: none hosting_hints: - aws - gcp - azure - digitalocean - cloudflare - hetzner audit_stack: - analyze - code-clean - cso - doc plugins: context7: optional ui-ux-pro-max: no gstack: no --- # Terraform Infrastructure-as-Code Projet Terraform/OpenTofu définissant une infrastructure cloud. Pas de code applicatif — que des ressources cloud. ## Detection signals ### Strong signals (×3) - EXT: 2+ fichiers `.tf` à la racine OU dans `modules/` - FILE: `main.tf` - FILE: `terraform.tfvars` OR `*.auto.tfvars` (attention: doit être gitignored) - FILE: `.terraform.lock.hcl` ### Medium signals (×2) - FILE: `variables.tf` - FILE: `outputs.tf` - FILE: `backend.tf` OR `versions.tf` OR `providers.tf` - DIR: `modules/` contenant sous-modules `.tf` - FILE: `terragrunt.hcl` ### Weak signals (×1) - DIR: `.terraform/` (gitignored normalement) - FILE: `.tflint.hcl` - FILE: `.tfsec.yaml` OR `.checkov.yaml` - DIR: `environments/` (dev/staging/prod en workspaces) ### Composition overlays - **Terragrunt** : `terragrunt.hcl` présent → multi-env DRY - **OpenTofu** : `opentofu.lock.hcl` OR `tofu.tf` → fork open-source, même archétype ## Implications - **Cloud provider** : variable (AWS/GCP/Azure/DO/Cloudflare/Hetzner/mix) - **Base de données** : N/A (mais peut provisionner des DBs managées) - **SEO/GEO** : N/A - **Surface sécurité** : CRITIQUE — un mauvais `.tf` peut ouvrir un S3 bucket publique ou IAM trop permissif - **UI/UX** : N/A ## Typical pain points - `terraform.tfvars` committé avec secrets (API keys, DB passwords) - State file en local (pas de remote backend S3/GCS/Terraform Cloud) - State file committé dans git (ÉNORME red flag — contient secrets en clair) - Pas de state locking (DynamoDB / GCS lock) → corruption en équipe - IAM policies trop permissives (`"*"` actions / resources) - S3 buckets sans encryption, sans versioning, sans logging - Security groups ingress `0.0.0.0/0` sur ports non-HTTP - Secrets dans variables au lieu de secret manager - Providers non pinned → breaking changes silencieuses - Modules non versionnés (`source = "./modules/x"` au lieu de `git::...?ref=v1.0.0`) - Pas de `tflint` / `tfsec` / `checkov` en CI - Plan non reviewé avant apply (auto-approve en CI dangereux) - Pas de `depends_on` explicite → ordre d'apply instable - `count` / `for_each` mal utilisé → ressources détruites-recréées accidentellement ## Interview questions (adaptive) En plus du set minimum business : - Cloud provider(s) : AWS / GCP / Azure / DO / Cloudflare / Hetzner / multi ? - Terraform ou OpenTofu ? - Terragrunt utilisé ? - State backend : local / S3+DynamoDB / GCS / Terraform Cloud / Spacelift / autre ? - Multi-env : workspaces / modules / Terragrunt ? - Pipeline CI : Atlantis / Terraform Cloud / GitHub Actions / GitLab / aucun ? - Plan review obligatoire avant apply ? - Secrets : Vault / AWS Secrets Manager / GCP Secret Manager / SOPS / autre ? - Scanners sécu : tflint / tfsec / checkov / trivy ? - Versions providers pinnées ? - Drift detection (terraform plan régulier en CI) ? - Disaster recovery plan (perte de state) ? ## Plugin recommendations - **context7** : OPTIONAL — ON pour AWS/GCP providers (APIs évoluent) - **ui-ux-pro-max** : OFF - **gstack** : OFF ## Example project layout ``` main.tf variables.tf outputs.tf providers.tf versions.tf backend.tf terraform.tfvars (GITIGNORED — contient secrets) .terraform.lock.hcl .tflint.hcl modules/ vpc/ main.tf variables.tf outputs.tf ecs-service/ ... environments/ dev/ terragrunt.hcl prod/ terragrunt.hcl .github/ workflows/ terraform-plan.yml terraform-apply.yml ```