サービスの環境変数を構成する

このページでは、Cloud Run サービスの環境変数を構成する方法について説明します。

環境変数はサービスの構成に使用できますが、データベースの認証情報や API キーなどのシークレットを保存するための方法としてはおすすめしません。機密性の高い値は、ソースコードや外部の環境変数以外の場所に保存する必要があります。シークレットを保存する場合は、Secret Manager を使用することをおすすめします。Secret Manager に保存されているシークレットにアクセスするようにサービスを構成するには、シークレットを構成するをご覧ください。

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

必要なロール

Cloud Run サービスの構成とデプロイに必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールCloud Run IAM 権限をご覧ください。Cloud Run サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限アクセスの管理をご覧ください。

環境変数の最大数と上限

Cloud Run サービスには最大 1,000 個の環境変数を設定できます。

変数の最大長は 32 KB です。

環境変数を設定する

新規サービスと既存サービスの環境変数を設定できます。--set-env-vars フラグは破壊的なアクションであり、以前に設定され新しい環境変数リストに含まれていない環境変数は削除される点に注意してください。

環境変数は特定のサービス リビジョンにバインドされ、 Google Cloud プロジェクトの他のサービスからは参照できません。

環境変数は、新しいサービスを作成するとき、または新しいリビジョンをデプロイするときに、 Google Cloud コンソール、gcloud CLI、または YAML ファイルを使用して設定できます。

コンソール

  1. Google Cloud コンソールで Cloud Run に移動します。

    Cloud Run に移動

  2. メニューから [サービス] を選択し、[コンテナをデプロイ] をクリックして新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。

  4. [コンテナ] タブをクリックします。

    画像

    • [変数を追加] をクリックして新しい変数を追加し、[名前] フィールドと [] フィールドに変数名と値を指定します。
  5. [作成] または [デプロイ] をクリックします。

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 がすでに作成されている必要があります。URL の形式は 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 属性の下にある name 属性と value 属性を更新します。

    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 がすでに作成されている必要があります。URL の形式は 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. [コンテナ] タブをクリックします。

  4. [変数とシークレット] タブで、[名前] フィールドまたは [] フィールドを編集し、[完了] をクリックします。

  5. [デプロイ] をクリックします。

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. [変更内容] タブをクリックします。

  4. 右側の詳細パネルの [コンテナ] タブに、環境変数の設定が表示されます。

gcloud

  1. 次のコマンドを使用します。

    gcloud run services describe SERVICE
  2. 返された構成で、環境変数の設定を見つけます。

環境変数を削除する

既存のサービスの環境変数を削除できます。

コンソール

Google Cloud コンソールを使用して環境変数を削除するには:

  1. Google Cloud コンソールで Cloud Run に移動します。

    Cloud Run に移動

  2. リストからサービスを選択し、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. [コンテナ] タブをクリックします。

  4. [変数とシークレット] タブで、削除する環境変数の [] フィールドの左側にカーソルを移動して [削除] アイコンを表示させ、クリックします。

  5. [完了] をクリックします。

  6. [デプロイ] をクリックします。

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: 実際のサービスの名前。

ベスト プラクティス

次のセクションでは、環境変数を構成する際のベスト プラクティスの一部に重点を置いて説明します。

サービスに予約済み環境変数

コンテナ ランタイムの契約で定義されている環境変数は予約されているため、設定できません。特に、PORT 環境変数は Cloud Run によってコンテナに挿入されます。ご自身では設定しないでください。

関数のデプロイ時に予約されるその他の環境変数

Cloud Run は、関数をデプロイするときに、次のランタイム環境変数を自動的に設定します。

  • FUNCTION_TARGET: 実行される関数。
  • FUNCTION_SIGNATURE_TYPE: 関数のタイプ。HTTP 関数の場合は http、イベント ドリブン関数の場合は event です。

環境変数は、関数が使用するランタイムに応じて自動的に設定されます。これらの設定はランタイムのオペレーティング システム(DEBIAN_FRONTENDSHLVLPATH など)と言語ランタイム(NODE_ENVVIRTUAL_ENVGOPATH など)に基づいています。

環境によって提供される環境変数(自動的に設定される変数を除く)は、将来のランタイム バージョンで変更される可能性があります。明示的に設定していない環境変数に依存する、またはそれらの変数を変更しないことをおすすめします。

環境から提供される環境変数を変更すると、予期しない結果が生じる可能性があります。こうした環境変数を変更しようとすると、ブロックされる可能性があります。最悪の場合、関数を開始できない場合もあります。競合を回避するため、環境変数の前に一意のキーを付けることをおすすめします。

無効な環境変数

次の環境変数は使用できません。

キー 説明
空('') キーは空の文字列にできません。
= キーに「=」文字を使用できません。
X_GOOGLE_ キーの接頭辞として X_GOOGLE_ を使用することはできません。

サンプルコード

コード内で環境変数にアクセスする方法を示すコードサンプルについては、エンドユーザー認証チュートリアルの Secret Manager で機密性の高い構成を処理するをご覧ください。

次のステップ

Buildpack 構成を設定するには、環境変数を使用します。言語固有の詳細については、次の Buildpack に関するドキュメントをご覧ください。

ソースからデプロイし、ビルド時に変数をカスタマイズする必要がある場合は、ビルド環境変数を設定するをご覧ください。