Terraform implementation reference
AWS and Azure are independent Terraform implementations with separate
providers, roots, modules, backends, tests, bootstrap, identity, and state. No
root combines providers. Local validation pins Terraform 1.15.8, AWS provider
6.57.1, AzureRM 5.0.1, and AzureAD 3.9.0, then runs format,
backend-disabled init, validate, and mocked terraform test for all four roots.
Root stacks
| Root | Purpose | v1.0.0 status |
|---|---|---|
infrastructure/terraform/aws |
VPC, security/logging, private EKS, budget | implemented and mock-tested; never applied |
infrastructure/terraform/azure |
resource group, VNet, security/logging, private AKS, budget | implemented and mock-tested; never applied |
infrastructure/terraform/aws-bootstrap |
KMS/S3 state and environment-bound plan/apply/destroy IAM OIDC roles | one-time operator root; not run |
infrastructure/terraform/azure-bootstrap |
versioned Blob state and environment-bound plan/apply/destroy identities | one-time operator root; not run |
The main roots consume only the selected proposal's allowlisted
.auto.tfvars.json. Provider identifiers, backend coordinates, role/client IDs,
tenant/subscription IDs, and notification addresses remain protected runtime
configuration.
Modules
| AWS | Azure | Responsibility |
|---|---|---|
network |
network |
private-first network and controlled egress |
security-logging |
security-logging |
encryption, audit, diagnostics, security monitoring |
eks-platform |
aks-platform |
private Kubernetes and managed worker capacity |
budget-guardrails |
budget-guardrails |
monthly budget and notifications |
github-oidc |
github-oidc |
separate environment-bound lifecycle identities |
bootstrap |
bootstrap |
encrypted/versioned state and identity composition |
AWS state uses a KMS-encrypted, versioned, public-blocked S3 bucket and native S3 backend lockfile support. Azure state uses HTTPS-only, infrastructure- encrypted, versioned Blob storage with deletion retention and private endpoint/ DNS by default; temporary trusted bootstrap access must be explicit.
Proposal variables
AWS proposals materialize region, mode, name_prefix, vpc_cidr, two
private/two public subnet CIDRs, desired nodes, and monthly USD budget. Azure
proposals materialize location, mode, name_prefix, VNet address space,
two private subnet prefixes, desired nodes, and monthly EUR budget. Real tenant,
subscription, backend, identity, and alert values are never generated from a
developer request.
The roots are real-capable definitions, but no provider authentication, bootstrap, remote state creation, plan, apply, drift, rollback, or destroy was performed for this release.