Cloud Functions 具有「地區性」,這表示執行函式的基礎架構位於特定地區,並由 Google 代管,可為這些地區內的所有區域提供備援功能。
選取要執行函式的區域時,主要考量因素應為延遲和可用性。一般而言,您可以選擇靠近使用者的地區,但也應該考慮應用程式使用的其他產品和服務所處的位置。如果跨多個區域使用服務,可能會影響應用程式的延遲時間和定價。
根據預設,函式會在 us-central1 區域中執行。請注意,這可能與事件來源 (例如 Cloud Storage 值區) 的區域不同。如要瞭解如何指定函式執行的區域,請參閱本頁後續內容。
支援的地區
在本節的清單中, energy_savings_leaf 圖示表示該地區的電力是以低碳排放量的方式產生。詳情請參閱「Google Cloud 區域無碳能源」。
第 1 級定價
Cloud Functions 適用於下列區域,並採用級別 1 定價:
| 區域 | 位置 | 支援的產品版本 | 二氧化碳排放量 | 
|---|---|---|---|
| africa-south1 | 約翰尼斯堡 | 僅限第 2 代 | |
| 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 | 
第 2 級定價
Cloud Functions 在下列區域提供,並採用級別 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 | 達曼 | 僅限第 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) 和新函式的網址即可。如果用戶端無法妥善處理重新導向,您可以從原始函式發起新要求,將要求代理至新函式。最後一個步驟是確保所有用戶端都呼叫新函式。
可呼叫函式的用戶端位置選取
關於可呼叫函式,用戶端可呼叫設定應遵循與 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");
背景函式
背景函式採用「至少一次」的事件傳送語意,也就是說,在某些情況下,函式可能會收到重複事件。因此,您應實作「冪等」函式。如果函式已具備等冪性,您可以在新區域中重新部署函式,並使用相同的事件觸發條件。確認新函式能正確接收流量後,即可移除舊函式。在這段期間,這兩個函式都會收到事件。如要瞭解變更函式區域的建議指令序列,請參閱變更函式區域。
如果您的函式目前並非冪等,或其冪等未延伸到地區之外,則我們建議您先實作冪等,再移動函式。
最佳區域建議會因事件觸發條件類型而異:
| 觸發條件類型 | 區域建議 | 
|---|---|
| Cloud Firestore | 最接近Cloud Firestore執行個體位置的區域 (請參閱下一節) | 
| Realtime Database | 與 Realtime Database 執行個體位於相同區域 | 
| Cloud Storage | 最接近 Cloud Storage bucket 位置的區域 (請參閱下一節) | 
| 其他 | 如果您與函式中的 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 |