学习笔记 · Obsidian

Terraform 多云基础设施即代码

LangChainLangSmith

两类 Terraform 能力

能力管什么不管什么
LangSmith Terraform ProviderWorkspace、Role/Member、Tag、ABAC Policy、Evaluator、Run Rule、AlertKubernetes/VPC/数据库
LangChain self-host modulesVPC、EKS/AKS/GKE、PostgreSQL、Redis、Blob、Secret、DNS、Helm业务 Agent 与完整组织治理

Provider v0.0.6+ 才支持 Resource Tag 与 Access Policy。认证优先环境变量/Profile,不在 .tf 或 state 输出中硬编码 API key。Provider 与 API 修改同一资源时会 drift,必须确定单一权威来源。

通用两阶段部署

infra layer: network + cluster + DB/cache/blob + IAM/secrets
     ↓ outputs / generated values
app layer: Kubernetes Secret + LangSmith Helm release
     ↓ optional flags
add-ons: Deployment / Fleet / Insights / Sandboxes / Engine

官方脚本驱动 Helm 是推荐路径;也可让 Terraform 管 Helm release。两条路径不能同时成为同一 release 的 owner,否则 state 与实际 Helm 历史会互相覆盖。已有自管集群只需 Helm 时,不必引入全套 Terraform module。

三云关键差异

主题AWSAzureGCP
Secret flowsetup-env.sh → SSM → External Secretssecrets.auto.tfvars + Key Vault → K8s Secretsetup-env.sh → Secret Manager/TF env
Pod 身份IRSAWorkload Identity/Federated CredentialWorkload Identity
默认入口ALB,可选 EnvoyAGIC/Istio/EnvoyEnvoy Gateway
TLSACM 或 cert-managerKey Vault/cert-managercert-manager/Cloud DNS
生产存储RDS、ElastiCache、S3Flexible PG、Managed Redis、BlobCloud SQL、Memorystore、GCS

AWS 的 ALB 不能单独完成 split data plane,需要与 Envoy 链接;私有 EKS 可能需要 bastion。Azure 的 Key Vault purge protection 一旦启用不可关闭,Workload Identity 的 subject 必须精确匹配。GCP 需先启用 Cloud Resource Manager 等 API,GKE 与服务启用有较长冷启动窗口。

Light 与 Production tier

Light 把 PostgreSQL/Redis/ClickHouse 等更多组件放在集群内,部署快但 HA、备份和升级责任重;Production 使用托管外部服务、工作负载身份与对象存储。选择是可靠性/运维责任的架构决定,不应仅按 Terraform 变量默认值决定。

Secret 与 State 管理

  • terraform.tfvars 只放非敏感区域、尺寸与 feature flag。
  • license、密码、encryption key 通过脚本写 Secret Manager/Key Vault/SSM,并确保 secrets.auto.tfvars gitignored。
  • Encryption key、API key salt 等首次部署后不得随意重生成;重新跑 wizard 前先对比现存 Secret。
  • Terraform state 本身可能含连接信息,使用加密远端 backend、state locking、最小 IAM 和审计。

Day-2 工作流

  1. 固定 module commit/tag 与 provider 版本,terraform init -upgrade 需独立评审。
  2. plan 输出进入 PR,检查 replacement、数据库 deletion protection、网络和 IAM 变化。
  3. apply 只改基础设施;生成新 Helm values 后再执行应用发布与健康检查。
  4. Add-on 通过 enable_* 打开后,重新生成 values 并核对节点容量/新增 Secret。
  5. 日常排查先更新 kubeconfig,再用官方 health/preflight 脚本与云 CLI 验证身份、入口、数据库和 Secret sync。

高风险操作

  • terraform destroy 前先禁用/删除 add-on 资源,保留数据快照,并确认 deletion protection;不要为“让 destroy 通过”直接关闭保护后立即执行。
  • Azure make clean 若早于 destroy 可能让资源失去 state 管理;Key Vault/网络删除常因依赖与 purge protection 卡住。
  • AWS PostgreSQL deletion protection 与 GCP deletion protection 都应通过显式变更、二次 plan 和审批处理。
  • Envoy/Ingress 重建可能改变 IP/hostname;DNS TTL、证书与 allowlist 要纳入变更窗口。
  • Helm pending-upgrade、migration/backfill hook 失败时先收集状态,禁止直接删除 migration Job 或强改数据库版本。

交付验收

  1. terraform plan 无意外 replace/delete,敏感值未出现在日志。
  2. Cluster、node pool、DB/cache/blob、identity 与 network path 分层验证。
  3. Helm release、migration Job、Pod readiness、Ingress/TLS 与 smoke Trace 通过。
  4. Add-on 逐个启用并验证相应 Pod、Secret、队列和 entitlement。
  5. 运行备份恢复和升级预演,记录实际 RPO/RTO。
  6. 用 variables reference 生成组织自己的受控配置表,不直接复制 quick reference 的默认值到生产。