我正在将 Google Cloud Run Functions 从 v1 和 Node 12 迁移到 v2 和 Node 20。 到目前为止,我已经升级了 onSchedule 和 onMessagePublished 触发器,没有任何问题。
当尝试部署实时数据库触发器并使用 eventarc 时,事情似乎出现了问题。
这是我的测试功能代码:
const { onValueCreated } = require("firebase-functions/v2/database");
const { logger } = require("firebase-functions");
exports.testEventarc = onValueCreated(
{
ref: "/test/{id}",
},
async (event) => {
logger.info("Value created:", event.data.val());
},
);
我已经更新了 firebase-functions,我的 firebase 工具版本是 13.22.0
$ npm install --save firebase-functions@latest
$ npm install -g firebase-tools
我还尝试在部署之前重新添加项目,使用
$ firebase use --add
使用以下命令部署我的函数时,没有出现任何错误。
$ firebase deploy --only functions:testEventarc
...
✔ functions[testEventarc(us-central1)] Successful create operation.
i functions: cleaning up build files...
✔ Deploy complete!
但是 - 该功能的触发器不正确。 导航到 Google Cloud Console“Cloud Run 函数”并选择函数“testEventarc”时,触发器具有以下属性:
Eventarc trigger
Name: testeventarc-834306
Event provider: Firebase Realtime Database
Event type: google.firebase.database.ref.v1.created
Receive events from: us-central1
Service account: [email protected]
Retry on failure: Disabled
这里有三件事看起来很奇怪:
我部署的更新功能没有响应任何数据库事件,触发器似乎不正确。
我可以采取什么措施来解决这个问题并部署升级后的功能?
编辑: eventarc触发器是否需要与数据库位于同一区域? 我自己制作了一些触发器,由于我的数据库位于触发器之外的另一个区域,因此 UI 中不允许创建触发器。 部署没有警告或给出任何与此相关的错误! 触发器真的应该显示为:“未知触发器”吗? #困惑
好的,这些是我的发现!
eventarc 需要数据库和触发器位于同一区域!
这是对未使用 Eventarc 的 v1 Cloud Run Functions 的重大更改。
我自己做了一些触发因素并得出了这个结论。 我的数据库位于触发器之外的另一个区域,通过 UI 创建触发器时不允许这样做。
但是,部署没有警告或给出任何与此相关的错误!
还有;令人困惑的是,新触发器显示为“未定义触发器”并具有 v1 属性 - 但触发器现在被调用!
Eventarc trigger
Name: testeventarc-834306
Event provider: Firebase Realtime Database
Event type: google.firebase.database.ref.v1.created
Receive events from: us-central1
Service account: [email protected]
Retry on failure: Disabled
不过,一切都不太顺利——触发器不可靠和/或损坏。 它在部署时进行操纵并在已创建的节点上不稳定地触发。
已就此主题创建了另一个问题 --> Google Cloud Run Function v2 - 不稳定的触发