// TERRAFORM · 7 MIN DE LECTURE

Terraform : bloquer un plan destructeur avec prevent_destroy

Comment analyser un remplacement Terraform inattendu, protéger une ressource critique et réaligner l’état sans détruire la production.

Ne jamais appliquer un remplacement incompris

Le symbole -/+ dans un plan signifie que Terraform veut détruire puis recréer une ressource. Pour une base de données ou une ressource avec état, arrête la livraison tant que l’attribut forces replacement n’est pas compris.

Sauvegarde le plan et lis sa version détaillée. Le résumé seul ne montre pas toujours l’attribut à l’origine du remplacement.

terraform plan -out=tfplan
terraform show tfplan
terraform show -json tfplan > tfplan.json

Ajouter une barrière de sécurité

Le bloc lifecycle avec prevent_destroy transforme une destruction planifiée en erreur. Il ne corrige pas la divergence, mais empêche une application accidentelle pendant le diagnostic.

Cette protection doit être définie dans le code et revue comme toute autre modification d’infrastructure.

lifecycle {
  prevent_destroy = true
}

Déterminer si l’état doit être déplacé

Un renommage de ressource dans le code peut faire croire à Terraform que l’ancienne ressource doit disparaître. Utilise un bloc moved ou terraform state mv pour relier l’ancienne adresse à la nouvelle sans toucher à l’infrastructure.

Avant toute manipulation d’état, réalise une sauvegarde et vérifie que tu travailles dans le bon workspace.

terraform workspace show
terraform state pull > state-backup.json
terraform state mv module.old.aws_db_instance.main module.new.aws_db_instance.main

Recalculer et faire relire le plan

Génère un nouveau plan après la correction. L’objectif est d’obtenir zéro destruction non prévue, pas simplement de faire disparaître le message d’erreur.

Pour les ressources critiques, ajoute une validation automatique qui bloque la pipeline lorsque le plan contient une suppression et exige une approbation humaine explicite.

terraform plan -out=tfplan-fixed
terraform show tfplan-fixed
terraform apply tfplan-fixed