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 showUtiliser 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.tfstateLimites 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 applysur 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