Aller au contenu
Sommaire

Fiche mémo Terraform (HCL, état, plan et apply, modules, backends, import, OpenTofu)

Fiche mémo · environ 6 min de lecture

Validé

Validé. Ce site n’exécute aucune commande. Sources

Avant tout (dans l'ordre)

  1. Dossier de travail jetable ou compte d'essai ; vérifier le workspace actif (terraform workspace show).
  2. terraform init, puis terraform validate, puis terraform plan -out=plan.tfplan : lire le plan en entier.
  3. Appliquer le plan relu (terraform apply plan.tfplan), pas un apply à l'aveugle.
  4. Après coup : terraform plan ne doit plus annoncer de changement.

Attention : l'état contient des données sensibles en clair. Jamais dans Git, un message, une capture ni un prompt à un assistant IA. sensitive = true masque l'affichage, pas l'état. Un fichier de plan peut aussi contenir des valeurs sensibles.

Schéma de repère

Écrire (.tf), planifier (plan, lecture), appliquer (apply, effet) ; l'état relie la configuration aux objets réels.

Vocabulaire

TermeEn bref
IaCinfrastructure décrite en fichiers, versionnable, déclarative
HCLlangage de configuration : blocs et arguments
Providerplugin qui parle à l'API d'une plateforme (registre Terraform)
Resourceobjet géré ; adresse type.nom
Data sourcelecture d'un objet existant (non étudié)
Variable, output, localsentrée, sortie, valeur calculée
État (tfstate)correspondance configuration / objets réels ; secret
Moduleensemble de fichiers réutilisable ; module racine = dossier de travail
Backendoù l'état est stocké (local par défaut, ou distant)
Workspaceétat supplémentaire pour une même configuration ; isolation légère
Dériveécart entre la réalité et l'état/la configuration

Blocs HCL

BlocExemple de forme
terraformrequired_providers, backend, version requise
provider "nom"configuration du fournisseur
resource "type" "nom"objet géré
variable "nom"type, description, default, sensitive, validation
output "nom"value, description
localsvaleurs calculées, lues avec local.<nom>
module "nom"source, version, entrées
importto, id

Références : var.<nom>, local.<nom>, <type>.<nom>.<attribut>, module.<nom>.<sortie>.

Priorité des valeurs de variables (forte vers faible)

  1. -var, -var-file · 2. *.auto.tfvars · 3. terraform.tfvars.json · 4. terraform.tfvars · 5. TF_VAR_<nom> · 6. default

Commandes

CommandeRôlePrudence
terraform inittélécharge providers et modules, configure le backendréseau ; relancer si backend/provider/module change
terraform fmt -checksignale le mauvais formatagelecture
terraform validatevérifie la cohérence de la configurationsans effet sur les objets
terraform planprévisualiselecture ; -out=FILE enregistre (peut contenir des secrets)
terraform plan -destroyprévisualise la destruction totalelecture
terraform plan -refresh-onlymontre ce que mettrait à jour l'étatlecture
terraform plan -detailed-exitcode0 rien, 1 erreur, 2 changementspratique pour détecter la dérive
terraform apply FILEexécute exactement le plan enregistréeffet ; plan relu, compte d'essai
terraform applyplanifie puis demande confirmationeffet ; lire avant de confirmer
terraform destroydétruit tous les objets de l'état courantdestructif, vérifier le workspace, accord de Stéphane hors essai
terraform output [-json]affiche les sortiespeut montrer des secrets
terraform workspace list/new/select/show/deletegère les workspacesdelete et destroy visent l'espace courant
terraform state ...manipule l'état (ne jamais l'éditer à la main)sous-commandes non vérifiées ici
  • Contexte : dossier d'essai initialisé. Droits : ceux de l'identité du fournisseur (moindre privilège). Vérification : terraform plan sans changement après un apply. Retour arrière : corriger la configuration puis planifier et appliquer ; une suppression d'objet n'est pas annulable.

Symboles du plan : + création · - suppression · ~ modification sur place · -/+ remplacement (détruit puis recrée).

Fichiers à exclure de Git

Fichier ou dossierPourquoi
terraform.tfstate, *.tfstate.*état : secrets en clair
.terraform/providers et modules téléchargés
*.tfvars (avec valeurs secrètes)valeurs sensibles
fichiers de plan (*.tfplan)peuvent contenir des valeurs sensibles
.terraform.lock.hclen général versionné : à confirmer (non vérifié)

Liste de bon sens, non relue sur une page officielle.

Backend, workspaces, modules

SujetRepère
Backend localdéfaut : terraform.tfstate sur disque, usage personnel
Backend distantS3, azurerm, gcs, Consul, HTTP, Kubernetes, PostgreSQL... ; verrouillage selon le backend
Changer de backendrelancer terraform init ; l'état peut être migré : le sauvegarder avant
Identifiants du backendvariables d'environnement, jamais dans la configuration
Workspacedefault non supprimable ; pas d'isolation forte (droits et identifiants communs)
Modulesource + version ; relire le code d'un module tiers et figer sa version

Import et dérive

  • Dérive : terraform plan la révèle ; soit réaligner la réalité (apply), soit mettre la configuration à jour. Ne pas laisser de modifications manuelles.
  • Import : bloc import (to, id) + bloc resource, puis apply ; ou terraform plan -generate-config-out pour générer la configuration. L'id dépend du fournisseur : ne pas le deviner. Vérifier ensuite qu'aucun changement n'est planifié sur l'objet importé.

Exercices sans cloud

RessourceUsage
terraform_data (intégrée)stocke input, expose output ; aucun provider à télécharger
local_file (hashicorp/local)crée un fichier ; filename obligatoire, content ; file_permission 0777 par défaut : fixer des droits restrictifs
local_sensitive_filemême idée pour un contenu sensible (remplace sensitive_content, obsolète)

Toujours dans un dossier neuf hors dépôt, supprimé en fin d'exercice.

Licence et OpenTofu

SujetRepère
Licence de Terraform2023-08-10 : HashiCorp passe de MPL 2.0 à BSL 1.1 pour les versions futures (billet officiel)
BSLrestreint les services concurrents ; API, SDK et presque toutes les bibliothèques restent en MPL 2.0
OpenTofufork de Terraform, MPL 2.0, Linux Foundation, commande tofu
FournisseursOpenTofu réutilise les providers existants via son propre registre
Compatibilitéétats créés jusqu'à Terraform 1.5.x (FAQ) ; migrer = sauvegarder état et code d'abord

Conséquences juridiques et comparaison de fonctionnalités : non vérifiées.

Bonnes pratiques

Fichiers .tf versionnés sans secret · état distant verrouillé, chiffré, à accès restreint · plan relu et appliqué tel quel · pas de secret en clair dans la configuration · versions figées (Terraform, providers, modules) · moindre privilège · fmt et validate avant commit · aucune modification manuelle des objets gérés · budget et étiquettes sur un compte cloud.

Sources

Consultées le 18 octobre 2026 (Terraform documentation v1.16.x ; OpenTofu 1.13.x ; version de Stéphane inconnue).