Skip to main content
Complete reference for every input variable exposed by the Azure 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): set with make setup-env, which writes them to infra/secrets.auto.tfvars (gitignored, auto-loaded by Terraform) and stores them in Azure Key Vault.
For the end-to-end install, refer to the deploy guide. For how the modules fit together, refer to the architecture reference.

Core

VariableDefaultRequiredDescription
subscription_idyesAzure subscription ID for the deployment.
locationeastusnoAzure region for the deployment.
identifier""noSuffix appended to every resource name to distinguish environments (for example, -prod, -staging). Must start with a hyphen or be empty.
environmentdevnoEnvironment tag applied to all resources.
owner""noEmail or team name of the resource owner. Applied as a tag.
cost_center""noCost center or billing code. Applied as a tag.

Networking

VariableDefaultRequiredDescription
create_vnettruenoCreate a new VNet. Set false to bring your own VNet and subnets.
vnet_id""when !create_vnetExisting VNet resource ID.
aks_subnet_id""when !create_vnetExisting subnet ID for the AKS cluster.
postgres_subnet_id""when !create_vnetExisting subnet ID for the PostgreSQL server.
redis_subnet_id""when !create_vnetExisting subnet ID for the Redis instance.
postgres_subnet_address_prefix["10.0.32.0/20"]noCIDR prefix for the PostgreSQL subnet. Can be disjoint ranges.
redis_subnet_address_prefix["10.0.48.0/20"]noCIDR prefix for the Redis subnet. Can be disjoint ranges.
aks_authorized_ip_ranges[]noExternal CIDRs permitted to reach the AKS API server. Empty leaves the API server publicly reachable so Terraform-driven Helm and kubectl steps work from any apply host. Populate with operator and CI egress CIDRs for production.

AKS

VariableDefaultRequiredDescription
default_node_pool_vm_sizeStandard_D8s_v3noVM size for the default node pool. Standard_D8s_v3 (8 vCPU / 32 GiB) is the recommended baseline for the core platform with external Postgres and Redis. Use Standard_D4s_v3 (4 vCPU / 16 GiB) only for light or demo deployments with in-cluster databases.
default_node_pool_min_count1noMinimum node count for the default pool. The autoscaler never scales below this floor. Set to 3 for production (the core platform needs about 14.4 vCPU, which three Standard_D8s_v3 nodes cover). Set to 1 for minimum or dev deployments.
default_node_pool_max_count10noMaximum node count for the default pool. Core platform uses 4 to 6 nodes; add headroom as you enable add-ons (LangSmith Deployment ~6, Agent Builder ~8, Insights 10 to 12). Raising this takes effect immediately with no node restarts.
default_node_pool_max_pods60noMaximum pods per node in the default pool. The Azure CNI default of 30 is too low for LangSmith; 60 fits a full deployment on a single node. Immutable: changing it recreates the node pool.
additional_node_poolslarge: Standard_D16s_v3, 0–2noAdditional node pools. The default large pool (Standard_D16s_v3, 16 vCPU / 64 GiB) is required for ClickHouse (requests 3.5 vCPU / 15 GiB) and LangSmith Deployment agent pods. min_count = 0 scales it to zero when idle. Raise max_count to 3 or more for Agent Builder with multiple simultaneous deployments.
aks_service_cidr10.0.64.0/20noKubernetes service CIDR. Must not overlap the VNet.
aks_dns_service_ip10.0.64.10noCoreDNS service IP. Must be within aks_service_cidr.
aks_deletion_protectiontruenoPrevent accidental AKS cluster deletion. Set false for dev/test.
availability_zones["1"]noAvailability zones to deploy into. Use ["1", "2", "3"] for zone-redundant HA.

Data sources

VariableDefaultRequiredDescription
postgres_sourceexternalnoexternal provisions Azure Database for PostgreSQL Flexible Server (private VNet). in-cluster uses the chart-managed Postgres pod (dev/demo only).
redis_sourceexternalnoexternal provisions Azure Managed Redis (private VNet). in-cluster uses the chart-managed Redis pod (dev/demo only).
clickhouse_sourcein-clusternoin-cluster (dev/POC only) or external for LangChain Managed ClickHouse, recommended for production.

PostgreSQL

VariableDefaultRequiredDescription
postgres_admin_usernamelangsmithnoPostgreSQL administrator username.
postgres_admin_password""when externalPostgreSQL administrator password. Set via make setup-env.
postgres_database_namelangsmithnoName of the database LangSmith connects to. Must match the database that exists on the server.
postgres_deletion_protectiontruenoPrevent accidental PostgreSQL server deletion. Set false for dev/test.
postgres_geo_redundant_backupfalsenoEnable geo-redundant backups for PostgreSQL.
postgres_standby_availability_zone""noStandby AZ for PostgreSQL zone-redundant HA. Empty disables the HA standby.

