設定服務的環境變數

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

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

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

必要的角色

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

  • Cloud Run 服務中的 Cloud Run 開發人員 (roles/run.developer)
  • 服務身分中的「服務帳戶使用者」 (roles/iam.serviceAccountUser)

如需與 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. 從選單中選取「Services」(服務),然後按一下「Deploy container」(部署容器),即可設定新的服務。如果您要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

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

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

    圖片

    • 按一下「Add Variable」新增變數,然後在「Name」和「Value」欄位中分別指定變數名稱和值。
  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. 從清單中選取服務,然後按一下「編輯並部署新版本」

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

  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. 在右側的詳細資料面板中,「環境變數」設定會列在「容器」分頁下方。

gcloud

  1. 使用下列指令:

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

刪除環境變數

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

主控台

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

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

    前往 Cloud Run

  2. 從清單中選取服務,然後按一下「編輯並部署新版本」

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

  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 處理敏感設定」一節,這節位於「使用者驗證」教學課程。

後續步驟

您可以使用環境變數設定Buildpack。如需語言專屬詳細資訊,請參閱以下 buildpack 說明文件:

如果您是從原始碼部署,且需要在建構期間自訂變數,請參閱「設定建構環境變數」。