formae-bootstrap
installer. One apply stands up the whole agent (a VPC, an ECS Fargate task, and a
PostgreSQL datastore) secure by default.
This guide covers the AWS bootstrap path. For other clouds, see
Install on Azure and
Install on GCP. Express and
standard-ECS AWS installs exist for finer control and will be documented
separately.
Choose an access mode
- Public (ALB): a public HTTPS endpoint fronted by an Application Load Balancer using your ACM certificate. Requires a domain you own.
- Tailscale (tailnet): private, reachable only over your Tailscale tailnet;
the agent serves a trusted
*.ts.netcertificate. No public ingress.
Prerequisites
- The formae CLI, matching the agent image version. If you have not installed it, see the Quick start.
- AWS credentials for the target account.
opensslandhtpasswd(fromapache2-utils/httpd-tools), ordocker, to generate the basic-auth credential.
Install
- Public (ALB)
- Tailscale (tailnet)
You also need a domain you own and an ACM certificate for it, status
That writes a profile carrying
the agent’s URL so your CLI can reach it.
ISSUED, in the same region as the ALB. Note the certificate ARN.1
Generate the API credential
Basic auth validates a bcrypt hash, produced locally:Keep the printed password for the connect step; the hash goes to
the apply.
2
Apply
RDS spin-up is the long pole (~10 min); on a terminal the apply shows live progress.To restrict who can reach the ALB, add
--allow-cidr <cidr> (open by
default).3
Point DNS at the ALB
Add
agent.example.com pointing at the ALB’s DNS name (a Route53 alias
record, or a DNS-only CNAME elsewhere). Connect via https://<your-domain>,
not the raw *.elb.amazonaws.com name: the certificate only matches your
domain.4
Connect
Operate the agent
Day-2 procedures for a bootstrapped agent.Update
Upgrade the agent the same way you created it: re-applybootstrap.pkl with a
newer image. --formae-image is the version knob; find a target tag on
GitHub Releases.
alb/tailnet options) so the reconcile changes only the image: formae plans
a new task definition and a rolling service update. Then match your local CLI to
the new version:
Add extra plugins
The bootstrap image ships the standard plugin set (AWS, Azure, GCP, OCI, OVH, andauth-basic). To manage anything else, build a derived image and pass it as
--formae-image. See
Extend the agent image.
Rotate Aurora credentials
If you use Aurora as the datastore, its managed master-credential rotation (the default 30-day cycle) updates the cluster password but not the agent’sformae-config secret that holds the connection string, so the agent fails to
connect after the next rotation. The simplest mitigation is to disable managed
rotation and rotate on your own schedule:
Back up state
The agent is stateless; everything recoverable lives in the datastore. Aurora’s default automated backups (1-day retention with point-in-time recovery) cover the formae state. For longer retention, raise the cluster’s--backup-retention-period
or run scheduled aws rds create-db-cluster-snapshot jobs.
Shell into the agent
The service runs with ECS Exec enabled, so you can open a shell inside the running Fargate container (requires the AWS Session Manager plugin locally):Tune for production
The bootstrap installer favors a lean default. For production, editaws/bootstrap.pkl / aws/vars.pkl:
- Multi-AZ database: the RDS instance is single-AZ by default. Set
multiAZ = truefor automatic failover (roughly doubles RDS cost and deploy time). - Storage:
maxAllocatedStoragecaps storage autoscaling at 100 GB; raise it for larger inventories. - Ingress (
albmode): scope the ALB with--allow-cidr, or usetailnetmode for no public surface at all. - Sizing: choose a larger
--sizeas your inventory grows (see the sizing table below).
Tear down
Destroy in two steps;destroy removes the resources but not the target
registration:
Reference
Bootstrap flags and sizing
Bootstrap flags and sizing
Flags for
formae apply ... aws/bootstrap.pkl:Passing a flag that belongs to the other mode fails fast with a clear message.
--size maps to a Fargate-valid CPU/memory pair. Memory has a ~2 GB floor
regardless of inventory size, because the agent image loads all its bundled
resource plugins at once.See also
- Manage profiles: connect the CLI to the agent you just started, and switch between environments.
- Configuration: agent and CLI settings, including authentication.
- Architecture: how the client, agent, and plugins fit together.

