terraform taint / terraform untaint

Marque (ou démarque) une ressource comme dégradée dans le state, ce qui force sa recréation complète au prochain terraform apply.

Commandes déconseillées depuis Terraform 0.15.2 — toujours fonctionnelles mais remplacées par l’option -replace de plan/apply, plus sûre car elle intègre une prévisualisation avant l’action.


Syntaxe

terraform taint   ADRESSE_RESSOURCE
terraform untaint ADRESSE_RESSOURCE

Exemples

# Marquer une ressource pour recréation
terraform taint aws_instance.web
 
# Marquer une ressource dans un module
terraform taint module.servers.aws_instance.web
 
# Marquer une ressource indexée (count)
terraform taint 'aws_instance.web[0]'
 
# Marquer une ressource indexée (for_each)
terraform taint 'aws_instance.web["prod"]'
 
# Annuler le marquage
terraform untaint aws_instance.web
 
# Vérifier qu'une ressource est bien marquée
terraform state show aws_instance.web   # chercher "status = tainted"

⚠️ Pourquoi c’est déconseillé

terraform taint modifie directement le state sans montrer de plan ni demander de confirmation :

  1. terraform taint aws_instance.web → écrit "status": "tainted" dans le state
  2. terraform apply → recrée la ressource taintée

Le problème : entre le taint et le apply, quelqu’un d’autre peut lancer un apply et déclencher involontairement la recréation.


✅ Équivalent moderne : -replace

# Voir le plan de recréation avant de confirmer
terraform plan -replace="aws_instance.web"
 
# Exemple de sortie :
# -/+ aws_instance.web (tainted)
#     ami = "ami-0c55b159cbfafe1f0"
#     ...
# Plan: 1 to add, 0 to change, 1 to destroy.
 
# Appliquer la recréation
terraform apply -replace="aws_instance.web"
 
# Recréer plusieurs ressources en une seule commande
terraform apply \
  -replace="aws_instance.web" \
  -replace="aws_security_group.web"
 
# Combiner avec d'autres changements normaux
terraform apply -replace="aws_instance.web"
# Terraform applique TOUT : les changements normaux + la recréation forcée

Avantages :

  • La recréation est visible dans le plan avec le symbole -/+
  • Une seule commande remplace le workflow taint → apply
  • Peut être combiné avec d’autres modifications dans le même apply
  • Pas de modification préalable du state

En relation avec