Skip to main content
This page documents what the GCP Terraform modules provision and how the modules wire the resulting deployment together.

Platform layers

LangSmith on GCP deploys in up to five passes. Each pass adds a capability layer on top of the previous. All layers share the same GKE cluster and langsmith namespace. LangSmith on GCP deployment passes and service layout

Module descriptions

Deployment tiers

Light deploy (all in-cluster)

Set in terraform.tfvars:

Production (external managed services)

Application core services

In-cluster ClickHouse is dev/POC only (single pod, no replication, no backups). For production, use LangChain Managed ClickHouse or a self-managed external cluster.

One-time jobs

LangSmith Deployment add-on

Each LangGraph deployment created in the UI produces a Kubernetes Deployment in the langsmith namespace, with pods running as the langsmith-ksa ServiceAccount. That ServiceAccount must carry the iam.gke.io/gcp-service-account annotation, which deploy.sh applies idempotently.

GCP managed services

When postgres_source = "external" and redis_source = "external" (the recommended production setting), Terraform provisions:

Cloud SQL PostgreSQL

  • Default size db-custom-2-8192 (2 vCPU, 8 GB), private IP, port 5432.
  • REGIONAL availability with automatic failover.
  • Holds orgs, users, projects, API keys, settings.
  • Terraform writes the connection URL directly to the langsmith-postgres Kubernetes Secret.

Memorystore Redis

  • Default 5 GB, STANDARD_HA tier, private IP, port 6379.
  • Trace ingestion queue, pub/sub, short-lived cache.
  • No auth token required. Access is controlled by VPC private IP only.
  • Terraform writes the connection URL directly to the langsmith-redis Kubernetes Secret.

Cloud Storage bucket

  • Trace payloads: large inputs and outputs, attachments.
  • Accessed via the S3-compatible API (apiURL: https://storage.googleapis.com, engine: S3).
  • HMAC keys are required for the S3-compatible API even with Workload Identity. Create one under Cloud Storage → Settings → Interoperability and pass them to Helm via config.blobStorage.accessKey and config.blobStorage.accessKeySecret.
  • Lifecycle rules: ttl_s/ prefix (14 days default), ttl_l/ prefix (400 days default).
  • Always required.

Secret Manager (optional module)

  • Stores Postgres password and generated secrets (LangSmith secret key, JWT secret) when enable_secret_manager_module = true.
  • Core secrets (langsmith-postgres, langsmith-redis) are always stored in Kubernetes Secrets by k8s-bootstrap regardless of this module. Secret Manager provides an additional durable store for secrets that must survive cluster recreation.

Cluster infrastructure

The Gateway resource is managed by Terraform; the HTTPRoute is managed by Helm. Do not delete the Gateway resource manually. GCP releases the external IP when the Gateway is deleted, and a new IP is issued on recreate.

Workload Identity

GKE pods access GCS through Workload Identity. The Kubernetes ServiceAccount is bound to a GCP service account via an IAM binding; pods receive temporary credentials with no static keys in Secrets or environment variables.
The GSA is defined by the iam module and output as workload_identity_annotation. init-values.sh writes these annotations into values-overrides.yaml automatically. GCS access via the S3-compatible API requires HMAC keys in addition to Workload Identity. Create the HMAC key under Cloud Storage → Settings → Interoperability and pass it to Helm.

Network topology

Cloud SQL and Memorystore are accessed exclusively via private IP. The networking module establishes a private service connection (VPC peering to Google’s managed network) whenever postgres_source = "external" or redis_source = "external".

Traffic flow

Component to storage mapping

Secret Manager integration

Without Secret Manager:
With Secret Manager:

Terraform module graph

LangSmith itself is not deployed by Terraform; the chart is installed in the application stage via helm upgrade --install.

Verification commands