Redis

VariableDefaultRequiredDescription
amr_skuBalanced_B0noAzure Managed Redis SKU. Balanced_B0 is the smallest. Move up (Balanced_B1, Balanced_B3, and so on) if the region reports AllocationFailed. Replaces the classic redis_capacity.

Blob storage

VariableDefaultRequiredDescription
blob_ttl_enabledtruenoEnable lifecycle TTL rules on the blob container.
blob_ttl_short_days14noTTL in days for short-lived trace blobs.
blob_ttl_long_days400noTTL in days for long-lived trace blobs.
storage_allowed_ips[]noPublic IPs or CIDRs allowed through the storage account default-deny firewall. AKS pod traffic is allowlisted automatically via the Microsoft.Storage service endpoint. Add only external clients (operator workstations, CI runners) that need the blob data plane.

Key Vault

VariableDefaultRequiredDescription
keyvault_name""noKey Vault name. Must be globally unique, 3 to 24 characters. When empty, main.tf computes langsmith-kv<identifier>. Override to avoid naming conflicts.
keyvault_purge_protectiontruenoEnable purge protection. Set false for dev/test to allow immediate name reuse after destroy.
keyvault_default_actionAllownoDefault action for the Key Vault data-plane firewall. Allow keeps the first apply (which creates secrets via the data plane) working. Production sets Deny and populates keyvault_allowed_ips.
keyvault_allowed_ips[]noPublic IPs or CIDRs allowed through the Key Vault firewall when keyvault_default_action = "Deny". The AKS subnet is allowlisted automatically via the Microsoft.KeyVault service endpoint.

Ingress

VariableDefaultRequiredDescription
ingress_controllernginxnoIngress controller: nginx, istio (self-managed Helm), istio-addon (Azure managed Istio, recommended on Azure), agic (Application Gateway Ingress Controller), envoy-gateway (Gateway API), or none. See INGRESS_CONTROLLERS.md for the TLS compatibility matrix.
istio_version1.29.1noIstio Helm chart version. Used only when ingress_controller = "istio".
istio_addon_revisionasm-1-27noAzure Service Mesh revision (asm-1-<minor>). List available revisions with az aks mesh get-upgrades. Used only when ingress_controller = "istio-addon".
agic_subnet_address_prefix["10.0.96.0/24"]noCIDR for the Application Gateway dedicated subnet. Must be /24 or larger. Used only when ingress_controller = "agic".
agw_sku_tierStandard_v2noApplication Gateway SKU tier: Standard_v2 or WAF_v2 (enables WAF). Used only when ingress_controller = "agic".
envoy_gateway_versionv1.2.0noEnvoy Gateway Helm chart version. Used only when ingress_controller = "envoy-gateway".
ingress_ip""noPublic IP of the ingress load balancer, used by the DNS module for the A record. Get it with kubectl get svc -n ingress-nginx.

DNS and TLS

VariableDefaultRequiredDescription
dns_label""noAzure Public IP DNS label for the ingress load balancer. Results in <label>.<region>.cloudapp.azure.com. Works with nginx, istio, istio-addon, and envoy-gateway. Empty skips it.
langsmith_domain""noCustom hostname for LangSmith (for example, langsmith.example.com). Used in Helm values and ingress TLS. Takes priority over dns_label.
tls_certificate_sourceletsencryptnoletsencrypt (HTTP-01 via cert-manager), dns01 (DNS-01 via cert-manager), existing (bring your own cert), or none (HTTP only, demo/dev).
letsencrypt_email""when letsencrypt or dns01Email for Let’s Encrypt certificate notifications.
create_dns_zonefalsenoCreate an Azure DNS zone and A record for the LangSmith domain. Required for DNS-01 issuance.

LangSmith application

VariableDefaultRequiredDescription
langsmith_namespacelangsmithnoKubernetes namespace for LangSmith. Used to scope Workload Identity for blob storage.
langsmith_release_namelangsmithnoHelm release name. Used for Workload Identity federated credential subjects.
langsmith_domain""noSee DNS and TLS.
langsmith_helm_chart_version""noPin a chart version for reproducible deploys. The deploy script precedence is the CHART_VERSION environment variable, then this variable, then the pinned line default ~0.15.1 (latest 0.15.x patch).
langsmith_admin_email""noInitial org admin email (initialOrgAdminEmail in Helm values). Set via make setup-env.

Sizing and add-on flags

