Cloud Functions のロケーション

Cloud Functionsリージョナルです。つまり、関数を実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。

関数を実行するリージョンを選択するときは、レイテンシと可用性を第一に考慮してください。一般的には、ユーザーに近いリージョンを選択しますが、アプリで使用されている他のプロダクトやサービスのロケーションも考慮する必要があります。使用するサービスが複数のリージョンにまたがっていると、アプリのレイテンシだけでなく、料金にも影響します。

デフォルトでは、関数は us-central1 リージョンで実行されます。これは、Cloud Storage バケットなどのイベントソースのリージョンとは異なる場合があるので注意してください。関数の実行リージョンを指定する方法については、このページの後半をご覧ください。

サポートされるリージョン

このセクションのリストで、 energy_savings_leaf アイコンは、このリージョンの発電では二酸化炭素排出量が少ないことを示しています。詳しくは、Google Cloud の各リージョンにおけるカーボンフリー エネルギーの利用状況をご覧ください。

Tier 1 料金設定

Cloud Functions は、次のリージョンで Tier 1 の料金設定で利用できます。

リージョン ロケーション サポートされているプロダクト バージョン 二酸化炭素排出量
asia-east1 台湾 第 1 世代、第 2 世代
asia-east2 香港 第 1 世代のみ
asia-northeast1 東京 第 1 世代、第 2 世代
asia-northeast2 大阪 第 1 世代、第 2 世代
europe-north1 フィンランド 第 2 世代のみ energy_savings_leaf
europe-southwest1 マドリッド 第 2 世代のみ
europe-west1 ベルギー 第 1 世代、第 2 世代 energy_savings_leaf
europe-west4 オランダ 第 2 世代のみ
europe-west8 ミラノ 第 2 世代のみ
europe-west9 パリ 第 2 世代のみ energy_savings_leaf
me-west1 テルアビブ 第 2 世代のみ
europe-west2 ロンドン 第 1 世代のみ
us-central1 アイオワ 第 1 世代、第 2 世代 energy_savings_leaf
us-east1 サウスカロライナ 第 1 世代、第 2 世代
us-east4 北バージニア 第 1 世代、第 2 世代
us-east5 コロンバス 第 2 世代のみ
us-south1 ダラス 第 2 世代のみ
us-west1 オレゴン 第 1 世代、第 2 世代 energy_savings_leaf

Tier 2 料金設定

Cloud Functions は、次のリージョンで Tier 2 の料金設定で利用できます。

リージョン ロケーション サポートされているプロダクト バージョン 二酸化炭素排出量
asia-east2 香港 第 2 世代のみ
asia-northeast3 ソウル 第 1 世代、第 2 世代
asia-southeast1 シンガポール 第 1 世代、第 2 世代
asia-southeast2 ジャカルタ 第 1 世代、第 2 世代
asia-south1 ムンバイ 第 2 世代のみ
asia-south2 デリー(インド) 第 2 世代のみ
australia-southeast1 シドニー 第 1 世代、第 2 世代
australia-southeast2 メルボルン 第 2 世代のみ
europe-central2 ワルシャワ 第 1 世代、第 2 世代
europe-west2 ロンドン 第 2 世代のみ
europe-west3 フランクフルト 第 1 世代、第 2 世代 energy_savings_leaf
europe-west6 チューリッヒ 第 1 世代、第 2 世代 energy_savings_leaf
europe-west10 ベルリン 第 2 世代のみ
europe-west12 トリノ 第 2 世代のみ
me-central1 ドーハ 第 2 世代のみ
me-central2 Dammam 第 2 世代のみ
northamerica-northeast1 モントリオール 第 1 世代、第 2 世代 energy_savings_leaf
northamerica-northeast2 トロント 第 2 世代のみ energy_savings_leaf
southamerica-east1 サンパウロ 第 1 世代、第 2 世代 energy_savings_leaf
southamerica-west1 サンティアゴ(チリ) 第 2 世代のみ
us-west2 ロサンゼルス 第 1 世代、第 2 世代
us-west3 ソルトレイクシティ 第 1 世代、第 2 世代
us-west4 ラスベガス 第 1 世代、第 2 世代

特定のプロジェクトの特定のリージョンで使用する関数には一意の名前を付ける必要があります(大文字小文字は区別されません)。リージョンまたはプロジェクトが異なる場合、関数には同じ名前を使用できます。

リージョンを指定する際のベスト プラクティス

デフォルトでは、関数は us-central1 リージョンで実行されます。これは、Cloud Storage バケットなどのイベントソースのリージョンとは異なる場合があるので注意してください。関数の実行リージョンを指定する場合は、このセクションに記載されている関数トリガーのタイプごとの推奨事項に従ってください。

関数の実行リージョンを設定するには、次に示すように、関数定義で region パラメータを設定します。

Node.js

exports.firestoreAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

Python

# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
    pass

# After
@firestore_fn.on_document_created("my-collection/{docId}",
                                  region="asia-northeast1")
