Cloud Functions 位置

Cloud Functions 具有区域性,这意味着运行您的 Cloud Functions 函数的基础架构位于特定区域中并由 Google 托管,从而实现在该区域内的所有地区具备冗余可用性。

选择在哪个区域中运行您的 Cloud Functions 时,应主要考虑延迟和可用性。通常,您可以选择离您的 Cloud Functions 用户最近的区域,但除此之外,您还应该考虑应用使用的其他产品和服务的位置。在多个区域中使用服务可能会影响应用的延迟和价格

Cloud Functions 现已在以下区域提供:

  • us-central1(爱荷华州)
  • us-east1(南卡罗来纳州)
  • europe-west1(比利时)
  • asia-northeast1(东京)

给定项目中的函数的名称在给定区域内必须独一无二(不区分大小写),但不同区域或不同项目的函数可以重名。

更改区域的最佳做法

默认情况下,函数在 us-central1 区域中运行。请注意,这可能不同于事件来源(例如存储分区)的区域。如果需要更改函数运行的区域,请按照本节中的建议操作。

要设置函数运行的区域,请在函数定义中设置 region 参数,如下所示:

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

要详细了解推荐的操作过程,请参阅更改函数的区域

HTTP 和客户端可调用函数

对于 HTTP 和可调用函数,我们建议您首先将函数设到目标区域(或离大多数预期客户所在位置最近的位置),然后更改原始函数以将其 HTTP 请求重定向到新函数(它们可以具有相同的名称)。如果 HTTP 函数的客户端支持重定向,那么您只需更改原始函数,使其返回 HTTP 重定向状态 (301) 以及新函数的网址即可。如果您的客户端无法很好地处理重定向,则您可以从原始函数发起指向新函数的新请求,以便将请求从原始函数(代理)转发到新函数。最后一步是确保所有客户端都调用新函数。

在客户端为可调用函数选择位置

对于可调用函数,客户端的相应设置应遵循与 HTTP 函数相同的准则。客户端也可以指定区域,如果该函数在 us-central1 以外的任何区域中运行,则必须这样做。

要在客户端上设置区域,请在初始化时指定所需的区域:

Swift

lazy var functions = Functions.functions(region:"us-central1")

Objective-C

@property(strong, nonatomic) FIRFunctions *functions;
// ...
self.functions = [FIRFunctions functionsWithRegion:@"us-central1"];

网页


var functions = firebase.app().functions('us-central1');

Android

private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("us-central1");

C++

firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("us-central1");

Unity

firebase.Functions.FirebaseFunctions functions;

functions = Firebase.Functions.FirebaseFunctions.GetInstance("us-central1");

后台函数

后台函数采用“至少传送一次事件”语义,这意味着在某些情况下它们可能会收到重复事件,因此在实现此类函数时应始终遵循幂等原则。如果您的函数已遵循幂等原则,那么您可以采用相同的事件触发器在新区域中重新部署该函数,并在验证新函数能正确接收流量后移除旧函数。在此过渡期间,两个函数都将收到事件。请参阅更改函数的区域,了解更改函数区域的推荐命令序列。

如果您的函数目前不遵循幂等原则,或者它的幂等性只在其所在区域内有效,我们建议您在移动该函数之前先实现幂等性。

推荐的最佳区域因事件触发器类型而异:

触发器类型 推荐区域
Firestore 离 Firestore 实例最近的位置(参阅下一部分)
实时数据库 一律为 us-central1
存储 离存储分区最近的位置(参阅下一部分)
其他 如果您要在函数内与实时数据库、Firestore 实例或存储分区交互,则推荐的区域等同于您在由其中某项资源触发函数时会选择的区域。否则,请使用默认区域 us-central1

选择 Firestore 和存储区域

可为函数选择的区域与 Firebase 项目可用区域并不完全相同。如果您在创建 Firebase 项目时指定了某个区域,则该区域不仅与创建 Firestore 实例的区域相同,也是 Cloud Storage 存储分区的默认区域。对于由 Firestore 和存储事件触发的函数,最近的函数区域分别如下:

Firestore/存储区域/多区域 最近的函数区域
us-central 多区域 us-central1
us-east1(南卡罗来纳州) us-east1
us-east4(北弗吉尼亚) us-east1
northamerica-northeast1(蒙特利尔) us-central1
europe-west 多区域 europe-west1
europe-west2(伦敦) europe-west1
europe-west3(法兰克福) europe-west1
asia-northeast1(东京) asia-northeast1
asia-south1(孟买) asia-northeast1
australia-southeast1(悉尼) asia-northeast1
southamerica-east1(圣保罗) us-east1

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面