Skip to main content
This article contains the Terraform and Terragrunt infrastructure-as-code (IaC) for managing the Odin AI Platform platform on AWS EKS, with support stubs for GKE, AKS, and bare-metal Kubernetes. It includes all Helm chart deployments and environment configuration templates.

Documentation


Repository Structure


Quick Start

1. Install Required Tools

Terraform
Terragrunt
kubectl and Helm
Verify installation

2. Create a New Environment

New environments are created by copying env-template-folder and filling in the placeholders. See Terragrunt Deployment Guide for the full step-by-step process. The high-level flow is:

Service Enable / Disable Flags

All optional services are toggled via environment variables. Set them before running terragrunt apply.
Supabase Self-Hosted Deployment OrderSupabase components must be deployed in sequence:

Helm Charts Reference


Modules Reference

modules/eks

The primary module. Provisions:
  • VPC with public/private subnets across 3 AZs
  • EKS cluster (Kubernetes 1.33) and managed node group for Karpenter
  • Karpenter controller + NodePool + EC2NodeClass
  • IAM roles (cluster, node group, Karpenter, ALB controller, EBS CSI driver)
  • All Helm releases via the helm_releases input map

modules/aws-services

Provisions ElastiCache Redis and Amazon MQ RabbitMQ. Only active when ENABLE_AWS_SERVICES=true.

modules/state

Bootstraps the S3 state bucket for a new environment (versioning, encryption, public access block).

modules/helm

Reusable Helm release module supporting both upstream chart repositories and local chart_path charts.

Environment Configuration

Placeholders

Every value in env-template-folder that is environment-specific uses a <YOUR_*> placeholder. Run the following to check nothing is left before deploying:

Remote State

State is stored in S3 per environment. The bucket is bootstrapped by state/terragrunt.hcl and referenced by root.hcl. The naming pattern is ekb-terraform-state-<env-name>.

Secrets

Sensitive values (passwords, API keys, certificate ARNs) are never committed. They are passed as environment variables consumed by get_env() calls in terragrunt.hcl, or as <YOUR_*> placeholders in values files that must be filled before deployment.

Troubleshooting

Verify AWS credentials
Check cluster access
Check ALB Controller
Check Karpenter
Check state lock
Verify no remaining placeholders
Check Helm release status

Multi-Cloud Support (Planned)