Skip to main content
Complete reference for every input variable exposed by the AWS Terraform modules. Use it while filling in terraform.tfvars for the first time or tuning an existing deployment. Variables come in two categories:
  • Non-sensitive (region, sizing, feature flags): set in infra/terraform.tfvars.
  • Sensitive (license key, passwords, encryption keys): sourced through infra/scripts/setup-env.sh, which writes them to AWS SSM Parameter Store; External Secrets Operator then syncs them into the cluster.
For the end-to-end install, refer to the deploy guide. For how the modules fit together, refer to the architecture reference.

Core

VariableDefaultRequiredDescription
name_prefixyesPrefix for all resource names. Maximum 15 characters: lowercase letters, digits, and hyphens, starting with a letter. Format: {prefix}-{environment}-{resource}.
environmentdevnoEnvironment tag: dev, staging, prod, test, or uat.
regionus-west-2noAWS region for all resources.
owner""noTeam or individual responsible for the deployment. Applied as a tag.
cost_center""noCost center or billing label. Applied as a tag when non-empty.
tags{}noAdditional tags applied to all resources.

Networking

VariableDefaultRequiredDescription
create_vpctruenoCreate a new VPC. Set false to use an existing one.
vpc_idnullwhen !create_vpcExisting VPC ID.
private_subnets[]when !create_vpcExisting private subnet IDs.
public_subnets[]when !create_vpcExisting public subnet IDs.
vpc_cidr_blocknullwhen !create_vpcExisting VPC CIDR block.
vpc_private_subnets[]noOverride CIDRs for private subnets when create_vpc = true. Empty uses the module default.
vpc_public_subnets[]noOverride CIDRs for public subnets when create_vpc = true. Empty uses the module default.

EKS

VariableDefaultRequiredDescription
enable_public_eks_clustertruenoEnable the public EKS API endpoint. Set false for a private cluster and enable create_bastion to run Terraform and Helm from the bastion via SSM.
eks_public_access_cidrs["0.0.0.0/0"]noCIDRs allowed to reach the public EKS API endpoint. Restrict to corporate VPN egress CIDRs to lock down access.
eks_cluster_version1.33noEKS Kubernetes version.
eks_managed_node_group_defaults{ami_type = "AL2023_x86_64_STANDARD"}noDefault configuration applied to all managed node groups.
eks_managed_node_groupsone default group: m5.4xlarge, min 3 / max 10noManaged node group definitions. desired_size defaults to min_size when omitted.
create_gp3_storage_classtruenoCreate gp3 and set it as the default StorageClass with volume expansion enabled.
eks_cluster_enabled_log_types["api", "audit", "authenticator", "controllerManager", "scheduler"]noEKS control plane log types sent to CloudWatch. Set [] to disable.
eks_addons{}noEKS managed add-on configurations (coredns, kube-proxy, vpc-cni, and similar).
create_langsmith_irsa_roletruenoCreate the IRSA role for LangSmith pods (S3 access).

PostgreSQL (RDS)

VariableDefaultRequiredDescription
postgres_sourceexternalnoexternal (RDS with private access) or in-cluster (deployed via Helm).
postgres_instance_typedb.t3.largenoRDS instance class.
postgres_storage_gb10noInitial RDS storage in GB.
postgres_max_storage_gb100noMaximum RDS storage in GB (autoscaling).
postgres_usernamelangsmithnoRDS database username.
postgres_engine_version16noPostgreSQL engine version. PG 14 reaches EOL in November 2026; 16 is recommended for new deployments.
postgres_password""when externalRDS password. Set via TF_VAR_postgres_password, or auto-generated and stored in SSM by setup-env.sh.
postgres_iam_database_authentication_enabledtruenoEnable IAM database authentication on RDS.
postgres_iam_database_usernullnoDatabase user for IAM authentication. Must exist in PostgreSQL with GRANT rds_iam TO <user>.
postgres_deletion_protectiontruenoPrevent accidental RDS deletion. Set false for dev/test environments.
postgres_backup_retention_period7noDays to retain automated RDS backups. 0 disables backups.

