Why Terrantula

Terraform was built to describe one durable piece of infrastructure precisely — version it, review it line-by-line, reconcile it against reality. For a handful of long-lived stacks, Terraform plus code review is close to perfect. Operations folklore calls that kind of infrastructure pets, and the templated kind — where the population matters more than any individual — cattle. Per-tenant deployments, per-customer databases, vended accounts, cells in a multi-region fleet: Terraform stamps them beautifully and has no opinion about where the next one lands, whether you're at capacity, or what order to tear one down in.

What breaks at population scale

Everyone who runs stamped infrastructure hits the same wall:

  • Workspace explosion. N tenants means N workspaces, or N variants of the same config — a wall of nearly-identical things you scroll through.
  • State proliferation. Every instance has its own state file scattered across buckets and workspaces. Nothing answers "what's the whole fleet doing right now?"
  • Capacity as tribal knowledge. "We cap at fifty tenants per cluster" lives in a runbook, or in one engineer's head. Nothing enforces it at the moment you add the fifty-first.
  • Naming collisions. Every instance needs a unique slug, region, namespace — so a human eyeballs a spreadsheet to avoid a clash.
  • Deprovisioning rot. A customer churns. Who removes their resources, in what order? Half the time it's skipped, and the resources leak onto the bill.
  • Onboarding latency. Adding an instance "should take five minutes" but takes four hours of an engineer stitching together a workspace, a PR, and a placement decision made by gut.

If two or more of those sound like your week, you've probably already built the missing layer by hand — a Lambda, a spreadsheet, a Slack bot.

The three ideas that replace it

Entities make instances countable: describe a tenant once as a typed record with properties, a lifecycle, and constraints, and two hundred tenants become a population you can query. Cells make placement a rule instead of a decision: "least-loaded cluster, never more than 500 across the fleet" is enforced before anything provisions. Relationships make teardown safe: typed, cardinality-checked connections are what let deprovisioning walk the graph in the right order so nothing leaks. Core Concepts teaches each in depth.

Terraform still does the provisioning. When Terrantula changes infrastructure, it opens a pull request your CI applies — it never runs terraform apply and never holds your credentials, and the dashboard is a read-only projection of your state. That boundary is why you can adopt visibility first (import your state, see the fleet, stop there for a while) and grow into orchestration when the fleet demands it.

Next: Core Concepts →