Architecture

What runs in your cloud and what runs in Facets, where Terraform runs, the clouds and setups Facets supports, and what keeps running if Facets is down.

Your infrastructure and applications run in your own cloud accounts. Facets runs the control plane that changes them, hosted by Facets or self-hosted in your cloud account.

What runs in your cloud, and what runs in Facets

Everything Facets builds runs in your cloud. Its control plane runs in Facets' cloud, or in your AWS, GCP or Azure account if you self-host.

  1. Surfaces
    Praxis, web UI, API and CLIThe same permissions apply to all four
    send every change to the
  2. Control plane
    Facets control planeSaves blueprint changes to Git, checks permissions, policies and approvals, and starts releases
    starts a short-lived
  3. Runner
    Release podBuilds the environment's Terraform from the blueprint, then runs plan and apply
    creates and changes resources in
  4. Your cloud
    Your accounts and clustersNetworks, clusters, databases and your services on AWS, GCP or Azure

Your services, databases, clusters and networks stay in your cloud, with Prometheus, Grafana and Alertmanager inside each environment. The web UI, API, releases, Terraform state, overrides, settings and Praxis run with the control plane.

Clouds, on-prem and air-gapped

Facets builds on AWS, GCP and Azure. Each environment deploys to the cloud account you link for it, so development can run in one AWS account or GCP project and production in another, and a project can mix clouds.

  • A Kubernetes cluster you run yourself, on-prem or in a private cloud, can be linked, as long as the control plane can reach its API. Today's catalog builds its own clusters and has no module yet for deploying onto one you link.
  • Air-gapped networks: Facets has built an export-based setup for a customer, where the exported deployment artifacts run inside the network (Niyo case study).
  • In preview: module sets for Linode (Akamai) and Vultr.

Where Terraform runs, and where state is kept

Each release runs Terraform in its own short-lived pod in the control plane's cluster, not in your environments' clusters, and reaches your cloud through the account you linked. The state stays with the control plane, one for each environment:

  • Hosted by Facets: an S3 bucket in Facets' AWS account.
  • Self-hosted on AWS: an S3 bucket in your account, versioned, with a DynamoDB table for locking.
  • Self-hosted on GCP: a Cloud SQL PostgreSQL database in your project.

Facets keeps its own state and can't take over an existing state file (Your existing Terraform state).

If Facets is down

Your infrastructure keeps running, since it doesn't call the control plane to serve traffic. What stops is anything that goes through Facets.

Keeps running

Your services, databases, clusters and networks, your monitoring stack, and kubeconfigs downloaded from Facets.

Stops until Facets is back

Releases, launches, rollbacks and schedules; the web UI, the API and CLI commands that call Facets; and Praxis.

  • A release already running may still finish. Missed scheduled runs aren't replayed.
  • Alerts Facets relays to your channels stop; receivers you add to Alertmanager keep working.
  • Urgent changes: use your cloud console or kubectl with your own access. Facets finds them as drift at its next release with Refresh.
  • If only Praxis is down, releases keep working. A self-hosted control plane keeps working if a licence check fails.