Redis (ElastiCache)

VariableDefaultRequiredDescription
redis_sourceexternalnoexternal (ElastiCache with private access) or in-cluster (deployed via Helm).
redis_instance_typecache.m6g.xlargenoElastiCache node type.
redis_auth_token""when externalElastiCache auth token. Auto-generated by setup-env.sh and stored in SSM. Set via TF_VAR_redis_auth_token.

S3

VariableDefaultRequiredDescription
s3_ttl_enabledtruenoEnable S3 lifecycle rules to expire trace blobs.
s3_ttl_short_days14noDays before expiring short-lived objects (ttl_s/ prefix).
s3_ttl_long_days400noDays before expiring long-lived objects (ttl_l/ prefix).
s3_kms_key_arn""noKMS CMK ARN for S3 encryption. Empty uses SSE-S3 (AES256).
s3_versioning_enabledfalsenoEnable S3 bucket versioning. Increases storage cost as prior versions are retained.

TLS and DNS

VariableDefaultRequiredDescription
tls_certificate_sourceacmnoTLS source: acm, letsencrypt (cert-manager HTTP-01 ACME solved through the ALB), or none. For DNS-01 challenges through Route 53 (in-cluster gateways), use create_cert_manager_irsa instead; the two are mutually exclusive.
acm_certificate_arn""when acmExisting ACM certificate ARN.
letsencrypt_email""when letsencryptEmail for Let’s Encrypt ACME registration.
langsmith_domain""noCustom domain. When set (and acm_certificate_arn is empty), provisions a Route 53 hosted zone, ACM certificate, and alias record. Empty uses the ALB hostname.
dns_include_wildcard_sanfalsenoAdd a wildcard SAN (*.<langsmith_domain>) to the ACM certificate. Needed for HTTPS on subdomains.
langsmith_namespacelangsmithnoKubernetes namespace for LangSmith.

Ingress

VariableDefaultRequiredDescription
alb_schemeinternet-facingnoALB scheme: internet-facing (public subnets) or internal (private subnets, reachable via VPN, peering, or PrivateLink).
alb_allowed_cidr_blocks["0.0.0.0/0"]noCIDRs allowed to reach the ALB on HTTP/HTTPS. Restrict to VPN or office CIDRs for limited-access deployments.
alb_access_logs_enabledfalsenoEnable ALB access logging to a dedicated S3 bucket.
enable_envoy_gatewayfalsenoInstall Envoy Gateway (Kubernetes Gateway API) instead of ALB Ingress. Required for multi-namespace dataplane deployments.
enable_nginx_ingressfalsenoInstall the NGINX ingress controller. The ALB forwards to NGINX controller pods via a TargetGroupBinding.
enable_istio_gatewayfalsenoOpen port 15017 on the node security group for the istiod sidecar-injector webhook. Required when running Istio on EKS.
istio_nlb_schemeinternet-facingnoScheme for the Istio ingress gateway NLB: internet-facing or internal. Written to tfvars by the setup wizard but not yet consumed by any module; the Istio path currently uses a ClusterIP service behind the ALB TargetGroupBinding.
create_cert_manager_irsafalsenoCreate the IRSA role for cert-manager DNS-01 challenges via Route 53. Required for Let’s Encrypt with Istio Gateway. Run make tls after apply.
cert_manager_hosted_zone_id""when create_cert_manager_irsaRoute 53 hosted zone ID for cert-manager DNS-01 TXT records.

ClickHouse

VariableDefaultRequiredDescription
clickhouse_sourcein-clusternoin-cluster (dev/POC only) or external (LangChain Managed ClickHouse, recommended for production).

Bastion (private cluster)

