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

如何通过Cloud Build将Secret Manager密钥传入App Engine的app.yaml环境变量

修正方案

原有配置的核心问题是sed替换逻辑的特殊字符兼容问题、变量引用规则错误,调整方案如下:

1. app.yaml无需修改,原有%sec%占位符可继续使用

原有app.yaml配置保留即可:

runtime: python39
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
  python_version: 3

env_variables:
     SEC: %sec%

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

2. 修正后的cloudbuild.yaml配置

steps:
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        sed -i "s|%sec%|$$SEC|g" app.yaml
        gcloud config set app/cloud_build_timeout 1600
        gcloud app deploy
    secretEnv: ["SEC"]
availableSecrets:
  secretManager:
  - versionName: projects/$PROJECT_ID/secrets/db_secret/versions/3
    env: 'SEC'
timeout: '1600s'

3. 关键调整说明

  • 替换sed的分隔符从/为|,避免密钥中包含/、&等特殊字符时替换逻辑崩溃,若密钥含|可替换为#、@等其他不常见字符
  • 去掉冗余的变量导出、打印逻辑,直接用$$SEC引用Secret Manager传入的密钥,Cloud Build中访问secretEnv定义的变量必须用双$转义,避免被提前解析为Cloud Build的内置变量
  • sed命令改用双引号包裹,保证变量可以正常展开,同时保留密钥内的空格和特殊字符

4. 必做权限配置

需要给Cloud Build默认服务账号授予密钥的访问权限,否则无法拉取Secret Manager中的密钥:

gcloud secrets add-iam-policy-binding db_secret \
  --member=serviceAccount:<你的GCP项目编号>@cloudbuild.gserviceaccount.com \
  --role=roles/secretmanager.secretAccessor

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:00:04