soft guideINFRASTRUCTURE & ADVISORY

Case study 01

A new region is a new cell, not a bigger cluster

A platform that grows by adding identical, isolated cells: one VPC and one cluster each, built from one module and handed to GitOps through a single ConfigMap.

Role
Designed the cell model, wrote the Terraform module and the Terramate layout, built the GitOps bridge.
Available as
Launch package · cell-platform and cell-gitops baselines
Organization guardrailsFive SCPs and one RCP, attached once per OUAccount baselinePermissions boundaries, CI roles over OIDC, encryption and IMDSv2 defaults, budgetsCELL · ONE VPC · ONE CLUSTERPublic tierNAT, load balancersEgress tierGateway nodes onlyPrivate tier: EKSCilium · Karpenter · Pod IdentityFluxReads cell-gitopscell-metadataAWS facts → ${variables}

The problem

One large cluster per environment concentrates the blast radius. A bad admission policy, a CNI upgrade or a noisy tenant takes everything down at once, and every upgrade becomes a high-stakes event that nobody wants to schedule.

The approach

The unit of deployment became a cell: one account and region, one VPC with private, egress and public tiers, one EKS cluster, its own keys and identities. A new region or a customer that needs isolation is a new cell. Terramate globals cascade from the organization through the account to the cell, so a new cell is one small stack file; the backend, providers and module call are generated and committed so reviewers read real Terraform.

The bridge

Terraform knows the AWS facts that manifests need: role ARNs, queue names, key ARNs, the VPC. It writes them once into a cell-metadata ConfigMap, and every Flux Kustomization substitutes ${variables} from it. Manifests carry no account, region or ARN, so one GitOps tree serves every cell. Terraform installs only what must exist before Flux: Cilium, the egress gateway and Flux itself.

What changed

Blast radius became one cell. Upgrades roll cell by cell, development first. Creating a cell went from a project to a pull request, and the same reviewed code builds every one of them.

Described as a pattern: names, numbers of systems and identifiers from the environments where this was built are left out.

Start a conversation

Bring your infrastructure
into focus.

Tell me what you are building, operating, or trying to improve.

Let’s talk