簡體   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