您可以为 Cloud Run 服务设置任意环境变量。Cloud Run 会将这些键值对注入容器,并使其可供代码访问。您还可以在从源代码部署函数时使用它们将配置信息传递给 Buildpack。
环境变量绑定到单个服务,对您 Google Cloud 项目中的其他服务不可见。每个变量都存储在已部署的服务中,并且存在于与其绑定的服务相同的生命周期中。
环境变量数量上限
您最多可以为 Cloud Run 服务设置 1,000 个环境变量。
变量生命周期
所有环境变量都绑定到服务的部署;您只能通过部署进行设置或更改。如果部署因任何原因失败,对环境变量进行的任何更改都不会应用。要更改环境变量,部署必须取得成功。
最佳做法
以下部分重点介绍了一些配置环境变量的最佳实践。
管理密文
您可以使用环境变量进行服务配置,但我们不建议将其用作存储数据库凭据或 API 密钥等密钥的方式。敏感值应存储在源代码和外部环境变量以外的位置。某些执行环境或某些框架的使用可能会导致环境变量的内容被发送到日志。我们也不建议将敏感凭据存储在 YAML 文件、部署脚本或源代码控制系统中。请注意,环境变量对具有 Project Viewer 权限或更高权限的所有人可见。
如需存储 Secret,我们建议您使用 Secret Manager。如需配置服务以访问 Secret Manager 中存储的 Secret,请参阅配置 Secret。
Cloud Run 与 Cloud KMS 之间不存在任何特定的集成。
预留的环境变量
容器运行时合同中定义的环境变量会预留给系统,不得设置。需特别指出的是,PORT
环境变量会由 Cloud Run 注入容器内部,您不应自行对其进行设置。
函数的预留环境变量
Cloud Run 在部署函数时会自动设置以下运行时环境变量:
键 | 说明 |
---|---|
FUNCTION_TARGET |
预留:要执行的函数。 |
FUNCTION_SIGNATURE_TYPE |
预留:函数的类型(HTTP 函数类型为 http ,事件驱动的函数类型为 event )。 |
K_SERVICE |
预留:函数资源的名称。 |
K_REVISION |
预留:函数的版本标识符。 |
PORT |
预留:调用函数的端口。 |
其他一些环境变量是根据您的函数使用的运行时自动设置的。这些环境变量基于运行时的操作系统(例如 DEBIAN_FRONTEND
、SHLVL
或 PATH
)以及语言运行时(例如 NODE_ENV
、VIRTUAL_ENV
或 GOPATH
)。
环境提供的环境变量(自动设置的环境变量除外)可能会在后续运行时版本中发生变化。我们建议的最佳做法是,不要依赖或修改任何未明确设置的环境变量。
修改环境提供的环境变量可能会导致不可预知的结果。尝试修改此类环境变量的行为可能被系统阻止,导致意外的后果(例如函数无法启动)。最佳做法是考虑为所有环境变量添加一个唯一键作为前缀,以避免冲突。
此外,您不能使用以下环境变量:
键 | 说明 |
---|---|
空 ('') | 键不能是空字符串。 |
= |
键不能包含“=”字符。 |
X_GOOGLE_ |
键不能包含 X_GOOGLE_ 前缀。 |
函数的变量大小限制
单个函数的运行时环境变量名称和值使用的字节总数限制为 32 KiB。在此整体容量内,对单个键或值没有具体限制。
对于构建环境变量,您最多可以定义 100 个变量,定义字符串 foo=bar
仅限 64 KiB。
在函数中使用可移植环境变量
适用于您的函数的环境变量有可能不适用于其他运行时环境,例如不同的语言或者特定的工具或库。另外,其他平台可能不支持这些环境变量。
为避免出现此类问题,您可以按照 POSIX 环境变量标准中的说明操作。
如果您使用 Google Cloud 控制台修改变量,则当定义的变量可能存在可移植性问题时,Google Cloud 控制台会向您发出警告,但不会阻止部署。我们建议环境变量键仅包含大写字母、数字和 <underscore>
(_
)(如可移植的字符集中所述),并且不要以数字开头。