Génère un plan d’exécution montrant les changements que Terraform va appliquer à l’infrastructure. Ne modifie rien.

Toujours exécuter plan avant apply. Sauvegarder le plan avec -out pour garantir l’idempotence.


Options principales

OptionDéfautDescription
-out=FICHIERaucunSauvegarde le plan dans un fichier pour un apply ultérieur
-var="key=value"aucuneDéfinit une variable inline
-var-file=FICHIERterraform.tfvarsCharge les variables depuis un fichier
-target=RESSOURCEtoutesCible une ressource ou un module spécifique
-destroynonPlan de destruction (équivalent terraform destroy en dry-run)
-refresh=true|falsetrueActualise le state avec l’état réel avant le plan
-refresh-onlynonPlan en mode refresh uniquement (ne propose pas de changements)
-lock=true|falsetrueVerrouille le state pendant le plan
-parallelism=N10Nombre d’opérations parallèles
-detailed-exitcodenonCode de sortie 0=succès sans diff, 1=erreur, 2=succès avec diff

Exemples

# Plan standard (affiche les changements)
terraform plan
 
# Sauvegarder le plan pour apply garanti
terraform plan -out=plan.tfplan
 
# Plan avec fichier de variables
terraform plan -var-file=prod.tfvars
 
# Plan avec variable inline
terraform plan -var="region=eu-west-1"
 
# Plan ciblé sur une ressource
terraform plan -target=aws_instance.web
 
# Plan de destruction
terraform plan -destroy
 
# Plan de destruction ciblé
terraform plan -destroy -target=aws_instance.web
 
# Plan refresh-only (voir la dérive sans proposer de changements)
terraform plan -refresh-only
 
# Plan en CI/CD avec code de sortie différencié
terraform plan -detailed-exitcode -out=plan.tfplan
echo "Exit code: $?"  # 0=no changes, 1=error, 2=changes present

Lire un plan

Terraform will perform the following actions:

  # aws_instance.web will be created
  + resource "aws_instance" "web" {           ← + créer
      + ami           = "ami-0c55b159cbfafe1f0"
      + instance_type = "t2.micro"
    }

  # aws_instance.old will be destroyed
  - resource "aws_instance" "old" {           ← - détruire
      - id = "i-0abcd1234567890" -> null
    }

  # aws_instance.db must be replaced
  -/+ resource "aws_instance" "db" {          ← -/+ remplacer (destroy + create)
      ~ instance_type = "t2.micro" -> "t2.small" (forces replacement)
    }

  # aws_security_group.web will be updated in-place
  ~ resource "aws_security_group" "web" {     ← ~ modifier (in-place)
      ~ description = "old" -> "new"
    }

Plan: 1 to add, 1 to change, 1 to destroy.

En relation avec