如何用Terraform创建Cloud Run并将Secret导出为环境变量?
使用Terraform为Cloud Run服务导入Secret作为环境变量
基于你已能运行的官方基础示例,只需在Cloud Run服务的容器配置中添加环境变量的Secret引用,并配置对应的IAM权限即可实现需求。
完整配置示例
resource "google_cloud_run_service" "default" { name = "cloudrun-service" location = "us-central1" template { spec { containers { image = "gcr.io/cloudrun/hello" # 将Secret Manager中的VAR导出为环境变量VAR env { name = "VAR" value_from { secret_key_ref { name = "VAR" # 对应Secret路径/projects/my-project-id/secret/VAR中的Secret名称 key = "latest" # 使用Secret的最新版本,也可指定具体版本号如"1" } } } } } } traffic { percent = 100 latest_revision = true } } # 授予Cloud Run服务账号读取Secret的权限(必须配置,否则服务无法访问Secret) resource "google_project_iam_member" "cloud_run_secret_access" { project = "my-project-id" role = "roles/secretmanager.secretAccessor" member = "serviceAccount:${google_cloud_run_service.default.service_account}" }
关键配置说明
环境变量引用Secret
在containers的env数组中新增条目,通过value_from.secret_key_ref关联Secret Manager中的Secret:name:环境变量的名称(即你要的VAR)secret_key_ref.name:Secret Manager中Secret的名称(对应你提供的路径里的VAR)secret_key_ref.key:Secret的版本,latest会自动使用最新版本,也可替换为具体的版本ID
IAM权限配置
Cloud Run的服务账号必须拥有roles/secretmanager.secretAccessor权限才能读取Secret。上述示例中使用了Cloud Run服务自动生成的服务账号,如果你使用自定义服务账号,只需将member字段替换为对应的服务账号邮箱即可。
注意事项
- 确保你的Terraform Google Provider版本在v4.0及以上,以支持该配置
- 如果Secret不在当前Terraform配置的项目中,需调整
google_project_iam_member的project参数,并确保跨项目访问的权限配置正确
内容的提问来源于stack exchange,提问作者Ramon Medeiros
相关产品推荐
相关产品推荐

