Cloud Functions のロケーション

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

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

Cloud Functions は、次のリージョンで利用できます。

  • us-central1(アイオワ)
  • us-east1(サウスカロライナ)
  • europe-west1(ベルギー)
  • asia-northeast1(東京)

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

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

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

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

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

推奨手順の詳細については、関数のリージョンを変更するをご覧ください。

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

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

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

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

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

Swift

lazy var functions = Functions.functions(region:"us-central1")

Objective-C

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

ウェブ


var functions = firebase.app().functions('us-central1');

Android

private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("us-central1");

C++

firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("us-central1");

Unity

firebase.Functions.FirebaseFunctions functions;

functions = Firebase.Functions.FirebaseFunctions.GetInstance("us-central1");

バックグラウンド関数

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

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

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

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

Firestore と Storage のリージョンの選択

関数のリージョンは、Firebase プロジェクトで利用可能なリージョンと正確には一致しません。Firebase プロジェクトの作成中にリージョンを指定すると、Firestore インスタンスはそのリージョン内に作成されます。また、そのリージョンは Cloud Storage バケットのデフォルトのリージョンにもなります。Firestore と Storage でトリガーされる関数に最も近い関数リージョンのマッピングを次に示します。

Firestore / Storage リージョン / マルチリージョン 最も近い関数リージョン
us-central(マルチリージョン) us-central1
us-east1(サウスカロライナ) us-east1
us-east4(バージニア北部) us-east1
northamerica-northeast1(モントリオール) us-central1
europe-west(マルチリージョン) europe-west1
europe-west2(ロンドン) europe-west1
europe-west3(フランクフルト) europe-west1
asia-northeast1(東京) asia-northeast1
asia-south1(ムンバイ) asia-northeast1
australia-southeast1(シドニー) asia-northeast1
southamerica-east1(サンパウロ) us-east1

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。