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_leafeurope-west2
(倫敦) 僅限第 1 代us-central1
(愛荷華州) energy_savings_leafus-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_leafnorthamerica-northeast1
(蒙特婁) energy_savings_leafnorthamerica-northeast2
(多倫多) energy_savings_leaf 第 2 代southamerica-east1
(聖保羅) energy_savings_leafsouthamerica-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"];
網站
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 的區域/多區域 | 最接近函式的區域 |
---|---|
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 |