Skip to main content

On This Page

Terraform Patterns for Multi-Environment Microservices: Balancing Parity and Isolation

2 min read
Share

These articles are AI-generated summaries. Please check the original sources for full details.

Structuring Terraform for Multi-Environment, Microservice Architectures

Terraform becomes difficult to manage as teams introduce multiple microservices and long-lived environments like dev, staging, and prod. A critical distinction for choosing a pattern is between value-based (e.g., instance size) and structural (e.g., provider configurations) divergence.

Why This Matters

Structural divergence—such as differing AWS accounts for dev and prod—requires distinct provider configurations. Workspaces, which share a single main.tf and provider block, struggle with this, risking brittle deployments. Misconfigured state isolation can lead to accidental resource destruction, increasing operational risk and cost.

Key Insights

  • “Folder-per-environment is safe but risks drift without module discipline”: dortort.dev.to
  • “Workspaces support value-based differences but fail for structural divergence”: Terraform Docs
  • “Per-service root modules scale best in microservice organizations”: Spacelift Best Practices

Working Example

# Folder-per-environment example: envs/prod/main.tf
module "app" {
  source = "../../modules/app"
  instance_size = "m5.large"
  environment = "prod"
}
# Workspace example: CLI usage
terraform workspace select prod
terraform apply -var-file=prod.tfvars

Practical Applications

  • Use Case: Microservices requiring strong isolation (e.g., Stripe using per-service roots)
  • Pitfall: Using workspaces for structural divergence (e.g., dev in AWS Account A, prod in Account B) forces complex conditional logic in provider blocks

References:


Continue reading

Next article

The Great Centralisation: History of the internet is a tragedy in Four acts

Related Content