将定时函数部署到 Firebase 函数



如何将计划函数部署到 Google Firebase Functions?

我创建了一个名为

cron-notifications

我的函数代码

exports.notification_email = functions
.region('europe-west1')
.pubsub
.schedule('0 * * * *')
.timeZone('Europe/Stockholm')
.onRun(async (event) => { ... }

当我尝试使用

$ firebase deploy --only functions:notification_email 

我收到下面的错误。

错误:HTTP 错误:400,位置必须等于欧洲西部 1,因为与此项目关联的 App Engine 应用位于欧洲西部 1

我可以部署其他未安排到"欧洲西部1"的功能。我认为我的项目在欧洲西部1(我如何验证?

我还尝试直接从 GCP 云函数 Web UI 创建一个名为notification_email的函数,该函数位于欧洲西部 1,然后部署我的函数 - 覆盖它 - 结果相同。

我还尝试使用

GCLOUD 配置集功能/区域欧洲西部1

如文档中所述,结果相同。

我的 $ gclod 配置列表

[core]
account = myAccount
disable_usage_reporting = True
project = myProject
[functions]
region = europe-west1

请在这里帮助我! :)

当您在 Firebase Functions 中使用定时函数时,系统会创建一个 App Engine 实例,该实例是云调度程序正常工作所必需的。你可以在这里阅读它。

当启动这些资源以使调度程序正常工作时,它们使用默认为资源设置的位置。

Cloud

Functions for Firebase (仅限计划功能( - 如果您运行计划功能,Cloud Scheduler 需要 Google App Engine 应用;在设置过程中,系统会提示您选择项目的默认 Google Cloud Platform (GCP( 资源位置(如果在设置其他服务时尚未选择该位置(。

我认为您收到该错误是因为您指定的默认 GCP 资源位置与函数资源位置之间存在差异。

更多背景:

重要提示:Cloud Scheduler 要求项目具有 Google App Engine (GAE( 应用;在设置过程中,系统会提示您选择项目的默认 Google Cloud Platform (GCP( 资源位置。此位置将用于项目中需要位置设置的 GCP 服务,特别是默认的 Cloud Storage 存储桶和 Cloud Firestore 数据库。 设置项目的默认 GCP 资源位置时,首先要考虑要存储数据和文件的位置,其次要运行 Cloud Firestore 和 Cloud Storage 的任何触发函数的位置。设置项目的默认 GCP 资源位置后,您无法对其进行更改。

链接

如果您点击 Firebase 中项目概览旁边的齿轮,您可以看到资源所在的位置。

希望这有帮助。

最新更新