【问题标题】:How to pass system environment variables to app.yaml?如何将系统环境变量传递给 app.yaml?
【发布时间】:2019-06-05 23:22:39
【问题描述】:
有可能吗?这是我的app.yaml:
runtime: nodejs8
env_variables:
NODE_ENV: production
PORT: 8080
API_KEY: ${API_KEY}
${API_KEY} 就像一个占位符。
当我运行API_KEY=xdfj212c gcloud app deploy app.yaml 命令时,我想将API_KEY=xdfj212c 传递给app.yaml 并将占位符替换为
xdfj212c.
预期结果:
runtime: nodejs8
env_variables:
NODE_ENV: production
PORT: 8080
API_KEY: xdfj212c
或者,在我运行之后
export API_KEY=xdfj212c
gcloud app deploy
我想要同样的行为。
这对谷歌应用引擎部署工作流程有意义吗?
【问题讨论】:
标签:
google-app-engine
google-cloud-platform
【解决方案1】:
在app.yaml 你可以include 另一个 YAML 配置
includes:
- extra_env_vars.yaml
您可以在插入 environment variables 时即时创建
# Unix-like OS
export DB_PASSWORD=your_password
export DB_HOST=your_host
echo -e "env_variables:\n DB_PASSWORD: $DB_PASSWORD\n DB_HOST: $DB_HOST" > extra_env_vars.yaml
# Windows
set DB_PASSWORD=your_password
set DB_HOST=your_host
(echo env_variables: & echo. DB_PASSWORD: %DB_PASSWORD% & echo. DB_HOST: %DB_HOST%) > extra_env_vars.yaml
生成的extra_env_vars.yaml 如下所示:
env_variables:
DB_PASSWORD: your_password
DB_HOST: your_host
最后,在你的版本控制系统中忽略extra_env_vars.yaml。
【解决方案2】:
你总是可以使用sed:
$ sed -i 's/${API_KEY}/xdfj212c/g' app.yaml && gcloud app deploy
“坏”的事情是这会将密钥存储回来,但您始终可以附加一个新的sed 命令以用占位符再次替换密钥,或者使用您的 VCS 机制来重置更改文件。
另一种选择是将您的 app.yaml 文件保存为 app_template.yaml 之类的文件,然后为您的部署执行此操作:
$ sed 's/${API_KEY}/xdfj212c/g' app_template.yaml | tee app.yaml; gcloud app deploy
这将在新文件app.yaml 中进行替换,然后进行部署。