Skip to content

Install on Amazon EKS

This guide describes how to deploy SuperPlane to Amazon EKS using Terraform.

  • An AWS account with permissions to create EKS, RDS, and VPC resources
  • Terraform >= 1.5.0
  • AWS CLI installed
  • kubectl installed

Configure the AWS CLI with your credentials:

Terminal window
aws configure

You 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:

Terminal window
aws sts get-caller-identity

If you already have the SuperPlane repo checked out, the Terraform configuration lives in superplane-terraform/eks. Otherwise, clone it:

Terminal window
git clone https://github.com/superplanehq/superplane-terraform

Then:

Terminal window
cd superplane-terraform/eks
cp terraform.tfvars.example terraform.tfvars

Edit terraform.tfvars:

domain_name = "superplane.example.com"
letsencrypt_email = "admin@example.com"
VariableDescriptionDefault
domain_nameDomain name for SuperPlane(required)
letsencrypt_emailEmail for Let’s Encrypt(required)
regionAWS regionus-east-1
cluster_nameEKS cluster namesuperplane
node_countNumber of EKS nodes2
instance_typeEKS node instance typet3.medium
db_instance_classRDS instance classdb.t3.medium
superplane_image_tagSuperPlane image tagstable
installation.beaconEnabledEnable anonymized beacon telemetrytrue
Terminal window
terraform init
terraform apply

The 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
Terminal window
aws eks update-kubeconfig --region us-east-1 --name superplane

Get the Load Balancer hostname:

Terminal window
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:

Terminal window
dig superplane.example.com +short

Check pods and certificate status:

Terminal window
kubectl get pods -n superplane
kubectl get certificate -n superplane

Once the certificate shows Ready, access SuperPlane at https://your-domain.com.

Note: Certificate issuance may take 5-10 minutes after DNS propagation completes.

  1. Check the GitHub releases for the latest version tag.
  2. Update superplane_image_tag in terraform.tfvars with the new tag.
  3. Apply the changes:
terraform apply
Terminal window
# Disable deletion protection on the database
aws rds modify-db-instance \
--db-instance-identifier superplane-db \
--no-deletion-protection \
--apply-immediately
# Wait for modification to complete
aws rds wait db-instance-available --db-instance-identifier superplane-db
# Destroy all resources
terraform destroy