谷歌云功能在Python中实时设置数据库触发器



我正在尝试使用Firebase实时数据库触发器设置Google Cloud函数,但在向数据库添加文档时无法触发该函数。

我希望的是,当项目xxx下的Firebase数据库集合yyy中有一个新条目时,我希望触发Cloud Function函数-1。函数-1是默认值(如下所示(,测试运行良好。

我正在使用主控制台,并创建了一个名为function-1的函数。我可以在firebase控制台中看到功能本身:

https://console.firebase.google.com/u/0/project/xxx/functions/list

我设置的集合在xxx项目下,名为yyy,我可以在下访问它

https://console.firebase.google.com/u/0/project/xxx/database/firestore/data~2Fyyy

我在功能控制台:

https://console.cloud.google.com/functions/edit/us-central1/function-1?project=xxx

设置如下:

  • 触发器:Firebase实时数据库(Beta(
  • 事件类型:创建
  • 数据库:xxx
  • 路径:/data/yyy

Runtime是Python 3.7

代码是默认的谷歌云功能代码:

def hello_rtdb(event, context):
"""Triggered by a change to a Firebase RTDB reference.
Args:
event (dict): Event payload.
context (google.cloud.functions.Context): Metadata for the event.
"""
resource_string = context.resource
# print out the resource string that triggered the function
print(f"Function triggered by change to: {resource_string}.")
# now print out the entire event object
print(str(event))

requirements.txt为空

我在其他谷歌云函数中成功地使用了其他触发器(HTTP或PubSub(,但我无法通过数据库事件触发该函数。我已经为路径变量尝试了很多选项,但无法使其工作。

我为路径变量尝试的选项是:

  • /xxx/database/firestore/data/yyy
  • /数据库/firestore/data/yyy
  • /数据/yyy
  • /yyy
  • yyy等等

我确信我犯了一个基本的错误,但遗憾的是,文档没有帮助(可能是因为这是一件非常基本的事情(。如何以正确的方式设置?

您使用的是Google Firestore还是Firebase Firestore?我知道他们在技术上是一样的产品被掩盖,但我相信它们会引发不同的事件。这可能取决于您从Google Cloud Platform或Firebase创建了数据库。

$ gcloud functions event-types list
EVENT_PROVIDER                   EVENT_TYPE                                                EVENT_TYPE_DEFAULT  RESOURCE_TYPE       RESOURCE_OPTIONAL
google.firebase.database.ref     providers/google.firebase.database/eventTypes/ref.write   Yes                 firebase database   No
google.firestore.document        providers/cloud.firestore/eventTypes/document.write       Yes                 firestore document  No

我正在使用event_provider=google.firestore.dococument,它很有效。以下是我如何将Python函数部署到Google Cloud上。假设main.py与您的上述代码一起存在,但函数名称为hello_firestore

$ gcloud functions deploy hello_firestore --entry-point hello_firestore --runtime python37 --trigger-event providers/cloud.firestore/eventTypes/document.write --trigger-resource "projects/$GCP_PROJECT/databases/(default)/documents/$DOC_PATH"

对于Firebase Firestore,它应该是这样的,但这并没有经过测试,因为我是从GCP而不是Firebase创建Firestore的。

$ gcloud functions deploy hello_rtdb --entry-point hello_rtdb --runtime python37 --trigger-event providers/google.firebase.database/eventTypes/ref.write --trigger-resource "projects/_/instances/$GCP_PROJECT/refs/$DOC_PATH"

另一件需要注意的事情是,只有Firestore本机模式支持触发事件,如限制和保证一节中所述。

相关内容

  • 没有找到相关文章

最新更新