環境変数を設定する

Knative serving で環境変数を作成して使用する方法を確認します。

環境変数を設定すると、その変数がコンテナに挿入され、コードからアクセスできるようになります。環境変数は Key-Value ペアとして設定されます。たとえば、あるサービスを実行していて、環境内で LOGGING_VERBOSE: true が読み込まれると追加のロギングを有効にする場合を考えます。このシナリオでは、環境変数の Key-Value ペア LOGGING_VERBOSE=true を設定します。正確なコマンドまたは UI については、以降のセクションで説明します。

予約済みの名前

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

サービスの環境変数を設定する

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

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

コンソール

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

    Knative serving に移動

  2. デプロイ先の新しいサービスを構成する場合は、[サービスを作成] をクリックします。既存のサービスを構成する場合は、そのサービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. [詳細設定] で [変数とシークレット] をクリックします。

  4. 次の操作を行います。

    • 変数を追加する場合は、[変数を追加] をクリックします。[名前] テキスト ボックスに変数名を入力し、[] テキスト ボックスに値を指定します。
    • 変数の値を変更する場合は、[] テキスト ボックスの現在の値を必要な値に置き換えます。
    • 1 つ以上の環境変数を削除する場合は、削除する変数の [] テキスト ボックスの左側にカーソルを置いてごみ箱アイコンを表示し、クリックします。

  5. [次へ] をクリックして、次のセクションに進みます。

  6. [このサービスをトリガーする方法の構成] セクションで、サービスを呼び出すために使用する接続を選択します。

  7. [作成] をクリックしてイメージを Knative serving にデプロイし、デプロイの完了を待ちます。

コマンドライン

Google Cloud CLI を使用して、新しいサービスの環境変数を設定できます。また、既存のサービスを更新することもできます。

  • 既存のサービスの場合は、次のいずれかのパラメータを指定して gcloud run services update コマンドを実行し、環境変数を更新します。

    例:

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

    次のように置き換えます。

    • SERVICE は、実際のサービスの名前に置き換えます。
    • KEY1=VALUE1,KEY2=VALUE2 は、環境変数の名前と値のペアのカンマ区切りのリストで置き換えます。KEY に環境変数名を指定し、VALUE にその環境変数の値を指定します。複数のパラメータを指定する方法
    • コマンド パラメータ オプション

      • カンマ(,)を含む環境変数を指定する場合は、各 KEY=VALUE を別の区切り文字でエスケープする必要があります。たとえば、@ を使用する場合は、次のようにします。
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
        
      • 複数の Key-Value ペアを指定するには、読みやすくするために複数のパラメータを指定します。例:
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"
        
  • 新しいサービスの場合は、--set-env-vars パラメータを指定して gcloud run deploy コマンドを実行し、環境変数を設定します。

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

    次のように置き換えます。

    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/cloudrun/hello など)に置き換えます。
    • SERVICE は、実際のサービスの名前に置き換えます。
    • KEY1=VALUE1,KEY2=VALUE2 は、環境変数の名前と値のペアのカンマ区切りのリストで置き換えます。KEY に環境変数名を指定し、VALUE にその環境変数の値を指定します。複数のパラメータを指定する方法
    • コマンド パラメータ オプション

      • カンマ(,)を含む環境変数を指定する場合は、各 KEY=VALUE を別の区切り文字でエスケープする必要があります。たとえば、@ を使用する場合は、次のようにします。
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
        
      • 複数の Key-Value ペアを指定するには、読みやすくするために複数のパラメータを指定します。例:
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"
        

YAML

--format=export フラグを使用して、gcloud run services describe コマンドで既存のサービスの構成を YAML ファイルにダウンロードできます。次に YAML ファイルを変更し、gcloud run services replace コマンドを使用してこれらの変更をデプロイします。指定した属性のみを変更する必要があります。

  1. ローカル ワークスペースの service.yaml という名前のファイルにサービスの構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE は、Knative serving サービスの名前に置き換えます。

  2. ローカル ファイルで、containers:env 属性の下にある namevalue 属性を更新します。

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

    次のように置き換えます。

    • SERVICE は、Knative serving サービスの名前に置き換えます。
    • KEY-1VALUE-1 は、環境変数と値に置き換えます。必要に応じて、変数と値は追加できます。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

コンテナでデフォルトの環境変数を設定する

環境変数のデフォルト値を設定するには、Dockerfile で ENV ステートメントを使用します。

ENV KEY1=VALUE1,KEY2=VALUE2

コンテナとサービス変数の優先順位

コンテナ内でデフォルト環境変数を設定し、Knative serving サービスでも同じ名前で環境変数を設定すると、サービスに設定された値が優先されます。

Kubernetes Service のリンクを使用するには、サポートを手動で有効にする必要があります。数千のサービスとリビジョンが存在する Namespace でパフォーマンスの問題が確認されているため、2021 年 1 月から Kubernetes Service のリンクがデフォルトで無効になりました。

Kubernetes Service のリンクを有効にするには、次のコマンドを実行して、knative-serving/config-defaults ConfigMap で data.enable-service-linkstrue に設定します。

kubectl patch cm -n knative-serving config-defaults -p '{"data":{"enable-service-links":"true"}}