環境変数を構成する(第 1 世代)

Cloud Run functions とともに任意の Key-Value ペアをデプロイできます。これらのペアは、実行時にコードからアクセスできるリテラル環境変数、または Google Cloud の Buildpack の構成情報として関数で使用できます。

環境変数は 1 つの関数にバインドされ、Google Cloud プロジェクトの他の関数からは参照できません。各変数は Cloud Run functions のバックエンドに保存され、バインドされている関数と同じライフサイクルが適用されます。

ランタイム環境変数を追加または削除するには、Google Cloud CLI または Google Cloud コンソールを使用します。

ランタイム環境変数の設定

このセクションで説明する方法を使用して、新しい変数を設定するか、既存の変数を完全に置き換えます。追加の変更を行うには、次のセクションで説明する更新プロセスを使用します。

gcloud

Google Cloud CLI を使用してランタイム環境変数を設定するには、デプロイ時に --set-env-vars フラグを使用します。

gcloud functions deploy --no-gen2 FUNCTION_NAME --set-env-vars FOO=bar FLAGS ...

カンマ区切りのリストを使用して、複数のランタイム環境変数を設定することもできます。

gcloud functions deploy --no-gen2 FUNCTION_NAME --set-env-vars FOO=bar,BAZ=boo FLAGS...

ソース管理などで構成をファイルに保存する場合は、YAML ファイルと一緒に --env-vars-file フラグを使用します。

gcloud functions deploy --no-gen2 FUNCTION_NAME --env-vars-file .env.yaml FLAGS...

.env.yaml ファイルの内容は次のとおりです。

 FOO: bar
 BAZ: boo

上の例で、FLAGS... は関数のデプロイ時に渡す他のオプションを表します。deploy コマンドの詳細については、gcloud functions deploy をご覧ください。

Google Cloud コンソール UI

ランタイム環境変数は、関数の作成時に、Google Cloud コンソールで次のように設定できます。

  1. Google Cloud コンソールで関数の概要ページを開きます。

    Cloud Run functions の概要ページに移動

  2. [関数を作成] をクリックします。

  3. 関数の必須フィールドを入力します。

  4. [ランタイム、ビルド、接続の設定] セクションを開きます。

  5. [ランタイム] タブを選択します。

  6. [ランタイム環境] セクションで、[変数を追加] をクリックして名前と値を追加します。

    既存の関数に環境変数を追加する方法については、ランタイム環境変数の更新をご覧ください。

ランタイム環境変数の更新

既存の関数のランタイム環境変数を更新することもできます。これは、ランタイム環境変数を削除せずに変更や追加を行う、非破壊的な方法です。

gcloud

Google Cloud CLI を使用して変数を更新するには、デプロイ時に --update-env-vars フラグを使用します。

gcloud functions deploy FUNCTION_NAME --no-gen2 --update-env-vars FOO=bar

カンマ区切りのリストを使用して、複数のランタイム環境変数を更新することもできます。

gcloud functions deploy FUNCTION_NAME --no-gen2 --update-env-vars FOO=bar,BAZ=boo

Google Cloud コンソール UI

Google Cloud コンソールを使用してランタイム環境変数を更新するには:

  1. Google Cloud コンソールで関数の概要ページを開きます。

    Cloud Run functions の概要ページに移動

  2. 既存の関数をクリックして、その詳細ページに移動します。

  3. [編集] をクリックします。

  4. [ランタイム、ビルド、接続の設定] セクションを開きます。

  5. [ランタイム] タブを選択します。

  6. [ランタイム環境変数] セクションで必要な変更を加えます。

ランタイム環境変数の削除

gcloud

ランタイム環境変数を個別に削除する場合は、デプロイ時に --remove-env-vars フラグを使用します。

gcloud functions deploy FUNCTION_NAME --no-gen2 --remove-env-vars FOO,BAZ

あるいは、--clear-env-vars フラグを使用して、以前に設定した環境変数をすべてクリアします。

gcloud functions deploy FUNCTION_NAME --no-gen2 --clear-env-vars

