首页 > 解决方案 > 如何使用 gcloud cli 为云函数设置配置变量

问题描述

我的 Firebase 默认服务帐户 ( xxxx@appspot.gserviceaccount.com ) 已删除且无法恢复。
因此,我创建了不同的服务帐户,现在我必须使用 gcloud CLI 使用
gcloud beta functions deploy FUNCTION_NAME --service-account=NEW_SERVICE_ACCOUNT命令来部署功能。

如何使用 gcloud CLI 设置 firebase 配置变量,我可以通过functions.config().

标签: firebaseconfigurationgoogle-cloud-functionsgcloud

解决方案


当您使用 Cloud Function 时,您可以在 Node 中定义可以像这样使用的环境变量

const val = process.env.KEY

要将其设置KEY=val为云功能,您可以使用 env vars setter 参数

为了重用 Firebase functions.config(),并通过查看源代码,它应该像这样工作(我没有测试)

  1. 为您的配置定义一个 JSON,如Firebase 文档的检索部分中所述
{
  "someservice": {
    "key":"THE API KEY",
    "id":"THE CLIENT ID"
  }
}
  1. 使其内联并将其存储为CLoud Functions 文件格式。环境变量的键必须是FIREBASE_CONFIG. 结果必须是这样config.yaml的(例如命名)
FIREBASE_CONFIG: '{"someservice":{"key":"THE API KEY","id":"THE CLIENT ID"}}'
  1. 将文件 env vars 添加到 Cloud Function
gcloud functions deploy --env-vars-file=config.yaml ....

注意:为什么使用文件?

很好的问题,因为您也可以使用--set-env-vars参数。2个问题

  1. 首先,您需要内联内容并跳过双引号"字符。为此,您可以这样做--set-env-vars=TEST=$(echo "'$(cat config.json | sed -z 's/\n//g')'")
  2. 第一个解决方案在您没有逗号时才有效,。使用逗号,gcloud 命令会丢失,即使您将 json 内联内容设置在简单的引号之间',它也会将其视为新的 env var 定义并失败。

因为我没有测试过,所以我很想知道这个解决方案是否有效!


推荐阅读