You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用Terraform配置Cloud Run通过环境变量访问GCP Secret?

在Terraform中实现GCP Secret创建及Cloud Run环境变量访问,支持后续手动更新

完全可行,你可以通过Terraform完成Secret的框架创建与Cloud Run的关联配置,后续直接在GCP控制台手动更新Secret值即可。以下是具体实现方案:

1. Terraform核心配置

1.1 创建Secret容器

首先用Terraform创建Secret Manager中的Secret(仅创建容器,不强制绑定固定版本,方便后续手动更新):

resource "google_secret_manager_secret" "api_key" {
  project     = var.gcp_project_id
  secret_id   = "backend-api-key"
  replication {
    automatic = true
  }

  # 可选:添加初始占位版本,后续可手动替换;若不需要初始值可删除此块
  secret_version {
    secret_data = "temp-initial-value"
  }

  # 关键:忽略Terraform对Secret版本的管理,避免后续apply覆盖手动更新的内容
  lifecycle {
    ignore_changes = [secret_version]
  }
}

1.2 配置Cloud Run关联Secret

在Cloud Run服务的环境变量中,通过secret_key_ref引用上述Secret,同时配置必要的权限:

resource "google_cloud_run_service" "backend_service" {
  name     = "backend-api"
  location = var.gcp_region
  project  = var.gcp_project_id

  template {
    spec {
      containers {
        image = "gcr.io/${var.gcp_project_id}/backend-image:latest"
        
        # 通过环境变量关联Secret
        env {
          name = "API_KEY"
          value_from {
            secret_key_ref {
              name = google_secret_manager_secret.api_key.secret_id
              key  = "latest" # 自动拉取Secret的最新版本
            }
          }
        }
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}

# 给Cloud Run服务账号配置Secret访问权限
resource "google_secret_manager_secret_iam_binding" "secret_access" {
  project   = var.gcp_project_id
  secret_id = google_secret_manager_secret.api_key.secret_id
  role      = "roles/secretmanager.secretAccessor"
  members = [
    "serviceAccount:${google_cloud_run_service.backend_service.service_account}",
  ]
}

2. 后续手动更新Secret步骤

  1. 登录GCP控制台,进入Secret Manager,找到你创建的backend-api-key
  2. 点击「添加版本」,输入新的Secret值并保存
  3. 若需要立即让Cloud Run生效:在Cloud Run控制台找到对应服务,点击「重新部署」;新启动的实例会自动加载最新的Secret值,无需修改Terraform配置

关键注意事项

  • Terraform仅管理Secret的元数据(名称、复制策略等),不会覆盖手动添加的Secret版本(通过lifecycle.ignore_changes实现)
  • 必须配置IAM权限,否则Cloud Run实例启动时会因权限不足无法读取Secret
  • 若未手动触发重新部署,Cloud Run的现有实例会继续使用旧的Secret值,直到实例重启或自动扩缩容时才会加载最新版本

内容的提问来源于stack exchange,提问作者Herlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:27:35