terraform state — Gestion du state
Ensemble de sous-commandes pour inspecter et modifier directement le fichier d’état Terraform.
Toujours faire un backup avant toute modification :
terraform state pull > backup_$(date +%Y%m%d).tfstate
terraform state list — lister les ressources
# Lister toutes les ressources dans le state
terraform state list
# Filtrer par ID
terraform state list -id=i-0abcd1234567890
# Lister depuis un state alternatif
terraform state list -state=backup.tfstate
# Filtrer par préfixe (module ou type)
terraform state list module.vpc
terraform state list aws_instance.*Exemple de sortie :
aws_vpc.main
aws_subnet.public
aws_subnet.private
module.eks.aws_eks_cluster.main
module.eks.aws_eks_node_group.workers
terraform state show — inspecter une ressource
# Afficher les détails d'une ressource
terraform state show aws_instance.web
# Ressource dans un module
terraform state show module.vpc.aws_vpc.main
# Ressource indexée (count ou for_each)
terraform state show 'aws_instance.web[0]'
terraform state show 'aws_instance.web["prod"]'
# Depuis un state alternatif
terraform state show -state=backup.tfstate aws_instance.webExemple de sortie :
# aws_instance.web:
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
id = "i-0abcd1234567890"
instance_type = "t2.micro"
private_ip = "10.0.1.5"
public_ip = "52.10.0.100"
tags = {
Name = "web-server"
}
}terraform state rm — retirer une ressource du state
Retire une ressource du state sans la détruire dans l’infrastructure réelle.
# Retirer une ressource (elle continue d'exister mais Terraform ne la gère plus)
terraform state rm aws_instance.old
# Simuler avant d'exécuter
terraform state rm -dry-run aws_instance.old
# Retirer toutes les ressources d'un module
terraform state rm module.legacy
# Retirer une ressource indexée
terraform state rm 'aws_instance.web[0]'
# Avec verrouillage désactivé (dangereux)
terraform state rm -lock=false aws_instance.webCas d’usage :
- Ressource créée manuellement et à importer dans un autre module
- Migration d’un workspace vers un autre
- Supprimer une ressource orpheline du state sans la détruire
terraform state mv — déplacer / renommer une ressource
Renomme ou déplace une ressource dans le state (utile lors d’un refactoring).
# Renommer une ressource
terraform state mv aws_instance.old aws_instance.new
# Déplacer dans un module
terraform state mv aws_instance.web module.compute.aws_instance.web
# Déplacer entre modules
terraform state mv module.old.aws_instance.web module.new.aws_instance.web
# Simuler avant d'exécuter
terraform state mv -dry-run aws_instance.old aws_instance.new
# Déplacer vers un autre state (cross-state)
terraform state mv \
-state=source.tfstate \
-state-out=destination.tfstate \
aws_instance.web aws_instance.webCas d’usage :
- Renommer une ressource dans le
.tfsans la recréer - Réorganiser des ressources dans des modules
- Refactoring sans downtime
terraform state replace-provider — migrer un provider
Remplace le provider qui gère des ressources dans le state, sans recréer ces ressources. Utile pour migrer d’un provider fork vers le provider officiel, ou lors d’un changement de namespace.
# Syntaxe
terraform state replace-provider ANCIEN_PROVIDER NOUVEAU_PROVIDER
# Migrer depuis un provider communautaire vers le provider officiel
terraform state replace-provider \
registry.terraform.io/hashicorp/kubernetes \
registry.terraform.io/hashicorp/kubernetes
# Migrer depuis un provider non-officiel
terraform state replace-provider \
registry.terraform.io/terraform-providers/aws \
registry.terraform.io/hashicorp/aws
# Simuler sans modifier le state
terraform state replace-provider -dry-run \
registry.terraform.io/old-org/myprovider \
registry.terraform.io/new-org/myprovider
# Forcer sans confirmation
terraform state replace-provider -auto-approve \
registry.terraform.io/old-namespace/resource \
registry.terraform.io/hashicorp/resourceCas d’usage :
- Migration depuis un provider Terraform 0.12 (namespace implicite) vers 0.13+ (namespace explicite)
- Passage d’un provider fork communautaire au provider officiel
- Renommage de namespace d’un provider tiers
terraform force-unlock — déverrouiller le state
Déverrouille manuellement un state bloqué après un crash ou une interruption.
# Afficher le lock ID (visible dans le message d'erreur)
# Error acquiring the state lock:
# Lock Info: ID: a1b2c3d4-5678-9101-abcd-ef0123456789
# Déverrouiller
terraform force-unlock a1b2c3d4-5678-9101-abcd-ef0123456789
# Sans confirmation interactive
terraform force-unlock -force a1b2c3d4-5678-9101-abcd-ef0123456789⚠️ Précautions :
- Vérifier qu’aucun autre processus Terraform n’est en cours avant de déverrouiller
- Un unlock forcé sur un state en cours de modification peut corrompre le state
En relation avec
- State — Vue d’ensemble — hub gestion du state
- terraform state pull et push — télécharger/envoyer le state manuellement
- Backend — Configuration et option — où est stocké le state
- terraform import — importer des ressources existantes dans le state