init-values.sh and deploy.sh read these flags; Terraform ignores them. They control which Helm overlays the scripts generate.
VariableDefaultRequiredDescription
sizing_profileproductionnoHelm sizing overlay: minimum, dev, production, or production-large.
enable_deploymentsfalsenoEnable LangSmith Deployment (host-backend, listener, operator).
enable_agent_builderfalsenoEnable Agent Builder UI. Requires enable_deployments = true.
enable_insightsfalsenoEnable Insights (ClickHouse-backed analytics). Requires enable_deployments = true.
enable_pollyfalsenoEnable Polly (AI evaluation and monitoring). Requires enable_deployments = true.

Security and audit

VariableDefaultRequiredDescription
create_waffalsenoDeploy an Azure WAF policy (OWASP 3.2 plus bot protection). Attach to Application Gateway or Front Door after creation.
waf_modePreventionnoWAF enforcement mode: Detection (log only) or Prevention (block).
create_diagnosticsfalsenoDeploy a Log Analytics workspace and diagnostic settings for AKS, Key Vault, and PostgreSQL.
log_retention_days90noLog Analytics workspace retention in days.
create_bastionfalsenoDeploy a jump VM for private AKS access via az ssh vm.
bastion_vm_sizeStandard_B2snoVM SKU for the bastion host.
bastion_admin_ssh_public_key""noSSH public key for emergency admin access to the bastion.
bastion_allowed_ssh_cidrs["0.0.0.0/0"]noCIDRs allowed inbound SSH to the bastion. Restrict to VPN or corporate ranges in production.

Sensitive variables (set with setup-env.sh)

make setup-env writes these to secrets.auto.tfvars and Terraform stores them in Azure Key Vault. Never set these inline in terraform.tfvars. make setup-env also manages postgres_admin_password and langsmith_admin_email, documented in the PostgreSQL and LangSmith application sections. This table lists only the sensitive variables that do not appear elsewhere in this reference.
VariableDescription
langsmith_license_keyLangSmith enterprise license key.
langsmith_admin_passwordInitial org admin password.
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 Deployment. 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.

App module variables (Terraform path)

The Terraform path (make init-app then make apply-app) manages the LangSmith Helm release, its Kubernetes Secret, and the Workload Identity ServiceAccount in Terraform state instead of through the Helm shell scripts. Its variables live in app/terraform.tfvars. Use this path as an alternative to make init-values && make deploy. For when to choose this path, refer to the Azure deployment guide. make init-app auto-populates the infrastructure passthrough variables (subscription_id, resource_group_name, cluster_name, keyvault_name, storage_account_name, storage_container_name, workload_identity_client_id, langsmith_namespace, tls_certificate_source, ingress_controller, and dns_label) from the infra module outputs. Each defaults to null and fails at plan time with a precondition error naming what is missing. Override them only when running the app module against infrastructure you provisioned separately. Set the following in app/terraform.tfvars:
VariableDefaultRequiredDescription
sizingproductionnoResource sizing profile: production, production-large, dev, or none (chart defaults).
postgres_sourceexternalnoexternal (Azure Database for PostgreSQL) or in-cluster (Helm). Mirror the infra value.
redis_sourceexternalnoexternal (Azure Managed Redis) or in-cluster (Helm). Mirror the infra value.
hostnamenullnoLangSmith hostname. Auto-detected from dns_label when unset.
admin_emailadmin@example.comnoInitial org admin email address.
release_namelangsmithnoHelm release name.
chart_version""noLangSmith Helm chart version. Empty uses the latest.
helm_timeout1200noHelm install and upgrade timeout in seconds.
helm_force_updatefalsenoForce a Helm upgrade on every apply, even when values are unchanged.
enable_agent_deploysfalsenoEnable LangSmith Deployment.
enable_agent_builderfalsenoEnable Agent Builder. Requires enable_agent_deploys = true.
enable_insightsfalsenoEnable Insights. Requires external ClickHouse.
enable_pollyfalsenoEnable Polly AI evaluation and monitoring. Requires enable_agent_deploys = true.
enable_usage_telemetryfalsenoEnable extended usage telemetry reporting.
tls_enabled_for_deploysnullnoWhether agent deployment endpoints use HTTPS. Auto-detected from tls_certificate_source when unset.
clickhouse_host""when enable_insightsClickHouse hostname or endpoint.
clickhouse_port8123noClickHouse HTTP port.
clickhouse_databasedefaultnoClickHouse database name.
clickhouse_usernamedefaultnoClickHouse username.
clickhouse_password""noClickHouse password. Set for authenticated ClickHouse.
clickhouse_tlstruenoEnable TLS for the ClickHouse connection.