Install on Amazon EKS
This guide describes how to deploy SuperPlane to Amazon EKS using Terraform.
Prerequisites
Section titled “Prerequisites”- An AWS account with permissions to create EKS, RDS, and VPC resources
- Terraform >= 1.5.0
- AWS CLI installed
kubectlinstalled
Step 1: Configure AWS CLI
Section titled “Step 1: Configure AWS CLI”Configure the AWS CLI with your credentials:
aws configureYou will be prompted to enter:
- AWS Access Key ID: Your access key
- AWS Secret Access Key: Your secret key
- Default region name: e.g.,
us-east-1 - Default output format:
json(recommended)
Verify the configuration:
aws sts get-caller-identityStep 2: Clone and Configure Terraform
Section titled “Step 2: Clone and Configure Terraform”If you already have the SuperPlane repo checked out, the Terraform configuration lives in superplane-terraform/eks. Otherwise, clone it:
git clone https://github.com/superplanehq/superplane-terraformThen:
cd superplane-terraform/ekscp terraform.tfvars.example terraform.tfvarsEdit terraform.tfvars:
domain_name = "superplane.example.com"letsencrypt_email = "admin@example.com"Configuration Options
Section titled “Configuration Options”| Variable | Description | Default |
|---|---|---|
domain_name | Domain name for SuperPlane | (required) |
letsencrypt_email | Email for Let’s Encrypt | (required) |
region | AWS region | us-east-1 |
cluster_name | EKS cluster name | superplane |
node_count | Number of EKS nodes | 2 |
instance_type | EKS node instance type | t3.medium |
db_instance_class | RDS instance class | db.t3.medium |
superplane_image_tag | SuperPlane image tag | stable |
installation.beaconEnabled | Enable anonymized beacon telemetry | true |
Step 3: Deploy
Section titled “Step 3: Deploy”terraform initterraform applyThe deployment takes 15-20 minutes and creates:
- VPC with public and private subnets
- EKS cluster with node group
- RDS PostgreSQL instance
- Network Load Balancer
- cert-manager with Let’s Encrypt
- SuperPlane deployment
Step 4: Configure kubectl
Section titled “Step 4: Configure kubectl”aws eks update-kubeconfig --region us-east-1 --name superplaneStep 5: Configure DNS
Section titled “Step 5: Configure DNS”Get the Load Balancer hostname:
kubectl get svc -n ingress-nginx ingress-nginx-controller \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'Create a CNAME record in your DNS provider:
- Type: CNAME
- Name: Your subdomain (e.g.,
superplane) - Value: The hostname from the command above
Wait for DNS propagation:
dig superplane.example.com +shortStep 6: Verify
Section titled “Step 6: Verify”Check pods and certificate status:
kubectl get pods -n superplanekubectl get certificate -n superplaneOnce the certificate shows Ready, access SuperPlane at https://your-domain.com.
Note: Certificate issuance may take 5-10 minutes after DNS propagation completes.
Updating SuperPlane
Section titled “Updating SuperPlane”- Check the GitHub releases for the latest version tag.
- Update
superplane_image_taginterraform.tfvarswith the new tag. - Apply the changes:
terraform applyUninstalling
Section titled “Uninstalling”# Disable deletion protection on the databaseaws rds modify-db-instance \ --db-instance-identifier superplane-db \ --no-deletion-protection \ --apply-immediately
# Wait for modification to completeaws rds wait db-instance-available --db-instance-identifier superplane-db
# Destroy all resourcesterraform destroy