Provision the AWS cloud foundation and install LangSmith with the public Terraform modules at github.com/langchain-ai/terraform/tree/main/modules/aws. Plan for 30 to 40 minutes end to end on a clean account. The deployment runs in two stages: infrastructure (Terraform provisions VPC, EKS, RDS, ElastiCache, S3, IAM) and application (Helm installs the LangSmith chart against the cluster). Add-ons are enabled with a flag and a redeploy.Documentation Index
Fetch the complete documentation index at: https://langchain-5e9cc07a-preview-featse-1779998369-ad736a3.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Required tools
| Tool | Version | Purpose |
|---|---|---|
| AWS CLI | v2 | Authenticate, query AWS resources, manage EKS kubeconfig |
| Terraform | 1.5 | Run the infrastructure modules |
kubectl | 1.28 | Inspect the EKS cluster |
| Helm | 3.12 | Install and manage the LangSmith chart |
eksctl | latest | Optional, handy for kubeconfig and debugging |
PATH:
Required AWS IAM permissions
The IAM user or role running Terraform needs permission to create and manage the cloud foundation. The following managed policies cover the full surface area. Use them as a starting point and trim down to least-privilege once the deployment is stable.| Policy | Purpose |
|---|---|
AmazonEKSClusterPolicy | Create and manage EKS clusters |
AmazonVPCFullAccess | Create VPC, subnets, route tables, and NAT |
AmazonRDSFullAccess | Create and manage RDS PostgreSQL instances |
AmazonElastiCacheFullAccess | Create ElastiCache Redis clusters |
AmazonS3FullAccess | Create S3 buckets and VPC endpoints |
IAMFullAccess | Create IRSA roles and policies |
Authenticate
Configure AWS credentials with the CLI:License key and domain
Two non-AWS items must be ready beforeterraform apply:
- LangSmith license key. Contact sales to request one. The key is stored in AWS SSM Parameter Store by the setup script, not in
tfvars. - Domain or subdomain that resolves to the AWS account, plus an ACM certificate covering it (or
letsencrypt/nonefor thetls_certificate_sourcevariable).
Cluster sizing reference
The Terraform modules pick instance types and node counts based onsizing_profile. Plan capacity for the target tier before deploying.
| Profile | EKS nodes | RDS instance | ElastiCache | Use case |
|---|---|---|---|---|
dev | 2 × m5.xlarge | db.t4g.medium | cache.t4g.small | Demos, CI, short-lived POCs |
production | 3 × m5.2xlarge (HPA on) | db.m6g.large | cache.m6g.large | Standard production |
production-large | 6 × m5.4xlarge (HPA on) | db.m6g.2xlarge | cache.m6g.xlarge | High-volume, multi-tenant |
For production and
production-large, also plan to provision external LangChain Managed ClickHouse or a self-managed external ClickHouse cluster. In-cluster ClickHouse is supported for dev only.Rapid path
For the fastest path from zero to a running LangSmith instance, run these commands in order:make quickdeploy runs terraform apply → kubeconfig → init-values → helm deploy in sequence. If any step fails, the command exits with instructions for resuming from that step.
The sections below cover each phase in detail.
Provision infrastructure
Provisioning the AWS cloud foundation takes 20 to 25 minutes on a clean account. Do not interrupt the apply.What gets provisioned
| Resource | Purpose |
|---|---|
| VPC + subnets + NAT | Private network for the cluster and managed services |
| EKS cluster + node groups | Kubernetes compute |
| RDS PostgreSQL | LangSmith operational data |
| ElastiCache Redis | Queue and cache |
| S3 bucket + VPC endpoint | Trace payload blob storage |
| ALB + listeners | Public ingress with TLS |
| SSM Parameter Store entries | Application secrets, synced into the cluster by External Secrets Operator |
| IRSA roles + IAM policies | Per-service AWS access |
| KEDA, cert-manager, ESO | Bootstrap workloads installed alongside infrastructure |
Clone and configure
modules/aws/. Run make help for the full target list.
Generate terraform.tfvars with the interactive wizard:
infra/terraform.tfvars. Re-running the wizard pre-selects existing values; press Enter at each prompt to keep the current config.
Prefer to edit by hand? Copy the example and fill in the required fields:
Load secrets into SSM Parameter Store
terraform.tfvars, derives the SSM path /langsmith/{name_prefix}-{environment}/, then for each secret either reuses an exported value, reads the existing SSM parameter, auto-generates one (for salts and tokens), or prompts you. The license key and admin password are the two values you supply interactively. The script must be sourced (not executed) because make cannot export environment variables back to the parent shell.
The script manages the following SSM parameters:
| SSM key | How it is set | Notes |
|---|---|---|
postgres-password | Prompt | RDS uses this password |
redis-auth-token | Auto-generated (openssl rand -hex 32) | ElastiCache requires hex |
langsmith-api-key-salt | Auto-generated (openssl rand -base64 32) | Never rotate, breaks all API keys |
langsmith-jwt-secret | Auto-generated (openssl rand -base64 32) | Never rotate, invalidates all sessions |
langsmith-license-key | Prompt | From your LangChain account team |
langsmith-admin-password | Prompt | Must contain a symbol |
deployments-encryption-key | Auto-generated Fernet key | LangSmith Deployment add-on |
agent-builder-encryption-key | Auto-generated Fernet key | Agent Builder add-on |
insights-encryption-key | Auto-generated Fernet key | Insights add-on |
polly-encryption-key | Auto-generated Fernet key | Polly add-on |
TF_VAR_* environment variables are exported:
Apply
make plan shows the proposed diff. Review the output before applying. make apply provisions in dependency order: VPC and security groups, then EKS (about 12 minutes) and RDS (about 8 minutes, in parallel), then node groups, ElastiCache, S3, and the ALB.
Configure kubectl
Ready and the core add-ons (CoreDNS, kube-proxy, VPC CNI, KEDA, cert-manager, ESO) should be Running.
Deploy LangSmith
Two deployment paths are supported. Pick one.Script-driven Helm deploy (recommended)
Best for most deployments. Interactive prompts guide you through sizing and product choices.init-values.sh prompts for the admin email, then reads sizing_profile and the enable_* flags from terraform.tfvars and copies the matching values files from helm/values/examples/ into helm/values/. On re-runs it preserves your choices and refreshes Terraform outputs.
make deploy runs helm/scripts/deploy.sh, which:
- Refreshes the kubeconfig.
- Runs preflight checks (AWS credentials, cluster reachability, the
langchainHelm repo). - Applies the External Secrets Operator
ClusterSecretStoreandExternalSecretso the cluster reads secrets directly from SSM. - Installs the LangSmith Helm chart with the layered values files.
Verify
Running and the ingress shows the ALB DNS name, the deployment is ready. Use the domain you configured in langsmith_domain (or the ALB DNS name) to reach the UI.
Terraform-managed Helm deploy
Best for teams that want the full deployment in Terraform state, or for “bring your own infrastructure” scenarios. Theapp/ module manages the External Secrets Operator wiring, the helm_release, and feature toggles directly.
app/terraform.tfvars file controls the application configuration:
make init-app and set all variables manually in app/terraform.tfvars.
Enable add-ons
Each add-on is gated by a flag ininfra/terraform.tfvars. Set the flag, re-run make init-values to copy the matching values file, then re-run make deploy.
Optional: private EKS cluster with bastion
For deployments that must run a fully private EKS API endpoint, the modules ship a bastion host pattern:- First, run from your workstation with
create_bastion = trueandenable_public_eks_cluster = trueso the bastion can be created. - After the initial deployment, set
enable_public_eks_cluster = falseand re-apply. The EKS API endpoint becomes private only. - All subsequent Terraform work happens on the bastion. SSM into it, clone the repo, copy your
terraform.tfvarsand SSM secrets, then run the deployment from there.
The bastion lives in a public subnet for SSM agent connectivity but does not need a public IP if your VPC has the SSM, SSMMessages, and EC2Messages VPC endpoints. The bastion comes preinstalled with
kubectl, helm, terraform, git, and jq, with kubeconfig already configured for the EKS cluster. Install the Session Manager plugin for the AWS CLI on your workstation.Optional: Envoy Gateway ingress
The default ingress is the AWS Load Balancer Controller (ALB). Setenable_envoy_gateway = true in terraform.tfvars to install Envoy Gateway instead. Envoy Gateway is required for multi-namespace dataplane deployments where the langgraph-dataplane chart runs in its own namespace.
tls_certificate_source = "acm". TLS terminates at the NLB; Envoy sees plain HTTP internally.
When running the dataplane chart in a separate namespace, apply the RBAC manifest once per dataplane namespace:
langsmith-host-backend ServiceAccount read access to pods, pod logs, deployments, and ReplicaSets in the dataplane namespace. Without it, agent run logs do not stream in the LangSmith UI.
Next steps
- Reference the AWS variables and the quick reference.
- Review the AWS architecture for platform layers, IRSA, and module dependencies.
- When something breaks, check the AWS troubleshooting guide.
- Enable agent deployment in the UI with LangSmith Deployment.
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

