LangSmithAWS EKS

LangSmith on AWS — Quick Reference

All commands run from terraform/aws/. Run make help to see all targets.


First-Time Setup

cd terraform/aws

# 1. Generate terraform.tfvars (interactive wizard — region, node size, TLS, addons)
make quickstart

# 2. Set up secrets in SSM Parameter Store — prompts for passwords + license key,
#    auto-generates api_key_salt and jwt_secret, exports TF_VAR_* into your shell
#    Must use `source` — Make runs in a subshell and cannot export to your shell
source infra/scripts/setup-env.sh

# 2a. Confirm secrets are set and TF_VAR_* are exported (optional but recommended)
make secrets

# 3. Deploy infrastructure (~20–25 min)
make init
make plan      # review — confirm no unexpected destroy/replace actions
make apply

# 3a. Verify post-infra state (optional — checks kubectl + SSM + values + TLS)
make preflight-post

# 4. Update kubeconfig for the EKS cluster
make kubeconfig

# 5. Generate Helm values from Terraform outputs
make init-values

# 6. Deploy LangSmith (~10 min)
make deploy

Fast path — if make quickstart and source infra/scripts/setup-env.sh are already done:

make quickdeploy        # interactive (prompts for terraform apply confirmation)
make quickdeploy-auto   # non-interactive (auto-approve terraform)

Prefer editing over the wizard? Copy the example and fill in manually:

cp infra/terraform.tfvars.example infra/terraform.tfvars
vi infra/terraform.tfvars   # required: name_prefix, region, tls_certificate_source
# then continue from step 2 above

Day-2 Operations

# Check deployment state and get next-step guidance
make status

# Re-deploy after changing Helm values or upgrading
make deploy

# Re-generate Helm values after Terraform changes
make init-values

# Re-sync ESO secrets without redeploying
make apply-eso

# Check SSM secrets status + TF_VAR_* export status (read-only)
make secrets

# List all SSM parameters with last-modified timestamps
make secrets-list

# Manage SSM secrets interactively (view, set, rotate, diff vs K8s)
make ssm

# Update kubeconfig for the EKS cluster
make kubeconfig

Preflight Checks

# Pre-Terraform: check AWS credentials + IAM permissions
make preflight

# Post-apply: check kubectl + SSM params + Helm values + TLS config
make preflight-post

# SSM only: confirm all parameters are populated (after make setup-env)
make preflight-ssm

Enable Optional Addons

Addons are controlled by enable_* flags in infra/terraform.tfvars. Set the flags, then re-run init-values to copy the corresponding values files:

# infra/terraform.tfvars
enable_deployments   = true    # LangGraph Platform (required for Agent Builder and Polly)
enable_agent_builder = true    # Agent Builder UI
enable_insights      = true    # ClickHouse-backed analytics
enable_polly         = true    # Polly AI eval/monitoring
enable_usage_telemetry = false # Extended usage telemetry
make init-values   # copies addon values files based on enable_* flags
make deploy

Sizing: Set sizing_profile in terraform.tfvars:

sizing_profile = "production"         # multi-replica with HPA (recommended)
sizing_profile = "production-large"   # high-volume (~50 users, ~1000 traces/sec)
sizing_profile = "dev"                # single-replica, minimal resources (dev/CI/demos)
sizing_profile = "default"            # chart defaults (no sizing file)

Then re-run make init-values && make deploy.


Common kubectl Commands

# Pod health
kubectl get pods -n langsmith
kubectl get pods -n langsmith -w
kubectl describe pod <pod-name> -n langsmith
kubectl logs <pod-name> -n langsmith --tail=100 -f
kubectl logs <pod-name> -n langsmith --previous --tail=50

# ALB / Ingress
kubectl get ingress -n langsmith
kubectl describe ingress -n langsmith

# ESO secret sync status
kubectl get externalsecret langsmith-config -n langsmith

# TLS
kubectl get certificate -n langsmith
kubectl get challenges -n langsmith
kubectl describe certificate <cert-name> -n langsmith

# Helm
helm status langsmith -n langsmith
helm history langsmith -n langsmith
helm get values langsmith -n langsmith

# IRSA — check per-component annotations
kubectl get sa -n langsmith -o yaml | grep eks.amazonaws.com

# LangSmith Deployments
kubectl get lgp -n langsmith
kubectl get crd | grep langchain
kubectl get pods -n keda

Common AWS CLI Commands

# EKS
aws eks list-clusters --region <region>
aws eks describe-cluster --name <cluster-name> --region <region>
aws eks update-kubeconfig --region <region> --name <cluster-name>

# RDS
aws rds describe-db-instances --query "DBInstances[?contains(DBInstanceIdentifier,'langsmith')]"

# ElastiCache
aws elasticache describe-cache-clusters --query "CacheClusters[?contains(CacheClusterId,'langsmith')]"

# S3
aws s3 ls s3://<bucket-name>
aws s3api get-bucket-location --bucket <bucket-name>

# ALB
aws elbv2 describe-load-balancers --query "LoadBalancers[?contains(LoadBalancerName,'langsmith')]"

# VPC endpoint
aws ec2 describe-vpc-endpoints \
  --filters "Name=service-name,Values=com.amazonaws.<region>.s3" \
  --query "VpcEndpoints[].State"

# SSM secrets
aws ssm get-parameters-by-path --path "/langsmith/<base-name>/" --with-decryption

# IAM role
aws iam get-role --role-name <irsa-role-name>

Terraform Commands

cd terraform/aws/infra

terraform init
terraform plan
terraform apply
terraform apply -target=module.eks
terraform output
terraform output -raw cluster_name
terraform output -raw alb_dns_name
terraform output -raw langsmith_irsa_role_arn
terraform output -raw bucket_name
terraform state list

Teardown

cd terraform/aws

# Option A: script-driven deploy
make uninstall

# Option B: Terraform-managed deploy
make destroy-app

# Then destroy infrastructure:
# 1. Set postgres_deletion_protection = false in infra/terraform.tfvars
# 2. Apply the change, then destroy
cd infra
terraform apply
terraform destroy