繁体   English   中英

GCP Cloud Function 环境变量未设置

[英]GCP Cloud Function environment variable becomes unset

我正在使用Node.js 14并且我正在尝试将云函数的名称设置为其标签之一以用于计费目的(我希望能够使用 Billing Export 和 BigQuery 显示云 Function 成本 function)。 根据docs ,环境变量K_SERVICE将保存函数的名称,我可以像这样设置标签:

export const myFunc = functions
  .runWith({
    labels: {
      'project-id': process.env.GCLOUD_PROJECT ?? 'not-found',
      'function-name': process.env.K_SERVICE ?? 'not-found',
    },
  })
  .https.onRequest((request, response) => {
      response.json({ fname: process.env.K_SERVICE ?? 'not-found' });
  });

当我部署此代码时,它将失败并出现以下错误:

详细堆栈跟踪:错误:无效标签:myFunc。 Label 值只能包含小写字母、国际字符、数字、_ 或 -。

我需要我的函数使用驼峰式命名,所以我不能只更改名称以使用所有小写字母。 所以我更新我的代码如下:

export const myFunc = functions
  .runWith({
    labels: {
      'project-id': (process.env.GCLOUD_PROJECT ?? 'not-found').toLowerCase(),
      'function-name': (process.env.K_SERVICE ?? 'not-found').toLowerCase(),
      'control-label': 'MY-VAL'.toLowerCase(),
    },
  })
  .https.onRequest((request, response) => {
      response.json({ fname: (process.env.K_SERVICE ?? 'not-found').toLowerCase() });
  });

现在当我部署这个版本时,它部署成功,但是在执行 function describe using gcloud functions describe myFunc之后,我在标签部分得到了这个:

labels:
  control-label: my-val
  deployment-tool: cli-firebase
  function-name: not-found
  project-id: my-project-id

这里注意几件事:

  • 我的control-label label 按预期工作,以所有小写形式显示值(因此.toLowerCase()等函数在.runWith()方法中工作)
  • 我的project-id label 也按预期工作,虽然它的原始值已经是小写,但它正在正确获取环境变量并正确显示它的值,即使在应用.toLowerCase() function 之后也是如此。
  • 值得注意的是,这个问题的目的是:我的function-name label 返回为not-found ,如果未设置环境变量,这是我的默认值。

但我之前已经验证了环境变量K_SERVICE确实已设置,因为如果我不在其上应用.toLowerCase() ,部署将失败说值(正确记录其值)具有大写字母。

另请注意,当我调用 function 并将该值作为.onRequest()方法的一部分返回时,它将正确返回预期值myfunc所有小写并匹配函数名称。

那么这是怎么回事? 为什么在.toLowerCase()方法中应用.runWith() () 方法后环境变量的值会发生变化?

根据文档,行为是正常的:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM