
Synthèse des concepts Terraform pour l’examen Associate (004). L’examen est un QCM : vous ne taperez pas ces commandes, mais vous devez comprendre ce que fait chaque commande, ses effets et les pièges classiques. Cette page est un condensé de révision, pas un guide d’apprentissage.
Tableau “besoin → commande”
Section intitulée « Tableau “besoin → commande” »| Besoin | Commande |
|---|---|
| Initialiser un projet | terraform init |
| Prévisualiser les changements | terraform plan |
| Appliquer les changements | terraform apply |
| Détruire toute l’infrastructure | terraform destroy |
| Formater le code HCL | terraform fmt |
| Valider la syntaxe | terraform validate |
| Mettre à jour le lock file | terraform init -upgrade |
| Voir le state | terraform state list |
| Inspecter une ressource | terraform state show <addr> |
| Remplacer une ressource | terraform apply -replace=<addr> |
| Importer une ressource existante | terraform import <addr> <id> |
| Afficher les outputs | terraform output |
| Afficher les provider requirements de la configuration | terraform providers |
| Activer le debug | TF_LOG=DEBUG terraform plan |
Ce que fait chaque commande
Section intitulée « Ce que fait chaque commande »| Commande | Ce qu’elle fait | Ce qu’elle ne fait pas |
|---|---|---|
terraform init | Télécharge providers/modules, configure le backend, crée .terraform/ et .terraform.lock.hcl | Ne crée aucune ressource |
terraform plan | Compare config + state + infra réelle, affiche les changements prévus | Ne modifie rien (read-only) |
terraform apply | Exécute le plan : crée/modifie/supprime les ressources, met à jour le state | Ne reformate pas le code |
terraform destroy | Détruit toutes les ressources du state (= apply -destroy) | Ne supprime pas les fichiers .tf |
terraform fmt | Reformate les .tf selon le style canonique HCL | Ne vérifie pas la logique |
terraform validate | Vérifie syntaxe et cohérence HCL | Ne contacte pas le provider |
terraform import | Intègre une ressource existante dans le state | Ne génère pas le code HCL (sauf bloc import {} + -generate-config-out) |
terraform state list | Liste les ressources du state | Ne contacte pas le provider |
Options clés à retenir
Section intitulée « Options clés à retenir »| Option | Commande | Effet |
|---|---|---|
-upgrade | init | Met à jour providers/modules (ignore le lock file) |
-reconfigure | init | Force la reconfiguration du backend |
-migrate-state | init | Migre le state vers un nouveau backend |
-out=tfplan | plan | Sauvegarde le plan dans un fichier binaire |
-auto-approve | apply/destroy | Supprime la confirmation interactive |
-replace=<addr> | apply | Force la recréation d’une ressource (remplace taint) |
-target=<addr> | plan/apply | Cible une seule ressource (dépannage uniquement) |
-refresh-only | plan/apply | Met à jour le state et les outputs pour refléter les changements faits hors Terraform, sans modifier les objets distants |
-var / -var-file | plan/apply | Passe des variables en ligne de commande |
-check | fmt | Vérifie sans modifier (code d’erreur si non formaté) |
Blocs déclaratifs (nouveautés 004)
Section intitulée « Blocs déclaratifs (nouveautés 004) »| Bloc | Remplace | Effet |
|---|---|---|
moved {} | terraform state mv | Met à jour l’adresse d’une ressource dans le state sans la détruire — déclaratif, versionné |
removed {} | terraform state rm | Par défaut, retire du state et détruit la ressource réelle. Pour ne pas détruire l’infra, ajouter lifecycle { destroy = false } |
import {} | terraform import | Import déclaratif d’une ressource existante (Terraform 1.5+). Peut générer la config avec terraform plan -generate-config-out=... |
Priorité des variables (haute → basse)
Section intitulée « Priorité des variables (haute → basse) »| Priorité | Source |
|---|---|
| 1 (haute) | -var et -var-file sur la ligne de commande (et variables HCP Terraform) |
| 2 | *.auto.tfvars / *.auto.tfvars.json (ordre alphabétique) |
| 3 | terraform.tfvars.json |
| 4 | terraform.tfvars |
| 5 | Variables d’environnement TF_VAR_* |
| 6 (basse) | default dans variable {} |
count vs for_each
Section intitulée « count vs for_each »| Aspect | count | for_each |
|---|---|---|
| Référence | Index numérique : [0], [1] | Clé de map/set : ["web-1"] |
| Suppression | Décale les index suivants | Ne décale rien |
| Usage | Ressources identiques | Ressources avec identité distincte |
| Recommandation | Nombre fixe, ressources simples | Dès qu’une clé identifie chaque instance |
Lifecycle
Section intitulée « Lifecycle »| Option | Effet |
|---|---|
create_before_destroy | Crée la nouvelle ressource avant de détruire l’ancienne |
prevent_destroy | Erreur si Terraform tente de détruire cette ressource |
ignore_changes | Ignore les modifications manuelles sur les attributs listés |
Custom conditions (nouveauté 004)
Section intitulée « Custom conditions (nouveauté 004) »| Bloc | Où | Effet |
|---|---|---|
precondition | Dans lifecycle {} | Vérifie une condition avant l’opération — bloque si faux |
postcondition | Dans lifecycle {} | Vérifie une condition après l’opération — bloque si faux |
check {} | Au niveau racine | Assertion continue — affiche un warning sans bloquer le plan |
Données sensibles
Section intitulée « Données sensibles »| Concept | Détail |
|---|---|
sensitive = true | Masque la valeur dans les logs de plan/apply — ne chiffre pas le state |
| State en clair | Le state contient toutes les valeurs sensibles en texte brut |
| Provider Vault | Permet de lire les secrets depuis HashiCorp Vault au lieu de les stocker dans le code |
| Backend sécurisé | Stockez le state dans un backend chiffré (S3 + encryption, HCP Terraform) |
Debug (TF_LOG)
Section intitulée « Debug (TF_LOG) »| Variable | Effet |
|---|---|
TF_LOG | Active les logs — niveaux : TRACE > DEBUG > INFO > WARN > ERROR |
TF_LOG_PATH | Redirige les logs vers un fichier |
Workspaces CLI vs HCP Terraform
Section intitulée « Workspaces CLI vs HCP Terraform »| Aspect | CLI (terraform workspace) | HCP Terraform |
|---|---|---|
| State | Fichiers séparés dans le même backend | State dédié par workspace |
| Variables | Mêmes fichiers tfvars | Variables par workspace + variable sets |
| Exécution | Locale | Distante (runners HCP) |
| Gouvernance | Aucune | Policies, cost estimation, audit |
| Collaboration | Manuelle | UI, VCS, notifications, approbations |
Pièges fréquents en QCM
Section intitulée « Pièges fréquents en QCM »| Affirmation piège | Bonne réponse |
|---|---|
init met à jour automatiquement les providers | Non — il faut init -upgrade |
validate vérifie que les ressources existent dans le cloud | Non — syntaxe HCL uniquement, pas de contact provider |
taint est la méthode recommandée pour recréer | Non — -replace remplace taint (déprécié) |
| Le state est chiffré par défaut | Non — tout est en clair, y compris les données sensibles |
plan modifie l’infrastructure | Non — read-only, seul apply modifie |
TF_VAR_* a la plus haute priorité | Non — -var/-var-file gagnent. TF_VAR_* est en dessous des fichiers tfvars |
| Les workspaces CLI et HCP sont identiques | Non — concepts très différents |
moved {} détruit et recrée la ressource | Non — met à jour l’adresse dans le state sans toucher à l’infra |
removed {} retire du state sans conséquence | Attention — par défaut removed {} détruit aussi la ressource réelle. lifecycle { destroy = false } pour un simple retrait |
sensitive = true chiffre la valeur dans le state | Non — masque les logs uniquement, le state reste en clair |
count et for_each sont interchangeables | Non — count = index numérique, for_each = clé stable |
terraform import génère automatiquement le code HCL | Non — il faut écrire le bloc resource (sauf bloc import {} + -generate-config-out) |
À retenir
Section intitulée « À retenir »- Le workflow fondamental est init → plan → apply → destroy
init -upgrademet à jour les providers,initseul respecte le lock filevalidate= syntaxe,plan= faisabilité — ce n’est pas la même chose-replaceremplacetaint,moved {}remplacestate mv,removed {}remplacestate rm(attention :removed {}détruit par défaut —lifecycle { destroy = false }pour garder l’infra)- Priorité des variables :
-var/-var-file>*.auto.tfvars>terraform.tfvars.json>terraform.tfvars>TF_VAR_*>default - Le state contient les valeurs sensibles en clair — protégez-le avec un backend sécurisé
- Les workspaces CLI ≠ workspaces HCP Terraform
- Les custom conditions (
precondition,postcondition,check) sont des nouveautés testées en (004) - Le provider Vault peut gérer les secrets — ne stockez jamais de credentials dans le code
Prochaines étapes
Section intitulée « Prochaines étapes » Exercices Associate 40 questions d'entraînement au format QCM
Guide de préparation Associate Plan de révision complet sur 4 semaines
CLI Terraform Guide détaillé des commandes Terraform
Fonctions Terraform Référence complète des fonctions HCL