# Terraform Structure and State Management This guide covers how to choose repository shape, environment segmentation, and state boundaries for Terraform projects. ## Boundary Model Define boundaries by three factors: 1. **Change cadence** — what changes together 2. **Blast radius** — what can fail together 3. **Ownership** — who approves and supports it If those differ between components, split stacks. ## Root Module Patterns | Pattern | Scope | |---|---| | **service-root** | One business service and its direct dependencies | | **platform-root** | Shared platform primitives (network, identity, observability) | | **bootstrap-root** | Backend/state prerequisites and foundational security controls | Avoid monolithic roots that mix all three. ## Environment Isolation Options | Option | Best For | |---|---| | **Separate root directories** per environment | Default choice, clearest isolation | | **Workspace-per-environment** with strict policy | When governance is strong and access controls exist | | **Separate repositories** | Hard regulatory segregation requirements | Pick one and document why. ## State Backend Baseline - Remote backend only for collaborative environments - Lock protection for every apply path - Encryption at rest and in transit - Narrow IAM on state and lock stores - Versioned backup with restore tested at least once - Load [Backend State Safety](backend-state-safety.md) for backend-specific locking, access, and migration guardrails ## Cross-Stack Dependencies Preferred order: 1. **Explicit module outputs** passed in the same root 2. **Published interface artifacts** (preferred at scale) 3. **`terraform_remote_state`** as last-resort coupling If `terraform_remote_state` is used, version and ownership of the producer stack must be explicit. ## Apply Safety Gates Minimum gates for any apply: - `fmt` and `validate` - Lint and security scan - Policy checks - Reviewed plan - Approved apply ## Change Safety for State Evolution - Use `moved` blocks for renames and address changes - For imports, document source of truth and verify idempotency before apply - For manual state operations, require peer review and rollback notes