![](/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.