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.