在本地测试依赖于环境变量的应用程序

Testing app that depends on environment variables locally

Google 的 App Engine 提供了 predefined environment variables and additional environment variables may be defined in app.yaml. Meanwhile, the instructions for Testing and Deploying your Application just say to use go run to test the app locally. If I test my app locally inside a cloud-sdk Docker container 的列表,是否有 gcloud 命令(或其他工具)可以在我的本地容器中创建与在 App 引擎中?现在我只是在本地使用 bash 脚本设置环境变量,但这意味着我需要在多个位置维护变量。

变量都是运行时间元数据。只有 运行时间可以为这些变量提供值,然后数据特定于部署。

如果您的应用需要此元数据,您将知道它使用了哪些变量以及如何使用它们,并且当您指定值时,无论如何您都需要提供变量名称,例如。 GAE_SERVICE="freddie".

由于这些原因,本地测试可能无法为您伪造这些值。当您 go run 您的应用程序时,它没有任何内在特性使其成为 App Engine 应用程序。它只会在您部署后成为一个,因为它 运行正在 App Engine 服务上。

如果您运行将您的代码放在容器中,您可以运行时间向容器提供环境变量。这样做可能比编写这些脚本更可取:

GAE_SERVICE="freddie"
docker run .... \
--env=GAE_SERVICE=${GAE_SERVICE} \
...

虽然对于 App Engine 来说并不实用,但有一种观点认为您的代码不直接绑定到任何 运行time(例如 App Engine)元数据。如果是这样,您就无法 运行 在其他地方轻易做到。

在其他平台上,元数据将被进一步抽象,某种形式的 sidecar 会将元数据转换成一种无论您将其部署在何处都能一致呈现的形式;您的代码没有更改,但某些适配器会在每个 运行 时间正确配置它。