![](/img/trans.png)
[英]Escaping characters in a list sent as environment variable to GCP Cloud Run
[英]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.