Google Cloud コンソール UI

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

  1. Google Cloud コンソールで関数の概要ページを開きます。

    Cloud Run functions の概要ページに移動

  2. 既存の関数をクリックして、その詳細ページに移動します。

  3. [編集] をクリックします。

  4. [ランタイム、ビルド、接続の設定] セクションを開きます。

  5. [ランタイム] タブを選択します。

  6. [ランタイム環境変数] セクションで、Key-Value ペアの横にあるごみ箱アイコンをクリックして削除します。

自動的に設定されるランタイム環境変数

このセクションでは、自動的に設定されるランタイム環境の一覧を示します。

キー 説明
FUNCTION_TARGET 予約済み: 実行される関数
FUNCTION_SIGNATURE_TYPE 予約済み: 関数のタイプ。HTTP 関数の場合は http、イベント ドリブン関数の場合は event です。
K_SERVICE 予約済み: 関数リソースの名前
K_REVISION 予約済み: 関数のバージョン ID。
PORT 予約済み: 関数が呼び出されるポート。
gcloud functions deploy envVarMemory \
--no-gen2 \
--runtime nodejs10 \
--set-env-vars FUNCTION_MEMORY_MB=2Gi \
--memory 2Gi \
--trigger-http

ランタイム環境変数の設定と取得の例

次のように記述して、ランタイム環境変数を設定します。

Node.js

gcloud functions deploy envVar \
--runtime nodejs20 \
--set-env-vars FOO=bar \
--trigger-http

サポートされている Node.js バージョンのランタイム ID を指定して関数を実行するには、--runtime フラグを使用します。

Python

gcloud functions deploy env_vars \
--runtime python312 \
--set-env-vars FOO=bar \
--trigger-http

サポートされている Python バージョンのランタイム ID を指定して関数を実行するには、--runtime フラグを使用します。

Go

gcloud functions deploy EnvVar \
--runtime go121 \
--set-env-vars FOO=bar \
--trigger-http

サポートされている Go バージョンのランタイム ID を指定して関数を実行するには、--runtime フラグを使用します。

Java

gcloud functions deploy java-envVar-function \
--entry-point functions.EnvVars \
--runtime java17 \
--memory 512MB \
--set-env-vars FOO=bar \
--trigger-http

サポートされている Java バージョンのランタイム ID を指定して関数を実行するには、--runtime フラグを使用します。

C#

gcloud functions deploy csharp-envVar-function \
--entry-point EnvironmentVariables.Function \
--runtime dotnet6 \
--set-env-vars FOO=bar \
--trigger-http

サポートされている .NET バージョンのランタイム ID を指定して関数を実行するには、--runtime フラグを使用します。

Ruby

gcloud functions deploy env_vars --runtime ruby32 \
--set-env-vars FOO=bar \
--trigger-http

サポートされている Ruby バージョンのランタイム ID を指定して関数を実行するには、--runtime フラグを使用します。

PHP

 gcloud functions deploy envVar --runtime php82 \
--set-env-vars FOO=bar \
--trigger-http

サポートされている PHP バージョンのランタイム ID を指定して関数を実行するには、--runtime フラグを使用します。

次のように記述して、実行時にプログラムで変数にアクセスします。

Node.js

Node.js では、process.env プロパティを使用してランタイム環境変数にアクセスします。

exports.envVar = (req, res) => {
  // Sends 'bar' as response
  res.send(process.env.FOO);
};

Python

Python では、os.environ を使用してランタイム環境変数にアクセスします。

import os


def env_vars(request):
    return os.environ.get("FOO", "Specified environment variable is not set.")

Go

Go では、os.Getenv() を使用してランタイム環境変数にアクセスします。


// Package tips contains tips for writing Cloud Functions in Go.
package tips

import (
	"fmt"
	"net/http"
	"os"
)

// EnvVar is an example of getting an environment variable in a Go function.
func EnvVar(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "FOO: %q", os.Getenv("FOO"))
}

Java

Java では、System.getenv を使用してランタイム環境変数にアクセスします。


