設定服務的環境變數

本頁說明如何為 Cloud Run 服務設定環境變數。

您可以使用環境變數進行服務設定,但我們不建議使用環境變數儲存資料庫憑證或 API 金鑰等密鑰。機密值應儲存在原始碼和環境變數以外的位置。建議您使用 Secret Manager 儲存密鑰。 如要設定服務來存取 Secret Manager 中儲存的密鑰,請參閱「設定密鑰」。

變更任何設定都會建立新的修訂版本。除非您明確做出更新,變更這項設定,否則後續的修訂版本也會自動取得這個設定。

必要的角色

如要取得設定及部署 Cloud Run 服務所需的權限,請要求管理員授予下列 IAM 角色:

如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色Cloud Run IAM 權限。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限管理存取權

環境變數數量上限和限制

您最多可以為 Cloud Run 服務設定 1000 個環境變數。

變數長度上限為 32 Kb。

設定環境變數

您可以為新服務和現有服務設定環境變數。請注意,--set-env-vars 旗標是破壞性動作,會刪除先前設定的環境變數,但新環境變數清單中不包含這些變數。

環境變數會繫結至特定服務修訂版本,且不會顯示在 Google Cloud 專案中的其他服務。

您在建立新服務部署新版本時,可以使用 Google Cloud 控制台、gcloud CLI 或 YAML 檔案設定環境變數:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從選單中選取「服務」,然後按一下「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  3. 如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。

  4. 按一下「容器」分頁標籤。

    圖片

    • 按一下「新增變數」新增變數,然後在「名稱」和「值」欄位中指定變數名稱和值。
  5. 按一下 [Create] (建立) 或 [Deploy] (部署)

gcloud

如要在部署服務時指定環境變數,請使用 --set-env-vars 標記:

gcloud run deploy SERVICE --image IMAGE_URL --set-env-vars KEY1=VALUE1,KEY2=VALUE2

取代:

  • SERVICE 改為您的服務名稱。
  • KEY1=VALUE1,KEY2=VALUE2,並以逗號分隔變數名稱和值。
  • IMAGE_URL,並參照容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

如要在更新服務時指定環境變數,請使用 --set-env-vars 標記:

gcloud run services update SERVICE --image IMAGE_URL --set-env-vars KEY1=VALUE1,KEY2=VALUE2

設定多個環境變數

如果您有許多無法以 KEY1=VALUE1,KEY2=VALUE2 格式列出的環境變數,可以多次重複 --set-env-vars 旗標:
   [...]
   --set-env-vars "KEY1=VALUE1" \
   --set-env-vars "KEY2=VALUE2" \
   --set-env-vars "KEY3=VALUE3"

逸出半形逗號字元

由於半形逗號字元 , 用於分割環境變數,如果環境變數的值包含半形逗號字元,您需要指定其他分隔符號字元 (例如 @),藉此逸出這些分隔符號:
--set-env-vars "^@^KEY1=value1,value2,value3@KEY2=..."

YAML

  1. 如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 containers:env 屬性中的 namevalue 屬性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE
            env:
            - name: KEY-1
              value: VALUE-1
            - name: KEY-N
              value: VALUE-N

    取代

    • SERVICE 改為 Cloud Run 服務名稱
    • IMAGE_URL,並參照容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • KEY-1VALUE-1,並提供環境變數和值。視需要新增更多變數和值。
    • REVISION,並提供新的修訂版本名稱,或刪除該名稱 (如有)。如果您提供新的修訂版本名稱,則必須符合下列條件:
      • 開頭為「SERVICE-
      • 只能包含小寫字母、數字和 -
      • 結尾不是 -
      • 不超過 63 個半形字元
  3. 使用下列指令建立或更新服務:

    gcloud run services replace service.yaml

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_service 資源:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-env-var"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      # Environment variables
      env {
        name  = "foo"
        value = "bar"
      }
      env {
        name  = "baz"
        value = "quux"
      }
    }
  }
}

上述 google_cloud_run_v2_service 資源會將 foo 環境變數設為 bar,並將 baz 環境變數設為 quux。視需要更新環境變數。

在容器中設定預設環境變數

您可以在 Dockerfile 中使用 ENV 陳述式,為環境變數設定預設值:

ENV KEY1=VALUE1,KEY2=VALUE2

優先順序:容器變數與服務變數

如果您在容器中設定預設環境變數,並在 Cloud Run 服務中設定同名環境變數,系統會優先採用服務中設定的值。

更新環境變數

