AWS Applications Deployment
This guide covers deploying the core Kindo application stack on AWS using the kindo-applications Terraform module.
Overview
The applications module deploys these Kindo services:
| Service | Purpose |
|---|---|
| API | Node.js backend REST/tRPC API |
| Next.js | Server-rendered React frontend |
| LiteLLM | AI model routing proxy |
| Llama Indexer | Document indexing service |
| SSOReady | SSO authentication services |
| Cerbos | Authorization policy engine |
| Task Worker | Background job processing |
| External Poller | Integration data polling |
| External Sync | Integration synchronization |
| Credits | Usage tracking service |
| Audit Log Exporter | Compliance log export |
Quick Start
-
Set up the applications stack:
Terminal window cd kindo-modules/stacks/applicationscp terraform.tfvars.example terraform.tfvars -
Configure
terraform.tfvarswith outputs from infrastructure, secrets, and peripheries modules. -
Deploy:
Terminal window terraform initterraform planterraform apply
Configuration
Core Settings
project_name = "mycompany"environment = "production"aws_region = "us-west-2"
# Domaindomain_name = "kindo.mycompany.com"
# Kindo registrykindo_registry_username = "..."kindo_registry_password = "..."
# Application versionapp_version = "2025.08.2"From Previous Module Outputs
The applications module requires outputs from all three previous modules (infrastructure, secrets, peripheries), including:
- EKS cluster details
- Database endpoints and credentials
- Redis and RabbitMQ endpoints
- S3 bucket names
- Unleash endpoint
- Secret references
Post-Deployment
Verify All Services
for ns in api next litellm llama-indexer ssoready cerbos task-worker-ts \ external-poller external-sync credits audit-log-exporter; do echo "=== $ns ===" kubectl get pods -n $nsdoneConfigure DNS
Create DNS records pointing to the ALB endpoints:
# Get ALB addresseskubectl get ingress -A -o wideCreate A/CNAME records for:
app.kindo.mycompany.com— Next.js ingressapi.kindo.mycompany.com— API ingresssso.kindo.mycompany.com— SSOReady ingress
Initial Setup
- Create the first organization and admin user using the setup SQL (see SSO Setup)
- Configure AI models in Unleash (see Model Configuration)
- Set up integrations via Nango (see Integrations)
Test End-to-End
# Health checkcurl https://api.kindo.mycompany.com/health
# Access the UIopen https://app.kindo.mycompany.comTroubleshooting
Pods in CrashLoopBackOff
kubectl logs <pod-name> -n <namespace> --previouskubectl describe pod <pod-name> -n <namespace>Common causes: missing secrets, database connection failures, incorrect environment variables.
Ingress Not Working
# Check ALB controller logskubectl logs -n kube-system -l app.kubernetes.io/name=aws-load-balancer-controller
# Verify target group healthaws elbv2 describe-target-health --target-group-arn <arn>