Cloud Functions 是區域性的,這意味著運行您的 Cloud Functions 的基礎設施位於特定區域並由 Google 管理,以便在這些區域內的所有區域中冗餘可用。
在選擇在哪些區域運行您的函數時,您的主要考慮因素應該是延遲和可用性。您通常可以選擇靠近您的用戶的區域,但您還應該考慮您的應用程序使用的其他產品和服務的位置。跨多個區域使用服務可能會影響應用程序的延遲以及定價。
支持地區
在本部分的列表中, energy_savings_leaf圖標表示該地區的電力是低碳排放生產的。有關詳細信息,請參閱Google Cloud 區域的無碳能源。
Cloud Functions 在以下區域以第 1 層定價提供:
-
asia-east1
(台灣) -
asia-east2
(香港) -
asia-northeast1
(東京) -
asia-northeast2
(大阪) -
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-northeast3
(首爾) -
asia-southeast1
(新加坡) -
asia-southeast2
(雅加達) -
asia-south1
(孟買) -
australia-southeast1
(悉尼) -
europe-central2
(華沙) -
europe-west3
(法蘭克福) -
europe-west6
(蘇黎世) energy_savings_leaf -
northamerica-northeast1
(蒙特利爾) energy_savings_leaf -
southamerica-east1
(聖保羅) energy_savings_leaf -
us-west2
(洛杉磯) -
us-west3
(鹽湖城) -
us-west4
(拉斯維加斯)
給定項目中給定區域中的函數必須具有唯一(不區分大小寫)名稱,但跨區域或跨項目的函數可以共享相同的名稱。
更改區域的最佳做法
默認情況下,函數在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");
後台功能
後台函數採用至少一次事件傳遞語義,這意味著在某些情況下它們可能會收到重複的事件。所以,你應該實現函數是冪等的。如果您的函數已經是冪等的,那麼您可以使用相同的事件觸發器在新區域中重新部署該函數,並在驗證新函數正確接收流量後刪除舊函數。在此轉換期間,兩個函數都將接收事件。有關更改函數區域的推薦命令序列,請參閱更改函數區域。
如果你的函數目前不是冪等的,或者它的冪等性沒有超出區域,那麼我們建議你先實現冪等再移動函數。
最佳區域建議因事件觸發類型而異:
觸發器類型 | 區域推薦 |
---|---|
雲端 Firestore | 離 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 的區域/多區域 | 最近的函數區域 |
---|---|
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 |