Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Cloud Functions のロケーション

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

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

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

  • us-central1(アイオワ)
  • us-east1(サウスカロライナ)
  • us-east4(北バージニア)
  • europe-west1(ベルギー)
  • europe-west2(ロンドン)
  • asia-east1(台湾)
  • asia-east2(香港)
  • asia-northeast1(東京)
  • asia-northeast2(大阪)

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

  • us-west2(ロサンゼルス)
  • us-west3(ソルトレイクシティ)
  • us-west4(ラスベガス)
  • northamerica-northeast1(モントリオール)
  • southamerica-east1(サンパウロ)
  • europe-west3(フランクフルト)
  • europe-west6(チューリッヒ)
  • europe-central2(ワルシャワ)
  • australia-southeast1(シドニー)
  • asia-south1(ムンバイ)
  • asia-southeast1(シンガポール)
  • asia-southeast2(ジャカルタ)
  • asia-northeast3(ソウル)

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

リージョン変更のベスト プラクティス

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

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

exports.myStorageFunction = functions
    .region('europe-west1')
    .storage
    .object()
    .onFinalize((object) => {
      // ...
    });

functions.region() でカンマ区切りの複数のリージョン文字列を渡すことで、複数のリージョンを指定できます。推奨手順の詳細については、関数のリージョンを変更するをご覧ください。

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、Firestore インスタンス、または Cloud Storage バケットとやり取りしている場合、それらのリソースのいずれかでトリガーされる関数があれば、推奨されるリージョンはそのリソースと同じリージョンです。それ以外の場合は、デフォルトのリージョン us-central1 を使用してください。Firebase Hosting に接続されている関数は us-central1 に配置する必要があります。

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

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

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

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

Cloud Firestore と Cloud Storage のリージョン / マルチリージョン 関数に最も近いリージョン
nam5 または us-central(マルチリージョン) us-central1
eur3 または europe-west(マルチリージョン) europe-west1
asia-south1(ムンバイ) asia-east2