您可以更新現有服務的環境變數。這是一種非破壞性方法,可變更或新增環境變數,但不會刪除先前設定的環境變數。

主控台

如要使用 Google Cloud 控制台更新環境變數,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從清單中選取服務,然後按一下「Edit and deploy new revision」(編輯及部署新版本)

  3. 按一下「容器」分頁標籤。

  4. 在「變數和密鑰」分頁中,編輯「名稱」或「值」欄位,然後按一下「完成」

  5. 按一下 [Deploy] (部署)

gcloud

如要更新現有服務的環境變數,請使用 --update-env-vars 旗標:

gcloud run services update SERVICE --update-env-vars KEY1=VALUE1,KEY2=VALUE2

取代:

  • SERVICE 改為您的服務名稱。
  • KEY1=VALUE1,KEY2=VALUE2,並以逗號分隔變數名稱和值。

如要更新現有多區域服務的環境變數,請使用 gcloud beta run multi-region-services update 指令。

查看環境變數設定

如要查看 Cloud Run 服務目前的環境變數設定:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 按一下感興趣的服務,開啟「服務詳細資料」頁面。

  3. 按一下「Revisions」(修訂版本) 分頁標籤。

  4. 在右側的詳細資料面板中,環境變數設定會列在「Container」(容器) 分頁下方。

gcloud

  1. 使用下列指令:

    gcloud run services describe SERVICE
  2. 在傳回的設定中找出環境變數設定。

刪除環境變數

您可以刪除現有服務的環境變數。

主控台

如要使用 Google Cloud 控制台刪除環境變數,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從清單中選取服務,然後按一下「Edit and deploy new revision」(編輯及部署新版本)

  3. 按一下「容器」分頁標籤。

  4. 在「Variables and secrets」(變數與密鑰) 分頁標籤中,將游標移至要移除的環境變數「Value」(值) 欄位左側,顯示「Delete」(刪除) 圖示,然後按一下該圖示。

  5. 按一下 [完成]

  6. 按一下 [Deploy] (部署)

gcloud

如要選擇性移除現有服務的環境變數,請使用 --remove-env-vars 旗標:

gcloud run services update SERVICE --remove-env-vars KEY1,KEY2

取代:

  • SERVICE 改為您的服務名稱。
  • KEY1,KEY2,並以半形逗號分隔變數名稱。

或者,您也可以使用 --clear-env-vars 標記,清除先前設定的所有環境變數:

gcloud run services update SERVICE --clear-env-vars

取代:

  • SERVICE 改為您的服務名稱。

最佳做法

下一節將說明設定環境變數的最佳做法。

服務專用的保留環境變數

系統會預留容器執行階段合約中定義的環境變數,您無法設定這些變數。尤其 Cloud Run 會將 PORT 環境變數注入您的容器,因此您不應自行設定這個變數。

部署函式時的其他保留環境變數

部署函式時,Cloud Run 會自動設定下列執行階段環境變數:

  • FUNCTION_TARGET:要執行的函式。
  • FUNCTION_SIGNATURE_TYPE:函式類型:HTTP 函式為 http,事件驅動函式為 event

系統會根據函式使用的執行階段自動設定一些額外的環境變數。這些是根據執行階段的作業系統 (例如 DEBIAN_FRONTENDSHLVLPATH) 和語言執行階段 (例如 NODE_ENVVIRTUAL_ENVGOPATH) 而定。

環境提供的環境變數 (自動設定的變數除外) 可能會在日後的執行階段版本中變更。最佳做法是不要依賴或修改您未明確設定的任何環境變數。

修改環境提供的環境變數可能會導致無法預測的結果。嘗試修改這類環境變數可能會遭到封鎖,更糟的是,還可能導致非預期的後果,例如函式無法啟動。最佳做法是為所有環境變數加上獨一無二的鍵做為前置字串,以免發生衝突。

無效的環境變數

您無法使用下列環境變數:

說明
空白 ('') 鍵不得為空白字串。
= 鍵不得包含「=」字元。
X_GOOGLE_ 鍵不得包含前置字元 X_GOOGLE_

程式碼範例

如需程式碼範例,瞭解如何在程式碼中存取環境變數,請參閱使用者驗證教學課程中的「使用 Secret Manager 處理機密設定」。

後續步驟

您可以使用環境變數設定建構套件設定。如需特定語言的詳細資料,請參閱下列語言的建構套件文件:

如果您是從來源部署,且需要在建構時自訂變數,請參閱「設定建構環境變數」。