谷歌应用引擎支持环境变量吗?

10
我注意到开发控制台似乎没有地方可以配置静态环境变量。在GAE上的期望是我需要将这些变量作为部署的一部分从我的构建服务器进行打包吗?如果是这样,是否有涵盖为什么或详细说明GAE / Google Cloud哲学的文档?
3个回答

12

多年过去了,它仍然没有发生。

我的解决方法是在部署过程中编译app.yaml(在本地或使用CI)。例如,我有一个模板文件app.tml.yaml文件。

runtime: python37
handlers:
- url: /static
  static_dir: app/static/
- url: /.*
  script: auto
env_variables:
  DJANGO_GC_DATABASE_PASSWORD: ${DJANGO_GC_DATABASE_PASSWORD}

然后我在部署之前立即调用envsubst,如下所示:envsubst < ./app.tml.yaml > app.yaml 然后像往常一样执行gcloud app deploy。部署完成后,敏感数据的app.yaml将被删除。变量从本地.env文件中读取或在CI系统中设置。

此帖子中还列出了其他方法:https://dev.to/mungell/google-cloud-app-engine-environment-variables-5990 但对我来说它们不够方便或通用。


在构建阶段注入机密信息是“正确的答案”。GCP有Code Build,它可以让您保留机密信息并加密整个文件,正如@daniel-titkov所说,您可以使用几乎任何构建工具来完成相同的任务。 - Seth
经过三个小时的研究,终于解决了。谢谢。 - Nalin Dobhal

7

3
为了完整起见,有没有任何记录不提供环境变量的原因的地方?或者可能有一篇意见/理论文章吗? - Alexander Trauzzi
标准GAE实例的基本概念是它们应该可以快速而频繁地创建/销毁。您无法直接设置环境变量,因为您无法访问实际环境。这仅适用于标准实例,在托管VM中,您应该能够像任何常规服务器一样设置变量。 - jirungaray
3
回答Omega的问题,他们确实提供环境变量。您需要在部署时使用您的 app.yaml定义它们。他们没有提供界面来动态设置/取消这些变量而不需要推代码。有时这很不方便,但也意味着您不能无意中从Web更改某些内容而不是显式地推送代码。 - Josh J

3
一种解决方案显然是 https://cloud.google.com/secret-manager/docs,但我选择了这里提供的解决方案:

如何使用app.yaml在GAE中安全地存储环境变量

首先,将环境变量放入一个env_variables.yaml文件中,例如:

env_variables:
  SECRET: 'my_secret'

然后,在app.yaml中包含这个env_variables.yaml文件。
includes:
  - env_variables.yaml

最后,将 env_variables.yaml 添加到 .gitignore 中,这样秘密变量就不会存在于存储库中。

此外,

  • 我提交了一个包含指令和占位符值的 env_variables.sample.yaml 文件,下一个开发人员可以填写这些值。
  • 在开发环境中,我解析 env_variables.yaml 并将变量添加到 process.env 中,以便我有一个单一的真实来源来获取这些变量...
if (process.env.NODE_ENV === "development") {
  try {
    const fs = require("fs");
    const yaml = require("js-yaml");

    let fileContents = fs.readFileSync("./env_variables.yaml", "utf8");
    let {env_variables} = yaml.load(fileContents);
    console.log({ env_variables });
    Object.keys(env_variables).forEach((v) => {
      process.env[v] = env_variables[v];
    });
  } catch (error) {
    res.status(500).end("500: Problem getting env vars");
    return;
  }
}

我在这里添加我的解决方案,因为引用的问题指定了Python,并且这个问题是通用的。

与其他PAAS解决方案(例如Heroku、Netlify)一样,如果用户可以访问App Engine控制台,则可以通过浏览控制台中的源文件来查看密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接