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 |
Dallas | 第 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 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 |
europe-west4 (オランダ) |
europe-west1 |
asia-south1 (ムンバイ) |
asia-east2 |
asia-south2 (デリー) |
asia-east2 |
australia-southeast2 (メルボルン) |
australia-southeast1 |