環境変数の使用
デプロイ時、Cloud Functions では、任意の Key-Value ペアを設定できます。これらのペアは、ランタイムにコードからアクセスできるリテラル環境変数、または buildpack システムの構成情報として表示されます。環境変数は Cloud Functions のバックエンドに格納され、1 つの関数にバインドされます。また、バインドされている関数と同じライフサイクルが適用されます。
ランタイム環境変数の使用
ランタイム環境変数は、関数と一緒にデプロイされる Key-Value ペアです。これらの変数のスコープは関数で、プロジェクトの他の関数からは参照できません。ランタイム環境変数を追加または削除するには、Google Cloud CLI または Cloud Console UI を使用します。
ランタイム環境変数の設定
このセクションで説明する方法を使用して、新しい変数を設定するか、既存の変数を完全に置き換えます。追加の変更を行うには、次のセクションで説明する更新プロセス(gcloud
の --update-env-vars
フラグ)を使用します。
gcloud
Google Cloud CLI を使用してランタイム環境変数を設定するには、デプロイ時に --set-env-vars
フラグを使用します。
gcloud functions deploy FUNCTION_NAME --set-env-vars FOO=bar FLAGS ...
カンマ区切りのリストを使用して、複数のランタイム環境変数を設定することもできます。
gcloud functions deploy FUNCTION_NAME --set-env-vars FOO=bar,BAZ=boo FLAGS...
ソース管理などで構成をファイルに保存する場合は、YAML ファイルと一緒に --env-vars-file
フラグを使用します。
gcloud functions deploy FUNCTION_NAME --env-vars-file .env.yaml FLAGS...
.env.yaml
ファイルの内容は次のとおりです。
FOO: bar
BAZ: boo
上の例で、FLAGS...
は関数のデプロイ時に渡す他のオプションを表します。deploy
コマンドの詳細については、gcloud functions deploy
をご覧ください。
Cloud Console の UI
ランタイム環境変数は、関数の作成時に、Cloud Console で次のように設定できます。
Cloud Console で Functions の概要ページを開きます。
[関数を作成] をクリックします。
関数の必須フィールドを入力します。
[ランタイム、ビルド、接続の設定] セクションを開きます。
[ランタイム] タブを選択します。
[ランタイム環境] セクションで、[変数を追加] をクリックして名前と値を追加します。
既存の関数に環境変数を追加する方法については、ランタイム環境変数の更新をご覧ください。
ランタイム環境変数の更新
既存の関数のランタイム環境変数を更新することもできます。これは、ランタイム環境変数を削除せずに変更や追加を行う、非破壊的な方法です。
gcloud
Google Cloud CLI を使用して変数を更新するには、デプロイ時に --update-env-vars
フラグを使用します。
gcloud functions deploy FUNCTION_NAME --update-env-vars FOO=bar
カンマ区切りのリストを使用して、複数のランタイム環境変数を更新することもできます。
gcloud functions deploy FUNCTION_NAME --update-env-vars FOO=bar,BAZ=boo
Cloud Console の UI
Cloud Console を使用してランタイム環境変数を更新するには:
Cloud Console で Functions の概要ページを開きます。
既存の関数をクリックして、その詳細ページに移動します。
[編集] をクリックします。
[ランタイム、ビルド、接続の設定] セクションを開きます。
[ランタイム] タブを選択します。
[ランタイム環境変数] セクションで必要な変更を加えます。
ランタイム環境変数の削除
gcloud
ランタイム環境変数を個別に削除する場合は、デプロイ時に --remove-env-vars
フラグを使用します。
gcloud functions deploy FUNCTION_NAME --remove-env-vars FOO,BAZ
あるいは、--clear-env-vars
フラグを使用して、以前に設定した環境変数をすべてクリアします。
gcloud functions deploy FUNCTION_NAME --clear-env-vars
Cloud Console の UI
Cloud Console を使用してランタイム環境変数を削除するには:
Cloud Console で Functions の概要ページを開きます。
既存の関数をクリックして、その詳細ページに移動します。
[編集] をクリックします。
[ランタイム、ビルド、接続の設定] セクションを開きます。
[ランタイム] タブを選択します。
[ランタイム環境変数] セクションで、Key-Value ペアの横にあるごみ箱アイコンをクリックして削除します。
自動的に設定されるランタイム環境変数
このセクションでは、自動的に設定されるランタイム環境の一覧を示します。
Python 3.7 と Go 1.11
以下のランタイム環境変数は、Python 3.7 と Go 1.11 のランタイム用に自動的に設定されます。その他すべての Cloud Functions ランタイムは、最新のランタイムセクションで説明されているように、より限定された一連の環境変数を使用します。
キー | 説明 |
---|---|
ENTRY_POINT |
予約済み: 実行される関数 |
GCP_PROJECT |
予約済み: 現在の GCP プロジェクト ID |
GCLOUD_PROJECT |
予約済み: 現在の GCP プロジェクト ID(非推奨) |
GOOGLE_CLOUD_PROJECT |
予約済み: 未設定。ただし、内部使用のため予約済みです。 |
FUNCTION_TRIGGER_TYPE |
予約済み: 関数のトリガー種類 |
FUNCTION_NAME |
予約済み: 関数リソースの名前 |
FUNCTION_MEMORY_MB |
予約済み: 関数の最大メモリ |
FUNCTION_TIMEOUT_SEC |
予約済み: 実行タイムアウト(秒) |
FUNCTION_IDENTITY |
予約済み: 関数の現在の ID(サービス アカウント) |
FUNCTION_REGION |
予約済み: 関数のリージョン(例: us-central1 )。 |
最新のランタイム
最新のランタイムで自動的に設定される環境変数は、以前のランタイムよりも少なくなっています。前のセクションで説明したものを除くすべての言語とランタイムで使用される定義済み環境変数は、より制限されたものになります。
キー | 説明 |
---|---|
FUNCTION_TARGET |
予約済み: 実行される関数 |
FUNCTION_SIGNATURE_TYPE |
予約済み: 関数のタイプ。HTTP 関数の場合は http 、イベント ドリブン関数の場合は event です。 |
K_SERVICE |
予約済み: 関数リソースの名前 |
K_REVISION |
予約済み: 関数のバージョン ID。 |
PORT |
予約済み: 関数が呼び出されるポート。 |
gcloud functions deploy envVarMemory \
--runtime nodejs10 \
--set-env-vars FUNCTION_MEMORY_MB=2Gi \
--memory 2Gi \
--trigger-http
gcloud functions deploy envVarMemory \
--runtime nodejs16 \
--set-env-vars NODE_OPTIONS="--max_old_space_size=8192" \
--memory 8Gi \
--trigger-http
ランタイム環境変数の設定と取得の例
次のように記述して、ランタイム環境変数を設定します。
Node.js
gcloud functions deploy envVar \ --runtime nodejs16 \ --set-env-vars FOO=bar \ --trigger-http優先する Node.js のバージョンを指定するには、
--runtime
フラグに次の値を使用します。
nodejs16
(推奨)nodejs14
nodejs12
nodejs10
Python
gcloud functions deploy env_vars \ --runtime python39 \ --set-env-vars FOO=bar \ --trigger-http優先する Python バージョンを指定するには、
--runtime
フラグに次の値を使用します。
python310
(プレビュー版)python39
(推奨)python38
python37
Go
gcloud functions deploy EnvVar \ --runtime go116 \ --set-env-vars FOO=bar \ --trigger-http優先する Go バージョンを指定するには、
--runtime
フラグに次の値を使用します。
go116
(推奨)go113
go111
Java
gcloud functions deploy java-envVar-function \ --entry-point functions.EnvVars \ --runtime java11 \ --memory 512MB \ --set-env-vars FOO=bar \ --trigger-http優先する Java バージョンを指定するには、
--runtime
フラグに次の値を使用します。
java17
(プレビュー版)java11
(推奨)
C#
gcloud functions deploy csharp-envVar-function \ --entry-point EnvironmentVariables.Function \ --runtime dotnet3 \ --set-env-vars FOO=bar \ --trigger-http
Ruby
gcloud functions deploy env_vars --runtime ruby30 \ --set-env-vars FOO=bar \ --trigger-http優先する Ruby バージョンを指定するには、
--runtime
フラグに次の値を使用します。ruby30
(推奨)ruby27
ruby26
PHP
gcloud functions deploy envVar --runtime php74 \ --set-env-vars FOO=bar \ --trigger-http優先する PHP バージョンを指定するには、
--runtime
フラグに次の値を使用します。
php81
(プレビュー版)php74
(推奨)
次のように記述して、実行時にプログラムで変数にアクセスします。
Node.js
Node.js では、process.env
プロパティを使用してランタイム環境変数にアクセスします。
Python
Python では、os.environ
を使用してランタイム環境変数にアクセスします。
Go
Go では、os.Getenv()
を使用してランタイム環境変数にアクセスします。
Java
Java では、System.getenv
を使用してランタイム環境変数にアクセスします。
C#
ランタイムに環境変数にアクセスするには、Go でEnvironment.GetEnvironmentVariable
を使用します。
Ruby
ランタイムに環境変数にアクセスするには、Ruby でENV
を使用します。
PHP
実行時は、PHP のgetenv
関数を使用して環境変数にアクセスできます。
ビルド環境変数の使用
buildpacks をサポートするランタイム用のビルド環境変数を設定することもできます。
ビルド環境変数は、buildpacks に構成情報を渡す関数と一緒にデプロイされる Key-Value ペアです。たとえば、コンパイラ オプションをカスタマイズできます。これらのビルド環境変数を追加または削除するには、Google Cloud CLI または Cloud Console UI を使用します。
ビルド環境変数の設定
このセクションで説明する方法を使用して、新しい変数を設定するか、既存の変数を完全に置き換えます。追加の変更を行うには、次のセクションで説明する更新プロセス(gcloud
の --update-build-env-vars
フラグ)を使用します。
gcloud
Google Cloud CLI を使用して変数を設定するには、デプロイ時に --set-build-env-vars
フラグを使用します。
gcloud beta functions deploy FUNCTION_NAME --set-build-env-vars FOO=bar FLAGS...
カンマ区切りのリストを使用して、複数のビルド環境変数を設定することもできます。
gcloud functions deploy FUNCTION_NAME --set-build-env-vars FOO=bar,BAZ=boo FLAGS...
ソース管理などで構成をファイルに保存する場合は、YAML ファイルと一緒に --build-env-vars-file
フラグを使用します。
gcloud functions deploy FUNCTION_NAME --build-env-vars-file FILE_NAME.yaml FLAGS...
*.yaml
ファイルの内容は次のとおりです。
FOO: bar
BAZ: boo
上の例で、FLAGS...
は関数のデプロイ時に渡す他のオプションを表します。deploy
コマンドの詳細については、gcloud beta functions deploy
をご覧ください。
Cloud Console の UI
ビルド環境変数は、関数を作成するときに Cloud Console で設定することもできます。
Cloud Console で Functions の概要ページを開きます。
[関数を作成] をクリックします。
関数の必須フィールドを入力します。
[ランタイム、ビルド、接続の設定] セクションを開きます。
[ビルド] タブを選択します。
[ビルド環境変数] セクションで、[変数を追加] をクリックして名前と値を追加します。
ビルド環境変数の更新
既存の関数のビルド環境変数を更新することもできます。これは非破壊的なアプローチです。ビルド環境変数の変更または追加は行いますが、削除は行いません。
gcloud
Google Cloud CLI を使用して変数を設定するには、デプロイ時に --update-build-env-vars
フラグを使用します。
gcloud functions deploy FUNCTION_NAME --update-build-env-vars FOO=bar
カンマ区切りのリストを使用して、複数のビルド環境変数を更新することもできます。
gcloud functions deploy FUNCTION_NAME --update-build-env-vars FOO=bar,BAZ=boo
Cloud Console の UI
Cloud Console を使用してビルド環境変数を更新するには、次のようにします。
Cloud Console で Functions の概要ページを開きます。
既存の関数をクリックして、その詳細ページに移動します。
[編集] をクリックします。
[ランタイム、ビルド、接続の設定] セクションを開きます。
[ビルド] タブを選択します。
[ビルド環境変数] セクションで必要な変更を加えます。
ビルド環境変数の削除
gcloud
ビルド環境変数を個別に削除する場合は、デプロイ時に --remove-build-env-vars
フラグを使用します。
gcloud functions deploy FUNCTION_NAME --remove-build-env-vars FOO,BAZ
あるいは、--clear-build-env-vars
フラグを使用して、以前に設定したすべてのビルド環境変数をクリアします。
gcloud functions deploy FUNCTION_NAME --clear-build-env-vars
Cloud Console の UI
Cloud Console を使用してビルド環境変数を削除するには:
Cloud Console で Functions の概要ページを開きます。
既存の関数をクリックして、その詳細ページに移動します。
[編集] をクリックします。
[ランタイム、ビルド、接続の設定] セクションを開きます。
[ビルド] タブを選択します。
[ビルド環境変数] セクションで、Key-Value ペアの横にあるごみ箱アイコンをクリックして削除します。
変数のライフサイクル
すべての環境変数は Cloud Functions の関数のデプロイにバインドされています。デプロイを行うときにのみ、環境変数を設定または変更できます。なんらかの理由でデプロイに失敗すると、環境変数の変更は適用されません。環境変数を変更するには、デプロイに成功する必要があります。
ベスト プラクティスと予約済みの環境変数
環境変数は、関数が使用するランタイムに応じて自動的に設定されます。この設定はランタイムのオペレーティング システム(DEBIAN_FRONTEND
、SHLVL
、PATH
)と言語ランタイム(NODE_ENV
、VIRTUAL_ENV
、GOPATH
)で決まります。
環境によって提供される環境変数(自動的に設定される環境変数にある変数を除く)は、将来のランタイム バージョンで変更される可能性があります。明示的に設定していない環境変数に依存しないでください。また、このような変数は変更しないことをおすすめします。
環境から提供される環境変数を変更すると、予期しない結果が生じる可能性があります。こうした環境変数を変更しようとすると、ブロックされる可能性があります。最悪の場合、関数を開始できない場合もあります。競合を回避するため、環境変数の前に一意のキーを付けることをおすすめします。
また、次の環境変数は使用できません。
キー | 説明 |
---|---|
空('') | キーは空の文字列にできません。 |
= |
キーに「=」文字を使用できません。 |
X_GOOGLE_ |
キーの接頭辞として X_GOOGLE_ を使用することはできません。 |
サイズの上限
ランタイム環境変数名と個々の関数が使用する値の合計バイト数は 32 KiB に制限されています。この合計サイズ内であれば、個々のキーまたは値に上限はありません。
ビルド環境変数の場合、定義文字列 foo=bar
が 64 KiB の上限まで、最大 100 変数を定義できます。
シークレットの管理
環境変数は関数の構成に使用できますが、データベースの認証情報や API キーなどの機密情報の格納には適しません。 このような機密性の高い値は、ソースコードや外部の環境変数以外の場所に保存する必要があります。一部の実行環境やフレームワークでは、環境変数の内容がログに送信されることがあります。YAML ファイル、デプロイ スクリプト、ソース管理に重要な認証情報は保存しないでください。
シークレットを保存する場合は、シークレット管理のベスト プラクティスを確認することをおすすめします。Cloud KMS と Cloud Functions の固有の統合はありません。
ポータビリティ
現在、Cloud Functions の関数で機能する環境変数は、別のランタイム環境(別の言語や、特定のツールやライブラリなど)で動作しない可能性があります。また、別のプラットフォームで受け入れられないこともあります。
環境変数の POSIX 標準に準拠すると、このような問題を回避できます。Cloud Console で変数を編集するときに、ポータビリティに問題がある可能性がある変数を定義すると、Cloud Console から警告が表示されます(デプロイは可能です)。原則として、移植可能な文字セットで定義されているように、環境変数キーは大文字、数字、<underscore>
(_
)のみで構成し、数字で始めないことをおすすめします。