def firestore_trigger_asia(event):
    pass

region でカンマ区切りの複数のリージョン文字列を渡すことで、複数のリージョンを指定できます。また、多くのバックグラウンド トリガー タイプでリージョンを指定する場合は、リージョンとともに正しいイベント フィルタも指定する必要があります。上記の例では、これはイベントを発生させる Cloud Firestore document です。Cloud Storage トリガーの場合、イベント フィルタは bucket になります。Pub/Sub トリガーの場合は topic になります。

本番環境トラフィックを処理する関数のリージョンを変更する方法については、関数のリージョンを変更するをご覧ください。

HTTP とクライアント呼び出し可能関数

HTTP と呼び出し可能関数に関しては、最初に関数を目的のリージョンまたは最も多くの見込み顧客がいる場所に一番近いリージョンに設定してから、HTTP リクエストを新しい関数にリダイレクトするように元の関数を変更することをおすすめします(元の関数と新しい関数は同じ名前にできます)。HTTP 関数のクライアントがリダイレクトをサポートしている場合は、HTTP リダイレクト ステータス(301)と新しい関数の URL を返すように元の関数を変更します。リダイレクトにうまく対応できないクライアントの場合は、元の関数から新しい関数へリクエストをプロキシするという方法があります。これを行うには、元の関数から新しい関数に対して新しいリクエストを開始します。最終的には、すべてのクライアントが新しい関数を呼び出すようにします。

クライアントサイドでの呼び出し可能関数のロケーション選択

呼び出し可能関数については、HTTP 関数と同じガイドラインに従って、クライアントサイドの呼び出し可能関数の設定を行う必要があります。クライアントサイドでもリージョンを指定できます。us-central1 以外のリージョンで関数を実行する場合は、リージョンを指定する必要があります。

クライアントサイドでリージョンを設定するには、初期化時に目的のリージョンを指定します。

Swift

lazy var functions = Functions.functions(region:"europe-west1")

Objective-C

@property(strong, nonatomic) FIRFunctions *functions;
// ...
self.functions = [FIRFunctions functionsWithRegion:@"europe-west1"];

ウェブ


var functions = firebase.app().functions('europe-west1');

Android

private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("europe-west1");

C++

firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("europe-west1");

Unity

firebase.Functions.FirebaseFunctions functions;

functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");

バックグラウンド関数

バックグラウンド関数では、at-least-once(少なくとも 1 回)のイベント配信セマンティックを採用しています。つまり、状況によってはイベントを重複して受け取る可能性があります。そのため、関数の実装は必ずべき等にする必要があります。関数がすでにべき等になっている場合は、同じイベント トリガーを使用して新しいリージョンに関数を再デプロイし、新しい関数がトラフィックを正しく受け取っていることを確認してから古い関数を削除します。この移行中は、どちらの関数もイベントを受信します。関数のリージョンを変更するための推奨のコマンド シーケンスについては、関数のリージョンを変更するをご覧ください。

関数がべき等になっていない場合や、べき等性がリージョンを超えて拡張できない場合は、最初にべき等性を実装してから関数を移動してください。

最適なリージョンに関する推奨事項は、イベント トリガーの種類によって異なります。

トリガーのタイプ リージョンの推奨事項
Cloud Firestore Cloud Firestore インスタンス ロケーションに最も近いリージョン(次のセクションを参照)
Realtime Database 常に us-central1 です。
Cloud Storage Cloud Storage バケットの場所に最も近いリージョン(次のセクションを参照)
その他 関数内で Realtime Database インスタンス、Cloud Firestore インスタンス、または Cloud Storage バケットとやり取りしている場合、それらのリソースのいずれかでトリガーされる関数があれば、推奨されるリージョンはそのリソースと同じリージョンです。それ以外の場合は、デフォルトのリージョン us-central1 を使用してください。Firebase Hosting に接続する関数は任意のリージョンに配置できます。推奨事項については、サーバーレスのホスティングの概要をご覧ください。

Cloud FirestoreCloud Storage のロケーションに基づくリージョンの選択

関数で使用可能なリージョンは、Cloud Firestore データベースと Cloud Storage バケットで使用可能なリージョンと常に一致するわけではありません。

関数とリソース(データベース インスタンスまたは Cloud Storage バケット)が異なる場所にある場合は、レイテンシと請求額が増加する可能性があります。

同じリージョンがサポートされていない場合の、Cloud FirestoreCloud Storage で関数がサポートされる最も近いリージョンの対応表を次に示します。

Cloud FirestoreCloud Storage のリージョン/マルチリージョン 関数に最も近いリージョン
nam5 または us-central(マルチリージョン) us-central1
eur3 または europe-west(マルチリージョン) europe-west1
europe-west4(オランダ) europe-west1
asia-south1(ムンバイ) asia-east2
asia-south2(デリー) asia-east2
australia-southeast2(メルボルン) australia-southeast1