gpt4 book ai didi

google-app-engine - GAE : How to deploy various environments with secrets?

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:48 25 4
gpt4 key购买 nike

我在 App Engine 上有一个暂存项目和一个生产项目,每个项目都有 6 项服务。

目前,我们从开发人员的计算机进行部署,使用gcloud app deploy app.staging.yaml --project staging-project

gcloud app deploy app.production.yaml --project production-project

它有效,但会导致环境变量问题,尤其是 secret 问题。

我们的应用程序从环境变量中获取它们的 Api key 、数据库凭据和其他内容 - 这使我们能够在本地、Docker 容器或 App Engine 中运行完全相同的应用程序,而无需知道它的部署位置。

如果我按照文档的方式进行部署,我们的 app.yaml 文件将如下所示:

app.production.yaml

runtime: nodejs
env: flex

manual_scaling:
instances: 1
env_variables:
DATABASE_PASSWORD: "topsecret"
MY_API_KEY: "ultrasecret"

我想每个人都很容易理解为什么将其存储在 Git 存储库中是个坏主意。

目前,我们有每个开发人员在部署前都必须填写的影子文件

app.production.yaml.shadow

runtime: nodejs
env: flex

manual_scaling:
instances: 1
env_variables:
DATABASE_PASSWORD: "set me"
MY_API_KEY: "set me"

但是随着团队的成长,我们希望每个人都能够在暂存阶段进行部署,为每个开发人员和每个服务提供正确的设置变得越来越困难。

我发现了 3 种解决方法,以及它们未被使用的原因:

  • 使用 Google KMS - 允许我们将加密的 secret 直接放入项目中,但它需要我们将自定义代码放入我们的应用程序中以对其进行解密。它在本地、暂存和生产之间创建了不同的环境管理。由于复杂性,它增加了出现错误的风险。
  • Store secrets in Google Datastore - 我试过了,我创建了一个助手,它在 proccess.ENV 中搜索环境变量,然后在缓存中搜索,最后在数据存储中搜索。但与 KMS 一样,它大大增加了复杂性。
  • 将 secret 存储在 JSON file and put in on Google Cloud Storage :同样,它需要通过检查环境变量的助手加载环境变量,然后加载文件等...

最终,我们正在探索使用由开发人员或持续集成触发的部署服务器的可行性,并在部署到 App Engine 时处理所有 secret 注入(inject)。但是Ansible、Salt、P​​uppet、Chef这些工具只有Compute Engine的插件,不支持App Engine。

+-------------------------+    +-------------------+   +---------------------+
| | | +---> |
| Developer workspace | | Ansible | | App Engine STAGING |
| +----> (or other) | | |
+-------------------------+ | | +---------------------+
| |
+-------------------------+ | | +---------------------+
| +----> Injects secrets | | |
| Continous Integration | | | App Engine PROD. |
| | | +---> |
+-------------------------+ +-------------------+ +---------------------+

这让我想到了 3 个问题:

  • 您认为将部署服务器与 App Engine 结合使用是个好主意吗?
  • 我如何确保生产和暂存 secret 保持同步,以便开发人员的部署始终正确?
  • 有没有办法在 App Engine 上使用经典环境变量作为 secret ?

最佳答案

我强烈建议您考虑结合使用 KMS 和云存储,正如 Google 概述的那样 here .

你说得对,设置起来可能有点麻烦,但一旦安装到位,就很容易使用了。我们为每个环境(devteststagingprod)设置单独的 key 环,然后为每个应用程序并编写了一个命令行实用程序,使我们团队中的任何开发人员都可以轻松地将 secret 写入 secret 存储(同时防止他们读回生产 secret )。

最终, secret 的管理仍然是一个难题。随着团队的壮大,管理多个应用程序/环境的 secret 非常困难。但我真的鼓励你预先支付投资 KMS 之类的东西的成本,因为它会让你的生活基本上永远更轻松,并真正降低你不小心搬起石头砸自己脚的风险。

关于google-app-engine - GAE : How to deploy various environments with secrets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50009948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com