Passer au contenu principal

Organisation (Terraform)

Workspaces

Les workspaces permettent de maintenir plusieurs states distincts à partir du même code Terraform. C'est une façon de gérer plusieurs environnements (prod, staging, dev) sans dupliquer les fichiers HCL. Simple à mettre en place, mais avec des limites importantes à connaître avant de s'y engager.

Commandes de base

# Lister les workspaces (default est toujours présent)
terraform workspace list

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

# Basculer entre workspaces
terraform workspace select prod
terraform workspace select staging

# Workspace courant
terraform workspace show

Utiliser le workspace dans le code

locals {
  env = terraform.workspace    # "prod", "staging", "dev"

  instance_config = {
    prod    = { type = "t3.large",  count = 3 }
    staging = { type = "t3.small",  count = 1 }
    dev     = { type = "t3.micro",  count = 1 }
  }

  current_config = local.instance_config[local.env]
}

resource "aws_instance" "web" {
  count         = local.current_config.count
  instance_type = local.current_config.type
  # ...
}

Workspaces et backends

Sur un backend S3, chaque workspace a son propre state file :

s3://bucket/chemin/terraform.tfstate           # workspace default
s3://bucket/chemin/env:/staging/terraform.tfstate
s3://bucket/chemin/env:/prod/terraform.tfstate

Limites des workspaces

Les workspaces sont pratiques pour des environnements identiques avec des paramètres légèrement différents. Ils montrent leurs limites dans plusieurs situations :

  • Environnements structurellement différents : si prod a un RDS Multi-AZ et staging n'en a pas, la logique conditionnelle dans le code devient vite lourde.
  • Isolation des accès : tous les workspaces d'un même projet partagent le même backend et les mêmes permissions. Impossible de restreindre l'accès prod à une sous-équipe sans changer d'architecture.
  • Visibilité : il n'est pas évident de savoir sur quel workspace on travaille. Un terraform apply sur le mauvais workspace peut avoir des conséquences sérieuses.

L'alternative recommandée pour une séparation stricte : un répertoire (et un backend) par environnement, orchestré par Terragrunt (couvert dans la section Expertise).

Workflow typique avec workspaces

# Vérifier le workspace avant toute opération destructive
terraform workspace show

# Plan sur staging
terraform workspace select staging
terraform plan -var-file="staging.tfvars" -out=staging.tfplan
terraform apply staging.tfplan

# Promouvoir en prod
terraform workspace select prod
terraform plan -var-file="prod.tfvars" -out=prod.tfplan
terraform apply prod.tfplan