Cloud Functions 位置

雲功能的區域,這意味著運行在您的雲功能位於特定區域,由谷歌管理必須跨越冗餘可用的基礎設施這些區域內的所有區域

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

雲功能可與以下地區一級定價

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

雲功能可與下列地區二級定價

  • 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")

目標-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 。還需要注意的是連接到火力地堡功能託管必須位於us-central1

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

函數的可用區域並不總是與 Cloud Firestore 數據庫和 Cloud Storage 存儲分區的可用區域完全匹配。

請注意,如果你的函數和你的資源(數據庫實例或雲存儲桶)都在不同的位置,那麼你可能會經歷輕微的延遲和結算成本

下面是雲公司的FireStore和雲存儲最接近的功能支持區域的映射,情況支持同一區域:

Cloud Firestore 和 Cloud Storage 的區域/多區域函數的最近區域
nam5us-central (多區域) us-central1
eur3europe-west (多區域) europe-west1
asia-south1 (孟買) asia-east2