Skip to main content
To run apps in more than one region, provision an additional cell for each region. A cell is one (account, region) pair. It provisions its own regional app infrastructure and database, and acts as its own deploy target in Synthetiq.
This page covers multiple regions within one AWS account. The directory layout below nests each cell under its account id, so it extends to multiple accounts later. Multi-account provisioning is not yet supported.

Repository layout

Each cell is its own infra root: a directory holding package.json, .npmrc, and _infra/synthetiq.yaml. Organize cells by account id, then region:
When adding a region to an existing single-region setup, move the current infra root into <account-id>/<region>/ first.

The additional cell’s synthetiq.yaml

An additional cell is an ordinary config with two differences: it sets cell_slug to a unique slug (use the region), and it skips the account-shared resources the primary already owns. Your first region is the primary cell and omits cell_slug.
Each cell needs its own setup, the same as a single region:
  • A distinct base domain. A cell has its own edge, so two cells cannot share a domain. Give each cell its own domain (apps.yourcompany.com, apps-au.yourcompany.com).
  • Its own certificates. An API certificate covering *.api.<domain> in the cell’s region, and a CDN certificate covering *.<domain> + apex in us-east-1 (the edge is always in us-east-1, whatever the cell’s region).
  • Its own network. A VPC and at least three public subnets in the cell’s region.
  • Its own DNS records. provision prints the three records to create under the cell’s domain.

Account-shared resources

A few resources exist once per account. The primary cell creates them; every additional cell in the same account must skip them with the manage block: See Generating synthetiq.yaml for the full manage block.

CI for multiple cells

One workflow provisions every cell by matrixing the reusable job over each cell’s directory. The roles and organization id are the same across cells (one account, one org); only working-directory varies.
Add a cell by adding its directory to the matrix list. Each cell plans and applies independently, so a PR touching one cell’s config produces a plan for that cell only.
GitHub Actions path filters are static. Point paths: at the account subtree (111122223333/**) so a change to any cell triggers the workflow. If the filter does not match, the job never runs.

Walkthrough: add ap-southeast-2

Starting from an existing us-east-1 cell in account 111122223333:
1

Adopt the per-cell layout

Move the existing infra root into 111122223333/us-east-1/ if it isn’t already there. The config is unchanged and the slug stays empty, so this is a no-op; generate reports no changes.
2

Create the certificates

Request the new cell’s certificates and wait for ISSUED:
  • API: *.api.apps-au.yourcompany.com in ap-southeast-2
  • CDN: *.apps-au.yourcompany.com + apex in us-east-1
See Certificates.
3

Write the cell config

Create 111122223333/ap-southeast-2/ as an infra root and generate its config from inside it:
Then add the multi-cell fields to the written _infra/synthetiq.yaml:
4

Add the cell to CI

Add 111122223333/ap-southeast-2 to the workflow’s matrix.working-directory, and confirm the trigger paths: still covers the account subtree.
5

Plan, review, apply

Open a PR. The plan job posts the new cell’s changeset; the primary cell’s job is a no-op. Merge to apply. Create the three DNS records provision prints for the new domain.
6

Verify

List the org’s deployment targets and confirm the new cell is registered:
You can also see it in the Synthetiq console at console.synthetiq.com → Integration Settings → Deployment Target. Deploy an app to it; it gets its own subdomain under the cell’s domain. See Environments for deploying across targets.