VariableDefaultRequiredDescription
create_bastionfalsenoCreate an EC2 bastion in a public subnet for private cluster access via SSM Session Manager or SSH.
bastion_instance_typet3.micronoEC2 instance type for the bastion.
bastion_key_namenullnoEC2 key pair for SSH. Empty uses SSM Session Manager only.
bastion_enable_sshfalsenoOpen port 22 on the bastion security group.
bastion_ssh_allowed_cidrs[]noCIDRs allowed to SSH to the bastion. Used only when bastion_enable_ssh = true.
bastion_root_volume_size_gb20noRoot EBS volume size in GB for the bastion.

Security and audit

VariableDefaultRequiredDescription
create_cloudtrailfalsenoCreate a CloudTrail trail logging AWS API calls to S3. Skip if an account-level or org-level trail already exists.
cloudtrail_multi_regiontruenoRecord API calls across all regions.
cloudtrail_log_retention_days365noDays to retain CloudTrail logs in S3. 0 keeps them indefinitely.
create_waffalsenoAttach a WAFv2 Web ACL to the ALB (AWS managed rules for OWASP Top 10, IP reputation, bad inputs). Cost: about $8 to $10/mo base.
create_firewallfalsenoDeploy AWS Network Firewall for FQDN-based egress filtering. Requires create_vpc = true. Cost: about $0.395/hr per endpoint plus $0.065/GB.
firewall_allowed_fqdns["beacon.langchain.com"]noDomains allowed for outbound traffic when create_firewall = true. Matched against TLS SNI and HTTP Host headers. All other destinations are dropped.
firewall_subnet_cidr10.0.64.0/21noCIDR for the firewall subnet. Must be within the VPC CIDR and must not overlap private or public subnets.

Sizing and feature flags

sizing_profile and most enable_* flags are read by init-values.sh and deploy.sh; Terraform does not act on them directly. They affect which Helm overlay files the scripts generate. The three standalone flags (enable_fleet, enable_standalone_polly, enable_standalone_insights) are the exception: Terraform reads them to create database-init Jobs and Kubernetes secrets, and enforces plan-time preconditions on the external Postgres and Redis inputs they require.
VariableDefaultRequiredDescription
sizing_profiledefaultnoHelm sizing: production, production-large, dev, minimum, or default.
enable_deploymentsfalsenoEnable LangSmith Deployment (listener, operator, host-backend). Requires the Deployments license entitlement.
enable_agent_builderfalsenoEnable Agent Builder. Requires enable_deployments = true and the Agent Builder entitlement.
enable_insightsfalsenoEnable Insights (ClickHouse-backed analytics). Requires the Insights entitlement.
enable_pollyfalsenoEnable Polly (AI evaluation and monitoring). Requires enable_deployments = true and the Polly entitlement.
enable_usage_telemetryfalsenoEnable extended usage telemetry reporting.
enable_fleetfalsenoEnable Fleet standalone deployment (chart v0.15+). Requires enable_deployments = true and external Postgres and Redis.
enable_standalone_pollyfalsenoEnable Polly standalone deployment (chart v0.15+). Does not require enable_deployments. Requires external Postgres and Redis.
enable_standalone_insightsfalsenoEnable Insights standalone deployment (chart v0.15+). Does not require enable_deployments. Requires external Postgres and Redis.

Sensitive values (set with setup-env.sh)

Sourcing infra/scripts/setup-env.sh writes these to AWS SSM Parameter Store. External Secrets Operator syncs them into the cluster as Kubernetes secrets. These are not declared Terraform variables and have no place in terraform.tfvars; set them only through SSM.
VariableDescription
langsmith_license_keyLangSmith enterprise license key.
langsmith_admin_passwordInitial org admin password. Minimum 12 characters, with lowercase, uppercase, and a symbol.
langsmith_api_key_saltSalt for hashing API keys. Must stay stable after first deploy.
langsmith_jwt_secretJWT secret for Basic Auth sessions. Must stay stable.
langsmith_deployments_encryption_keyFernet key for LangSmith Deployments. Must never change.
langsmith_agent_builder_encryption_keyFernet key for Agent Builder. Must never change.
langsmith_insights_encryption_keyFernet key for Insights. Must never change.
langsmith_polly_encryption_keyFernet key for Polly. Must never change.