Cloud Functions 位置

Cloud Functions 具有「地區性」,這表示執行函式的基礎架構位於特定地區,且由 Google 代管,可為這些地區內的所有區域提供備援功能。

當選擇要在哪些地區執行函式時,您的主要考量應為延遲時間與可用性。一般而言,您可以選擇較靠近使用者的地區,但也應該考量應用程式使用的其他產品和服務位置。跨多個地區使用服務可能會影響應用程式的延遲時間,以及定價

根據預設,函式會在 us-central1 地區執行。請注意,這個位置可能與事件來源 (例如 Cloud Storage 值區) 的區域不同。請參閱本頁面後續說明,瞭解如何指定函式執行的區域

支援的地區

本節中的清單中顯示 energy_savings_leaf 圖示,代表該區域的電力產生低碳排放。詳情請參閱 Google Cloud 區域適用的無碳能源相關說明。

Cloud Functions 適用於下列地區,且採第 1 層級定價

  • asia-east1 (台灣)
  • asia-east2 (香港) 僅限第 1 代
  • asia-northeast1 (東京)
  • asia-northeast2 (大阪)
  • europe-north1 (芬蘭) energy_savings_leaf 僅限第 2 代
  • europe-west1 (比利時) energy_savings_leaf
  • europe-west2 (倫敦) 第 1 代
  • us-central1 (愛荷華州) energy_savings_leaf
  • us-east1 (南卡羅來納州)
  • us-east4 (北維吉尼亞州)
  • us-west1 (奧勒岡州) energy_savings_leaf

Cloud Functions 適用於下列地區,並採第 2 層級定價

  • asia-east2 (香港) 僅限第 2 代
  • asia-northeast3 (首爾)
  • asia-southeast1 (新加坡)
  • asia-southeast2 (雅加達)
  • asia-south1 (孟買) 僅限第 2 代
  • australia-southeast1 (雪梨)
  • australia-southeast2 (墨爾本) 僅限第 2 代
  • europe-central2 (華沙)
  • europe-west2 (倫敦) 第 2 代
  • europe-west3 (法蘭克福)
  • europe-west6 (蘇黎世) energy_savings_leaf
  • northamerica-northeast1 (蒙特婁) energy_savings_leaf
  • northamerica-northeast2 (多倫多) energy_savings_leaf 僅限第 2 代
  • southamerica-east1 (聖保羅) energy_savings_leaf
  • southamerica-west1 (聖地牙哥、智利) 僅限第 2 代
  • us-west2 (洛杉磯)
  • us-west3 (鹽湖城)
  • us-west4 (拉斯維加斯)

指定專案內指定地區中的函式必須擁有唯一 (不區分大小寫) 名稱,但跨地區或跨專案的函式可能會共用相同名稱。

指定區域的最佳做法

根據預設,函式會在 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) 及新函式的網址。如果您的用戶端無法很好地處理重新導向,您可以透過將新要求從原始函式啟動至新函式,來將要求從原始函式「經由 Proxy 傳送至」新函式。最後一步是確保所有用戶端呼叫了新函式。

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

關於可呼叫函式,用戶端可呼叫的設定應遵循與 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"];

Web


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 執行個體位置的區域 (請參閱下一節)
即時資料庫 一律為 us-central1
Cloud Storage 最靠近 Cloud Storage 值區位置的區域 (請參閱下一節)
其他 如果您在函式中與即時資料庫執行個體、Cloud Firestore 執行個體或 Cloud Storage 值區互動,則建議的區域會與其中一個資源觸發的函式相同。否則,請使用預設區域 us-central1。已連結至 Firebase 託管的函式可能位於任何區域,但如需相關建議,請參閱託管的無伺服器總覽一文。

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

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

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

以下是針對 Cloud Firestore 和 Cloud Storage 最相近的函式支援區域,適用於「不支援」同一區域的情況:

Cloud Firestore 和 Cloud Storage 的區域/多區域 距離函式最近的區域
nam5us-central (多區域) us-central1
eur3europe-west (多區域) europe-west1
europe-west4 (荷蘭) europe-west1
asia-south1 (孟買) asia-east2
asia-south2 (德里) asia-east2
australia-southeast2 (墨爾本) australia-southeast1