Knative serving で環境変数を作成して使用する方法を確認します。
環境変数を設定すると、その変数がコンテナに挿入され、コードからアクセスできるようになります。環境変数は Key-Value ペアとして設定されます。たとえば、あるサービスを実行していて、環境内で LOGGING_VERBOSE: true
が読み込まれると追加のロギングを有効にする場合を考えます。このシナリオでは、環境変数の Key-Value ペア LOGGING_VERBOSE=true
を設定します。正確なコマンドまたは UI については、以降のセクションで説明します。
予約済みの名前
コンテナ ランタイムの契約で定義されている環境変数は予約されているため、設定はできません。特に、PORT
環境変数は Knative serving によってコンテナに挿入されます。自分で設定しないでください。
サービスの環境変数を設定する
構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。
新しいサービスをデプロイするか、既存のサービスを更新してリビジョンをデプロイする際に、Google Cloud コンソール、Google Cloud CLI、または YAML ファイルを使用して環境変数を設定できます。
コンソール
Google Cloud コンソールで Knative serving に移動します。
デプロイ先の新しいサービスを構成する場合は、[サービスを作成] をクリックします。既存のサービスを構成する場合は、そのサービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
[詳細設定] で [変数とシークレット] をクリックします。
次の操作を行います。
- 変数を追加する場合は、[変数を追加] をクリックします。[名前] テキスト ボックスに変数名を入力し、[値] テキスト ボックスに値を指定します。
- 変数の値を変更する場合は、[値] テキスト ボックスの現在の値を必要な値に置き換えます。
- 1 つ以上の環境変数を削除する場合は、削除する変数の [値] テキスト ボックスの左側にカーソルを置いてごみ箱アイコンを表示し、クリックします。
[次へ] をクリックして、次のセクションに進みます。
[このサービスをトリガーする方法の構成] セクションで、サービスを呼び出すために使用する接続を選択します。
[作成] をクリックしてイメージを 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"
コマンド パラメータ オプション
- IMAGE_URL は、コンテナ イメージへの参照(
YAML
--format=export
フラグを使用して、gcloud run services describe
コマンドで既存のサービスの構成を YAML ファイルにダウンロードできます。次に YAML ファイルを変更し、gcloud run services replace
コマンドを使用してこれらの変更をデプロイします。指定した属性のみを変更する必要があります。
ローカル ワークスペースの
service.yaml
という名前のファイルにサービスの構成をダウンロードします。gcloud run services describe SERVICE --format export > service.yaml
SERVICE は、Knative serving サービスの名前に置き換えます。
ローカル ファイルで、
containers:
のenv
属性の下にあるname
とvalue
属性を更新します。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-1、VALUE-1 は、環境変数と値に置き換えます。必要に応じて、変数と値は追加できます。
次のコマンドを使用して、サービスを新しい構成に置き換えます。
gcloud run services replace service.yaml
コンテナでデフォルトの環境変数を設定する
環境変数のデフォルト値を設定するには、Dockerfile で ENV
ステートメントを使用します。
ENV KEY1=VALUE1,KEY2=VALUE2
コンテナとサービス変数の優先順位
コンテナ内でデフォルト環境変数を設定し、Knative serving サービスでも同じ名前で環境変数を設定すると、サービスに設定された値が優先されます。
Kubernetes Service のリンクを有効にする
Kubernetes Service のリンクを使用するには、サポートを手動で有効にする必要があります。数千のサービスとリビジョンが存在する Namespace でパフォーマンスの問題が確認されているため、2021 年 1 月から Kubernetes Service のリンクがデフォルトで無効になりました。
Kubernetes Service のリンクを有効にするには、次のコマンドを実行して、knative-serving/config-defaults
ConfigMap で data.enable-service-links
を true
に設定します。
kubectl patch cm -n knative-serving config-defaults -p '{"data":{"enable-service-links":"true"}}