import com.google.cloud.functions.HttpFunction;
import com.google.cloud.functions.HttpRequest;
import com.google.cloud.functions.HttpResponse;
import java.io.BufferedWriter;
import java.io.IOException;

public class EnvVars implements HttpFunction {

  // Returns the environment variable "foo" set during function deployment.
  @Override
  public void service(HttpRequest request, HttpResponse response)
      throws IOException {
    BufferedWriter writer = response.getWriter();
    String foo = System.getenv("FOO");
    if (foo == null) {
      foo = "Specified environment variable is not set.";
    }
    writer.write(foo);
  }
}

C#

ランタイムに環境変数にアクセスするには、Go で Environment.GetEnvironmentVariable を使用します。

using Google.Cloud.Functions.Framework;
using Microsoft.AspNetCore.Http;
using System;
using System.Threading.Tasks;

namespace EnvironmentVariables;

public class Function : IHttpFunction
{
    public async Task HandleAsync(HttpContext context)
    {
        string foo = Environment.GetEnvironmentVariable("FOO")
            ?? "Specified environment variable is not set.";
        await context.Response.WriteAsync(foo, context.RequestAborted);
    }
}

Ruby

ランタイムに環境変数にアクセスするには、Ruby で ENV を使用します。

require "functions_framework"

FunctionsFramework.http "env_vars" do |_request|
  ENV["FOO"] || "Specified environment variable is not set."
end

PHP

実行時は、PHP の getenv 関数を使用して環境変数にアクセスできます。


use Psr\Http\Message\ServerRequestInterface;

function envVar(ServerRequestInterface $request): string
{
    return getenv('FOO') . PHP_EOL;
}

ビルド環境変数の使用

buildpacks をサポートするランタイム用のビルド環境変数を設定することもできます。

ビルド環境変数は、buildpack に構成情報を渡す関数と一緒にデプロイされる Key-Value ペアです。たとえば、コンパイラ オプションをカスタマイズできます。これらのビルド環境変数を追加または削除するには、Google Cloud CLI または Google Cloud コンソール UI を使用します。

ビルド環境変数の設定

このセクションで説明する方法を使用して、新しい変数を設定するか、既存の変数を完全に置き換えます。追加の変更を行うには、次のセクションで説明する更新プロセス(gcloud--update-build-env-vars フラグ)を使用します。

gcloud

Google Cloud CLI を使用して変数を設定するには、デプロイ時に --set-build-env-vars フラグを使用します。

gcloud beta functions deploy FUNCTION_NAME --no-gen2 --set-build-env-vars FOO=bar FLAGS...

カンマ区切りのリストを使用して、複数のビルド環境変数を設定することもできます。

gcloud functions deploy FUNCTION_NAME --no-gen2 --set-build-env-vars FOO=bar,BAZ=boo FLAGS...

ソース管理などで構成をファイルに保存する場合は、YAML ファイルと一緒に --build-env-vars-file フラグを使用します。

gcloud functions deploy FUNCTION_NAME --no-gen2 --build-env-vars-file FILE_NAME.yaml FLAGS...

*.yaml ファイルの内容は次のとおりです。

 FOO: bar
 BAZ: boo

上の例で、FLAGS... は関数のデプロイ時に渡す他のオプションを表します。deploy コマンドの詳細については、gcloud beta functions deploy をご覧ください。

Google Cloud コンソール UI

ビルド環境変数は、関数を作成するときに Google Cloud コンソールで設定することもできます。

  1. Google Cloud コンソールで関数の概要ページを開きます。

    Cloud Run functions の概要ページに移動

  2. [関数を作成] をクリックします。

  3. 関数の必須フィールドを入力します。

  4. [ランタイム、ビルド、接続の設定] セクションを開きます。

  5. [ビルド] タブを選択します。

  6. [ビルド環境変数] セクションで、[変数を追加] をクリックして名前と値を追加します。

ビルド環境変数の更新

既存の関数のビルド環境変数を更新することもできます。これは非破壊的なアプローチです。ビルド環境変数の変更または追加は行いますが、削除は行いません。

