Skip to main content
This page documents common issues, fixes, and diagnostic commands for LangSmith deployments provisioned with the AWS Terraform modules.
Before upgrading, review the LangSmith self-hosted changelog for breaking changes and required variable updates. Run aws eks update-kubeconfig --region <region> --name <cluster-name> before running any kubectl commands.
For a copy-paste reference of the kubectl, helm, and aws calls used throughout this page, skip to Diagnostic commands.

Automated diagnostics

Before running individual commands, try the bundled scripts:

Known issues

EKS node group creation fails: CREATE_FAILED

Symptom
Cause: The EKS control plane is not yet fully active when node group creation begins. Common after an interrupted apply. Fix

kubectl fails: “You must be logged in to the server”

Symptom: All kubectl commands fail with error: You must be logged in to the server (Unauthorized). Cause: The kubeconfig is stale, the AWS credentials differ from those that created the cluster, or the token has expired. Fix
If the cluster was created with a different IAM role, grant access via the aws-auth ConfigMap:

ALB not created after Helm install

Symptom: kubectl get ingress -n langsmith shows no ADDRESS after several minutes. Cause: AWS Load Balancer Controller is not running or lacks IRSA permissions, the Terraform-provisioned ALB is not referenced correctly, or alb_scheme = "internal" is set (internal ALBs have no public address; see ALB has no public address). Fix

RDS connection refused from EKS pods

Symptom: Backend logs show connection refused or timeout for the RDS endpoint. Cause: The RDS security group does not allow inbound TCP 5432 from the EKS node or cluster security group. Fix
The postgres module sets up the security group automatically. If the rule is missing, re-apply:

S3 access denied from pods (IRSA not configured)

Symptom: Backend logs show AccessDenied when reading or writing S3. Cause: IRSA annotation missing from the LangSmith service account, or the S3 VPC Gateway Endpoint is not routing correctly. Fix
If the IRSA annotation is missing, verify create_langsmith_irsa_role = true in terraform.tfvars and that the service account name in the Helm values matches langsmith.

ElastiCache Redis connection timeout

Symptom: Pods cannot connect to Redis. Logs show dial tcp: i/o timeout. Cause: ElastiCache security group does not allow inbound TCP 6379 from the EKS node security group. Fix

EKS nodes not autoscaling

Symptom: Pods remain Pending. Node count does not increase. Cause: Cluster Autoscaler lacks IAM permissions, targets the wrong ASG, or min_size = max_size on the node group. Fix

cert-manager fails to issue Let’s Encrypt certificate

Symptom: kubectl get certificate -n langsmith shows READY=False. HTTP01 challenge is failing. Cause: The ALB is not forwarding port 80 to the cert-manager solver pod, or the DNS record for the domain does not point to the ALB. Fix

postgres_deletion_protection blocks terraform destroy

Symptom
Fix: Disable deletion protection in terraform.tfvars, apply, then destroy:

ESO fails to sync: langsmith-config secret missing

Symptom: Pods stuck in CreateContainerConfigError. kubectl get secret langsmith-config -n langsmith returns NotFound. Cause: ESO sync is all-or-nothing. If any single SSM parameter referenced by the ExternalSecret is missing, ESO refuses to create the Kubernetes Secret. All pods fail, including those unrelated to the missing parameter. Fix
The describe output shows which remoteRef.key failed. Match it against the SSM prefix /langsmith/{name_prefix}-{environment}/.

SSM parameter prefix mismatch

Symptom: manage-ssm.sh validate passes but ESO still cannot sync. Or setup-env.sh wrote parameters under a different prefix than ESO expects. Cause: The SSM prefix is derived from name_prefix and environment in terraform.tfvars. If these changed after initial setup, the old parameters live under the old prefix and ESO looks under the new one. Fix
Never change name_prefix or environment on an existing deployment.

Postgres password rejected by Terraform validation

Symptom
Cause: The password contains characters RDS does not allow in the master password. Fix: Re-generate without restricted characters. setup-env.sh produces a compliant password automatically; to update manually:

Private EKS cluster unreachable (bastion required)

Symptom: kubectl and terraform apply time out when enable_public_eks_cluster = false. Cause: The EKS API endpoint is private. Commands must run from within the VPC, either via the bastion host or a VPN connection. Fix
If no bastion was provisioned, set create_bastion = true and re-apply, or temporarily set enable_public_eks_cluster = true.

ALB has no public address (internal scheme)

Symptom: kubectl get ingress -n langsmith shows an ADDRESS, but it resolves only within the VPC. Cause: alb_scheme = "internal" was set in terraform.tfvars. Internal ALBs are only reachable from within the VPC (VPN, peering, or PrivateLink). Fix: Intentional for private deployments. To make the ALB publicly reachable:

ALB hostname changed after ingress recreation

Symptom: The LangSmith URL stops working. Agent deployments stuck in DEPLOYING. DNS records or bookmarks point to an old ALB hostname that no longer resolves. Cause: Deleting the Kubernetes ingress (via helm uninstall, kubectl delete ingress, or namespace deletion) deprovisions the ALB. When the ingress is recreated, a new ALB with a different hostname is issued. The config.deployment.url in Helm values still points to the old hostname, so the operator’s health checks fail and deployments stay stuck. This also happens if the ALB controller creates a new ALB instead of reusing the Terraform pre-provisioned one. The group.name annotation is required alongside load-balancer-arn to prevent this. Prevention
  • Ensure group.name and load-balancer-arn annotations are both set. init-values.sh does this automatically when a pre-provisioned ALB exists.
  • Do not delete the ingress unless you plan to update all hostname-dependent config.
  • Avoid helm rollback without --server-side=false. The ingress SSA conflict can trigger a delete/recreate cycle.
Fix

Node group scaling changes not applied by Terraform

Symptom: Changing min_size or max_size in terraform.tfvars shows “No changes” on terraform plan. Cause: The ASG was changed out-of-band (AWS CLI, console, or cluster autoscaler) and the Terraform state already reflects the new values. The community EKS module ignores desired_size changes so the autoscaler can manage it; min_size and max_size should propagate normally. Fix

Diagnostic commands

Cluster access

Pods

ALB and ingress

TLS and certificates

ESO and secrets

Helm

IRSA and IAM

LangSmith Deployment

Quick health check