Cloud Functions のロケーション
Cloud Functions はリージョナルです。つまり、Cloud Functions を実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。
Cloud Functions を実行するリージョンを選択するときは、レイテンシと可用性を第一に考慮してください。一般的には、Cloud ファンクションのユーザーに最も近いリージョンを選択しますが、アプリで使用されている他の Google Cloud プロダクトやサービスのロケーションも考慮する必要があります。使用するサービスが複数のロケーションにまたがっていると、アプリのレイテンシだけでなく、料金にも影響します。
Tier 1 料金設定
次のリージョンでは、Cloud Functions を Tier 1 の料金設定で利用できます。
us-west1
(オレゴン)低 CO2
us-central1
(アイオワ)低 CO2
us-east1
(サウスカロライナ)us-east4
(北バージニア)europe-west1
(ベルギー)低 CO2
europe-west2
(ロンドン)asia-east1
(台湾)asia-east2
(香港)asia-northeast1
(東京)asia-northeast2
(大阪)
Tier 2 料金設定
次のリージョンでは、Cloud Functions を Tier 2 の料金設定で利用できます。
us-west2
(ロサンゼルス)us-west3
(ソルトレイクシティ)us-west4
(ラスベガス)northamerica-northeast1
(モントリオール)低 CO2
southamerica-east1
(サンパウロ)低 CO2
europe-west3
(フランクフルト)europe-west6
(チューリッヒ)低 CO2
europe-central2
(ワルシャワ)australia-southeast1
(シドニー)asia-south1
(ムンバイ)asia-southeast1
(シンガポール)asia-southeast2
(ジャカルタ)asia-northeast3
(ソウル)
関数をプロジェクト内の別のリージョンにデプロイすることもできますが、関数にリージョンを選択した後でリージョンの変更はできません。
特定のプロジェクトの特定のリージョンで使用する関数には一意の名前を付ける必要があります(大文字小文字は区別されません)。リージョンまたはプロジェクトが異なる場合、関数には同じ名前を使用できます。
Cloud Functions API の project.locations/list メソッドを使用して、最新のロケーション セットをプログラムで取得できます。
リージョンの選択
デプロイ時に、関数のリージョンを選択できます。
gcloud
Google Cloud CLI を使用している場合は、--region
フラグを使用してリージョンを指定できます。次に例を示します。
gcloud functions deploy FUNCTION_NAME --region REGION FLAGS...
REGION
は、上のいずれかのリージョンです。
上の例で、FLAGS...
は関数のデプロイ時に渡す他の引数です。deploy
コマンドの詳細については、gcloud functions deploy
をご覧ください。
Console
Cloud Console を使用している場合は、関数を作成してデプロイするときにリージョンを選択できます。
Cloud Console で、Cloud Functions の概要ページに移動します。
Cloud Functions を有効にしたプロジェクトが選択されていることを確認します。
[関数を作成] をクリックします。
[その他] メニューを展開します。
[リージョン] でリージョンを選択します。
デフォルト リージョンの設定
デフォルトのリージョンは、Google Cloud CLI を使用して次のように設定できます。
gcloud config set functions/region REGION
次に例を示します。
gcloud config set functions/region europe-west1
データ所在地
Cloud Functions では、関数の実行範囲(Scope A Compliance - 関数の実行)でデータ所在地が保証され、特定の関数は関数の呼び出しと実行のためのデータ所在地に使用されます。
このコンプライアンスは、HTTP 関数とイベント ドリブン関数の両方に適用されます。イベント ドリブン関数の場合、Cloud Functions は、アップストリーム プロダクト(トリガーしているプロダクト)が Cloud Functions にイベントを配信した時点からデータ所在地に適合します。そのため、アップストリーム プロダクト(Cloud Storage や Pub/Sub など)がデータ所在地に適合していることを確認する必要があります。
リージョン変更のベスト プラクティス
関数を配置するリージョンを変更する必要がある場合は、以下の推奨事項に従ってください。
HTTP 関数
HTTP 関数の場合は、まず HTTP 関数を宛先のリージョン(同じ名前でもかまいません)に再度デプロイし、HTTP リクエストを新しい関数にリダイレクトするように元の関数を変更することをおすすめします。HTTP 関数のクライアントがリダイレクトをサポートしている場合は、HTTP リダイレクト ステータス(301
)と新しい関数の URL を返すように元の関数を変更します。リダイレクトにうまく対応できないクライアントの場合は、元の関数から新しい関数へリクエストをプロキシするという方法があります。これを行うには、元の関数から新しい関数に対して新しいリクエストを開始します。最終的には、すべてのクライアントが新しい関数を呼び出すようにします。
イベント ドリブン関数
イベント ドリブン関数では、at-least-once(少なくとも 1 回)のイベント配信セマンティックを採用しています。つまり、状況によってはイベントを重複して受け取る可能性があるため、実装は必ずべき等にする必要があります。関数がすでにべき等になっている場合は、同じイベント トリガーを使用して新しいリージョンに関数を再デプロイし、新しい関数がトラフィックを正しく受け取っていることを確認してから古い関数を削除します。この移行中は、どちらの関数もイベントを受信します。
関数が正しくべき等になっていない場合や、べき等性がリージョンを超えて拡張できない場合は、最初にべき等性を実装してから関数を移動してください。