Terraform Advanced — Three-Tier Repo Structure

less than 1 minute read

A proven repository structure for managing Terraform at scale.


The Three Repos

1. terraform-modules/    → Reusable modules (like libraries)
2. terraform-live/       → Environment-specific configs (like deployments)
3. terraform-platform/   → Company platform modules (opinionated wrappers)

Repo 1 — terraform-modules

terraform-modules/
├── modules/
│   ├── vpc/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   ├── outputs.tf
│   │   └── README.md
│   ├── ecs-service/
│   ├── rds/
│   └── s3-bucket/
└── README.md
  • Tagged releases: v1.0.0, v1.1.0, v2.0.0
  • Consumed by terraform-live via version-pinned source

Repo 2 — terraform-live

terraform-live/
├── dev/
│   ├── us-east-1/
│   │   ├── networking/
│   │   │   ├── main.tf        # source = "git::...?ref=v1.2.0"
│   │   │   ├── terraform.tfvars
│   │   │   └── backend.tf
│   │   └── app/
│   └── eu-west-1/
├── staging/
│   └── us-east-1/
└── prod/
    └── us-east-1/

Repo 3 — terraform-platform

terraform-platform/
├── modules/
│   ├── standard-vpc/        # Wraps vpc module with company defaults
│   ├── standard-ecs-app/    # VPC + ALB + ECS + monitoring
│   └── standard-database/   # RDS + backups + alarms

Platform modules encode your company’s opinions: naming, tagging, security, monitoring.


What’s Next?

Isolate environments with separate AWS accounts.

← Production Patterns Account-Per-Environment →

Updated: