Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Cloud Functions 位置

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

Cloud Functions 是區域性的,這意味著運行 Cloud Functions 的基礎設施位於特定區域,並由 Google 管理,以便在這些區域內的所有區域中冗餘可用。

在選擇運行函數的區域時,您的主要考慮因素應該是延遲和可用性。您通常可以選擇靠近用戶的區域,但您還應該考慮您的應用使用的其他產品和服務的位置。跨多個區域使用服務可能會影響您的應用程序的延遲以及定價

Cloud Functions 可在以下區域使用第 1 層定價

  • us-central1 (愛荷華州)
  • us-east1 (南卡羅來納州)
  • us-east4 (弗吉尼亞北部)
  • us-west1 (俄勒岡州)
  • europe-west1 (比利時)
  • europe-west2 (倫敦)
  • asia-east1 (台灣)
  • asia-east2 (香港)
  • asia-northeast1 (東京)
  • asia-northeast2 (大阪)

Cloud Functions 可在以下區域使用第 2 層定價

  • us-west2 (洛杉磯)
  • us-west3 (鹽湖城)
  • us-west4 (拉斯維加斯)
  • northamerica-northeast1 (蒙特利爾)
  • southamerica-east1 (聖保羅)
  • europe-west3 (法蘭克福)
  • europe-west6 (蘇黎世)
  • europe-central2 (華沙)
  • australia-southeast1 (悉尼)
  • asia-south1 (孟買)
  • asia-southeast1 (新加坡)
  • asia-southeast2 (雅加達)
  • asia-northeast3 (首爾)

給定項目中給定區域中的函數必須具有唯一(不區分大小寫)名稱,但跨區域或跨項目的函數可能共享相同的名稱。

更改區域的最佳實踐

默認情況下,函數在us-central1區域中運行。請注意,這可能與事件源的區域不同,例如 Cloud Storage 存儲分區。如果您需要更改函數運行的區域,請按照本節中針對每種函數觸發器類型的建議進行操作。

要設置函數運行的區域,請在函數定義中設置region參數,如下所示:

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

您可以通過在functions.region()中傳遞多個以逗號分隔的區域字符串來指定多個區域。有關推薦過程的更多信息,請參閱更改函數的區域

HTTP 和客戶端可調用函數

對於 HTTP 和可調用函數,我們建議您首先將您的函數設置為目標區域,或者最接近大多數預期客戶所在的位置,然後更改您的原始函數以將其 HTTP 請求重定向到新函數(它們可以具有相同的姓名)。如果您的 HTTP 函數的客戶端支持重定向,您只需更改原始函數以返回 HTTP 重定向狀態 (301) 以及新函數的 URL。如果您的客戶端不能很好地處理重定向,您可以通過從原始函數向新函數發起新請求,將請求從原始函數代理到新函數。最後一步是確保所有客戶端都在調用新函數。

可調用函數的客戶端位置選擇

關於可調用函數,客戶端可調用設置應遵循與 HTTP 函數相同的準則。客戶端也可以指定一個區域,如果函數在除us-central1之外的任何區域運行,則必須這樣做。

要在客戶端設置區域,請在初始化時指定所需區域:

迅速

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');

安卓

private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("europe-west1");

C++

firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("europe-west1");

統一

firebase.Functions.FirebaseFunctions functions;

functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");

後台功能

後台函數採用至少一次事件傳遞語義,這意味著在某些情況下它們可能會接收到重複的事件。所以,你應該實現函數是冪等的。如果您的函數已經是冪等的,那麼您可以使用相同的事件觸發器在新區域中重新部署該函數,並在您驗證新函數正確接收流量後移除舊函數。在此過渡期間,兩個函數都將接收事件。有關更改函數區域的推薦命令序列,請參閱更改函數區域。

如果您的函數當前不是冪等的,或者它的冪等性沒有超出區域,那麼我們建議您在移動函數之前先實現冪等性。

最佳區域建議因事件觸發類型而異:

觸發類型地區推薦
雲防火牆距離 Cloud Firestore 實例位置最近的區域(請參閱下一部分)
實時數據庫總是us-central1
雲儲存距離 Cloud Storage 存儲分區位置最近的區域(請參閱下一部分)
其他如果您正在與函數內的實時數據庫實例、Cloud Firestore 實例或 Cloud Storage 存儲桶進行交互,則推薦的區域與您有由這些資源之一觸發的函數相同。否則,使用us-central1的默認區域。另請注意,連接到 Firebase 託管的功能必須位於us-central1中。

根據 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
asia-south1 (孟買) asia-east2