如何从 Google Cloud Function 代码更改环境变量的值?

use*_*693 3 python environment-variables google-cloud-platform google-cloud-functions

我试图了解如何正确使用Google Cloud Functions的环境变量。

我已经部署了一个函数,我想写入和读取它的环境变量(例如XXX:)。

if not os.environ.get("XXX"):
    print("XXX_SET_DEFAULT")
    os.environ.setdefault("XXX","1")
else:
    print("XXX_SET")
    os.environ["XXX"] = "1"
print("XXX_GET", os.environ["XXX"])
Run Code Online (Sandbox Code Playgroud)

触发该函数后,运行时环境变量列表中最初设置的值不会改变。

虽然行为有点不同,因为当我使用具有虚拟值的函数部署变量时,我可以XXX_SET在日志中看到字符串,但是当我不首先部署变量时,第一次运行我可以看到XXX_SET_DEFAULT,然后是第二次运行有XXX_SET

我已经使用(也从用户界面)设置了变量:

gcloud functions deploy my_func \
    ...
    --set-env-vars XXX=xxx
Run Code Online (Sandbox Code Playgroud)

问题

  • 是否有可能以某种方式从 python 代码中设置这个变量?
  • 是什么造成了日志中的这种差异(XXX_SET_DEFAULT, XXX_SETXXX_SET, XXX_SET
  • 为什么这个变量的值没有从 python 代码中设置?
    • 它是否与函数的多个实例化(需要时)有关?
  • Runtime environment variables和 和有什么区别Build environment variables
    • 我可以在两者之间部署变量吗Build environment variables
  • 在 Google 将环境变量与云函数结合使用的最佳实践是什么?

tit*_*ban 5

您不应该更改 GCF 中的环境变量。他们在那里设置配置。

以下是一些基础知识:

  • 函数在(docker)容器中运行。这些确保它们始终在干净且一致的环境中运行。
  • Build environment variables用于容器构建时。除非你搞乱了你的构建方式,否则你将不需要这些。
  • Runtime environment variables用于函数在容器中运行时的情况。您可以使用代码访问这些内容。

这意味着,每次运行一个函数时,它都会获得一个新容器,所有变量都设置为您在配置中设置的值。

现在,GCF 有可能在后台重用某些容器,您可能会看到一些持久性,但不能依赖于此。

综上所述:

  • 环境变量为您的代码提供了一个简单的配置选项,无需更改代码即可更改该选项。
  • 一般来说,最好将它们视为只读,即使您可以更改它们,但当您的代码运行的容器被丢弃时,这些更改也将被丢弃。
  • 如果您想在函数之间保留数据,请使用数据库。