gcloud

Google Cloud CLI を使用して変数を設定するには、デプロイ時に --update-build-env-vars フラグを使用します。

gcloud functions deploy FUNCTION_NAME --no-gen2 --update-build-env-vars FOO=bar

カンマ区切りのリストを使用して、複数のビルド環境変数を更新することもできます。

gcloud functions deploy FUNCTION_NAME --no-gen2 --update-build-env-vars FOO=bar,BAZ=boo

Google Cloud コンソール UI

Google Cloud コンソールを使用してビルド環境変数を更新するには:

  1. Google Cloud コンソールで関数の概要ページを開きます。

    Cloud Run functions の概要ページに移動

  2. 既存の関数をクリックして、その詳細ページに移動します。

  3. [編集] をクリックします。

  4. [ランタイム、ビルド、接続の設定] セクションを開きます。

  5. [ビルド] タブを選択します。

  6. [ビルド環境変数] セクションで必要な変更を加えます。

ビルド環境変数の削除

gcloud

ビルド環境変数を個別に削除する場合は、デプロイ時に --remove-build-env-vars フラグを使用します。

gcloud functions deploy FUNCTION_NAME --no-gen2 --remove-build-env-vars FOO,BAZ

あるいは、--clear-build-env-vars フラグを使用して、以前に設定したすべてのビルド環境変数をクリアします。

gcloud functions deploy FUNCTION_NAME --no-gen2 --clear-build-env-vars

Google Cloud コンソール UI

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

  1. Google Cloud コンソールで関数の概要ページを開きます。

    Cloud Run functions の概要ページに移動

  2. 既存の関数をクリックして、その詳細ページに移動します。

  3. [編集] をクリックします。

  4. [ランタイム、ビルド、接続の設定] セクションを開きます。

  5. [ビルド] タブを選択します。

  6. [ビルド環境変数] セクションで、Key-Value ペアの横にあるごみ箱アイコンをクリックして削除します。

変数のライフサイクル

すべての環境変数は Cloud Run 関数のデプロイにバインドされています。デプロイを行うときにのみ、環境変数を設定または変更できます。なんらかの理由でデプロイに失敗すると、環境変数の変更は適用されません。環境変数を変更するには、デプロイに成功する必要があります。

ベスト プラクティスと予約済みの環境変数

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

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

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

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

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

サイズの上限

ランタイム環境変数名と個々の関数が使用する値の合計バイト数は 32 KiB に制限されています。この合計サイズ内であれば、個々のキーまたは値に上限はありません。

ビルド環境変数の場合、定義文字列 foo=bar が 64 KiB の上限まで、最大 100 変数を定義できます。

シークレットの管理

環境変数は関数の構成に使用できますが、データベースの認証情報や API キーなどの機密情報の格納には適しません。 このような機密性の高い値は、ソースコードや外部の環境変数以外の場所に保存する必要があります。一部の実行環境やフレームワークでは、環境変数の内容がログに送信されることがあります。YAML ファイル、デプロイ スクリプト、ソース管理に重要な認証情報は保存しないでください。

シークレットを保存する場合は、Secret Manager を使用することをおすすめします。Secret Manager に保存されているシークレットにアクセスするように Cloud Run functions を構成するには、シークレットを構成するをご覧ください。Cloud KMS と Cloud Run 関数の固有の統合はありません。

ポータビリティ

現在、Cloud Run 関数で機能する環境変数は、別のランタイム環境(別の言語や、特定のツールやライブラリなど)で動作しない可能性があります。また、別のプラットフォームで受け入れられないこともあります。

環境変数の POSIX 標準に準拠すると、このような問題を回避できます。Google Cloud コンソールを使用して変数を編集する場合、ポータビリティに問題がある可能性がある変数を定義すると、Google Cloud コンソールから警告が表示されます(デプロイは可能です)。原則として、移植可能な文字セットで定義されているように、環境変数キーは大文字、数字、<underscore>_)のみで構成し、数字で始めないことをおすすめします。