BYOC quickstart
Instructions for deploying Rivet BYOC.
Prerequisites
- A Rivet Cloud account
- An AWS or Google Cloud account
- Terraform 1.9 or newer, below 2.0
- Python 3.9 or newer
- Docker 27 or newer with a running Linux container daemon
- Helm exactly v3.16.3 and kubectl
- An authenticated AWS CLI or Google Cloud CLI; Google Cloud also requires gke-gcloud-auth-plugin
- Optional: Terraform state backend
Steps
Create a BYOC project
Go to the Rivet dashboard, click Create Project, and select BYOC.
Download setup kit and cluster config
On your project’s BYOC page, click Download kit and Download config.
Extract the setup kit and place the non-secret rivet.auto.tfvars.json beside terraform.tfvars.json:
AWS
<extracted-bundle>/
└── terraform/
└── aws/
├── main.tf
├── terraform.tfvars.json
└── rivet.auto.tfvars.json
Google Cloud
<extracted-bundle>/
└── terraform/
└── gcp/
├── main.tf
├── terraform.tfvars.json
└── rivet.auto.tfvars.json
Configure Terraform
Update these common settings in terraform.tfvars.json:
- Cloud account (
aws_account_idorgcp_project_id): Your AWS account ID, such as"123456789012", or Google Cloud project ID, such as"my-gcp-project". - Deployment name (
name): A name such as"rivet-prod"(used for cloud resource names and internal DNS). - Regions (
regions): The cloud regions to deploy in, such as{"us-east-1": {"region": "us-east-1"}}for AWS or{"us-central1": {"region": "us-central1"}}for Google Cloud. - Kubernetes namespaces (
kubernetes_namespace,kubernetes_operator_namespace): Namespaces for the Rivet control plane and operator. Default torivetandrivet-operator; they must differ. - Endpoint access (
rivet_endpoint_access): Chooseprivatefor private HTTP orpublicfor public HTTPS plus private HTTP. - Public hostname (
rivet_hostname): A hostname such as"rivet.mycompany.com"for public access; omit for private access.
See Configuration for more settings.
AWS
{
"aws_account_id": "123456789012",
"name": "rivet-prod",
"regions": {
"us-east-1": { "region": "us-east-1" }
},
"rivet_endpoint_access": "private"
}
Google Cloud
{
"gcp_project_id": "my-gcp-project",
"name": "rivet-prod",
"regions": {
"us-central1": { "region": "us-central1" }
},
"rivet_endpoint_access": "private"
}
Provision your infrastructure
Click Copy token on the dashboard and set it in your terminal (first apply only):
export RIVET_BYOC_OPERATOR_TOKEN='<your operator token>'
From the Terraform directory, run the following commands. Review the plan before approving it.
terraform init
terraform apply
This will provision:
- A Kubernetes cluster
- Networking and load balancers
- S3-compatible object storage
- A container image registry
- Secrets and access permissions
- The Rivet operator
Public AWS deployments: terraform apply waits for DNS validation of your HTTPS certificates. In your DNS provider, create the CNAME records printed in the terminal using the provided names and values. Keep Terraform running while AWS validates your DNS records and issues the certificates. Provisioning then continues automatically. If validation times out, check your DNS records and run terraform apply again, keeping your existing state and resources.
Configure DNS
Skip this step for private-only deployments.
From your Terraform directory, display the deployment outputs:
terraform output -json deployment
Add the records listed under dns_records to your DNS provider. For AWS, only endpoint records remain; for Google Cloud, add all records. Keep validation records for certificate renewal.
HTTPS is configured automatically once validation completes.
AWS
| Type | Name | Value |
|---|---|---|
| CNAME | rivet.mycompany.com | example.awsglobalaccelerator.com |
| CNAME | rivet-us-east-1.mycompany.com | example-alb.us-east-1.elb.amazonaws.com |
| CNAME | _token.rivet.mycompany.com | _validation.acm-validations.aws |
| CNAME | _token.rivet-us-east-1.mycompany.com | _regional-validation.acm-validations.aws |
AWS uses a CNAME to Global Accelerator for the base hostname and CNAMEs directly to the regional load balancers for regional hostnames. Use the actual targets from Terraform outputs, not these illustrative values.
Google Cloud
| Type | Name | Value |
|---|---|---|
| A | rivet.mycompany.com | 203.0.113.10 |
| A | rivet-us-central1.mycompany.com | 203.0.113.10 |
| CNAME | _acme-challenge.rivet.mycompany.com | example.authorize.certificatemanager.goog |
| CNAME | _acme-challenge.rivet-us-central1.mycompany.com | regional-example.authorize.certificatemanager.goog |
Google Cloud uses A records pointing to the public load-balancer IP, plus CNAME records for certificate validation.
Request deployment
Request a deployment from Rivet via Slack or email. Find your contact information on your BYOC page under Enterprise Support.
Rivet will notify you when the control plane has been deployed.
Get credentials and view Rivet dashboard
Follow the Credentials & dashboard guide.
Connect a worker
Deploy a worker on: