Cloud Functions 是區域性的,這意味著運行 Cloud Function 的基礎設施位於特定區域,並由 Google 管理,以便在這些區域內的所有區域中冗餘可用。
在選擇運行函數的區域時,您的主要考慮因素應該是延遲和可用性。您通常可以選擇靠近您的使用者的區域,但您也應該考慮您的應用程式使用的其他產品和服務的位置。跨多個區域使用服務可能會影響應用程式的延遲以及定價。
支援地區
在此部分的清單中, energy_ savings_leaf圖示表示該地區的電力是低碳排放的。如需了解更多信息,請參閱Google Cloud 區域的無碳能源。
Cloud Functions 在以下區域提供1 級定價:
-
asia-east1
(台灣) -
asia-east2
(香港)僅限第一代 asia-northeast1
(東京)-
asia-northeast2
(大阪) -
europe-north1
(芬蘭) energy_ savings_leaf僅第二代 europe-west1
(比利時) energy_ savings_leaf-
europe-west2
(倫敦)僅限第一代 us-central1
(愛荷華州) energy_ savings_leaf-
us-east1
(南卡羅來納州) -
us-east4
(維吉尼亞州北部) -
us-west1
(俄勒岡州) energy_ savings_leaf
Cloud Functions 在以下區域提供2 級定價:
-
asia-east2
(香港)僅限第二代 asia-northeast3
(首爾)-
asia-southeast1
(新加坡) -
asia-southeast2
(雅加達) -
asia-south1
(孟買)僅限第二代 australia-southeast1
(雪梨)-
australia-southeast2
(墨爾本)僅限第二代 europe-central2
(華沙)-
europe-west2
(倫敦)僅限第二代 europe-west3
(法蘭克福)-
europe-west6
(蘇黎世) energy_ savings_leaf -
northamerica-northeast1
(蒙特婁) energy_ savings_leaf -
northamerica-northeast2
(多倫多) energy_ savings_leaf僅第二代 southamerica-east1
(聖保羅) energy_ savings_leaf-
southamerica-west1
(智利聖地牙哥)僅限第二代 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) 以及新函數的 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");
後台功能
後台函數採用至少一次事件傳遞語義,這意味著在某些情況下它們可能會收到重複的事件。因此,您應該將函數實作為冪等的。如果您的函數已經是冪等的,那麼您可以使用相同的事件觸發器在新區域中重新部署函數,並在驗證新函數正確接收流量後刪除舊函數。在此轉換期間,兩個函數都將接收事件。請參閱更改函數的區域,以了解更改函數區域的建議命令序列。
如果您的函數目前不是冪等的,或者其冪等性沒有擴展到區域之外,那麼我們建議您在移動函數之前先實作冪等性。
最佳區域建議因事件觸發類型而異:
觸發類型 | 地區推薦 |
---|---|
雲端Firestore | 距離 Cloud Firestore 執行個體位置最近的區域(請參閱下一節) |
即時資料庫 | 始終us-central1 |
雲端儲存 | 距離 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 的區域/多區域 | 最近的函數區域 |
---|---|
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 |