Backends avances et state management 20 min de lecture

State splitting et workspaces

Pourquoi decouper le state ?

Un state monolithique devient difficile a gerer. Le decoupage permet :

  • Des plans plus rapides (moins de ressources a evaluer)
  • Un blast radius reduit (une erreur n'impacte qu'une partie)
  • Des permissions granulaires par equipe

Pattern de decoupage par couche

# infrastructure/networking/
terraform {
  backend "s3" {
    key = "networking/terraform.tfstate"
  }
}

# infrastructure/compute/
terraform {
  backend "s3" {
    key = "compute/terraform.tfstate"
  }
}

# Lire les outputs d'un autre state
data "terraform_remote_state" "networking" {
  backend = "s3"
  config = {
    bucket = "mon-projet-tfstate"
    key    = "networking/terraform.tfstate"
    region = "eu-west-1"
  }
}

# Utiliser les outputs
resource "aws_instance" "web" {
  subnet_id = data.terraform_remote_state.networking.outputs.subnet_id
}

Workspaces Terraform

# Creer un workspace
terraform workspace new staging

# Lister les workspaces
terraform workspace list

# Changer de workspace
terraform workspace select production

# Utiliser le workspace dans la configuration
resource "aws_instance" "web" {
  tags = {
    Environment = terraform.workspace
  }
}
Attention : Les workspaces CLI ne sont pas les memes que les workspaces Terraform Cloud. En CLI, ils partagent la meme configuration avec un state separe.