Cloud Functions 位置

Cloud Functions 具有區域性,這表示執行函式的基礎架構位於特定區域,並由 Google 負責管理,實現這些區域內所有可用區之間的備援可用性。

選擇執行函式的區域時,主要考量重點在於延遲時間和可用性。原則上可以選擇距離使用者最近的地區,但也應考慮應用程式所用其他產品和服務的位置。如果跨多個區域使用服務,可能會影響應用程式的延遲時間和定價。

根據預設,Firebase CLI 會根據專案設定,將函式部署至特定區域。如果是事件驅動型函式,系統通常會部署至觸發資料來源所在區域的區域 (例如 Cloud Firestore 資料庫或 Cloud Storage 值區),並部署至 us-central1 做為備援。

部署完成後,您可以在 Firebase 控制台中或執行 firebase functions:list 驗證區域。如要讓函式在不同區域執行,可以變更函式區域。

支援的地區

本節清單中的 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 代

在同一專案內的特定區域中,函式名稱不可重複 (不區分大小寫),但在不同地區或專案之間,函式可共用相同名稱。

指定區域的最佳做法

根據預設,Firebase CLI 會根據專案設定,將函式部署至特定區域。如果是事件驅動型函式,系統通常會部署至觸發資料來源所在區域的區域 (例如 Cloud Firestore 資料庫或 Cloud Storage 值區),並部署至 us-central1 做為備援。

建議您設定特定區域,而不是依賴 Firebase 預設值,因為這些預設值可能會隨時間變更。設定區域時,請按照本節的建議操作,為每種觸發條件設定區域

如要設定函式執行的區域,請在函式定義中設定 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) 以及新函式網址即可。如果用戶端無法妥善處理重新導向,則可從原始函式向新函式發起新要求,經由 Proxy 將要求傳送至新函式。最後一步是確保所有用戶端都會呼叫新函式。

可呼叫函式的用戶端位置選取

關於可呼叫函式,用戶端可呼叫設定應遵循與 HTTP 函式相同的準則。用戶端也可以指定區域,如果函式在專案預設區域以外的區域執行,就應指定區域。

如要在用戶端上設定區域,請在初始化時指定所需區域:

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 值區位置的區域 (請參閱下一節)
其他 如果您在函式中與 Realtime Database 例項、Cloud Firestore 例項或 Cloud Storage bucket 互動,建議的區域與函式由其中一項資源觸發時相同。連結至 Firebase Hosting 的函式可以位於任何區域,但建議參閱無伺服器主機總覽。

根據 Cloud Firestore 和 Cloud Storage 位置選取區域

函式的可用區域不一定與 Cloud Firestore 資料庫和 Cloud Storage bucket 的可用區域完全一致。

請注意,如果函式和資源 (資料庫執行個體或 Cloud Storage bucket) 位於不同位置,延遲時間和帳單費用可能會增加。

如果系統不支援 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