Garden of KnowledgeApplied Sciences › Computer Science › Software › DevSecOps › Terraform
March 20, 2026

Terraform — State et Workspaces

Le state est le cœur de Terraform : il mappe les ressources déclarées dans le code aux ressources réelles dans le cloud. Comprendre le state est indispensable pour travailler en équipe et éviter les catastrophes.

Le State Terraform§

Qu’est-ce que le state ?

graph LR
    CODE["Code .tf\nDesired State"]
    STATE["terraform.tfstate\nKnown State"]
    INFRA["Infrastructure Réelle\nCloud / On-prem"]
    PLAN["terraform plan\n(diff)"]

    CODE --> PLAN
    STATE --> PLAN
    PLAN -->|"terraform apply"| INFRA
    INFRA -->|"terraform refresh"| STATE

Risques si le state est mal géré :

Remote State (Recommandé en Équipe)§

Stocker le state dans un backend distant pour le partager et le verrouiller.

Backend S3 (AWS)

terraform {
  backend "s3" {
    bucket         = "mon-bucket-terraform-state"
    key            = "prod/terraform.tfstate"
    region         = "eu-west-1"
    encrypt        = true
    dynamodb_table = "terraform-lock"   # Verrouillage concurrent
  }
}

Autres backends courants :

Commandes State§

# Lister les ressources dans le state
terraform state list

# Inspecter une ressource
terraform state show aws_instance.my_server

# Importer une ressource existante dans le state
terraform import aws_instance.my_server i-1234567890abcdef0

# Déplacer une ressource (renommage refactoring)
terraform state mv aws_instance.old_name aws_instance.new_name

# Supprimer du state sans détruire la ressource réelle
terraform state rm aws_instance.my_server

Workspaces§

Les workspaces permettent de gérer plusieurs environnements (dev, staging, prod) avec le même code.

# Lister les workspaces
terraform workspace list

# Créer et basculer vers un workspace
terraform workspace new staging
terraform workspace select prod

# Workspace courant
terraform workspace show

Utilisation dans le code :

resource "aws_instance" "app" {
  instance_type = terraform.workspace == "prod" ? "t3.large" : "t3.micro"
  tags = {
    Environment = terraform.workspace
  }
}

Limites des workspaces :

Gestion des Secrets§

Ne jamais mettre des secrets en clair dans les fichiers .tf ou dans le state committé.

Bonnes pratiques :

variable "db_password" {
  type      = string
  sensitive = true   # Cache la valeur dans les logs terraform plan/apply
}

data "aws_secretsmanager_secret_version" "db" {
  secret_id = "prod/db/password"
}

Structure de Projet Recommandée§

projet-terraform/
├── modules/
│   ├── vpc/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   └── ec2/
├── environments/
│   ├── dev/
│   │   ├── main.tf
│   │   └── terraform.tfvars
│   └── prod/
│       ├── main.tf
│       └── terraform.tfvars
└── .gitignore   # contient : *.tfstate, *.tfstate.backup, .terraform/, *.tfvars
—The Gardener