根据官方文档,可以设置一个云函数,当数据存储发生变化时(添加新文档等),该函数将被调用。然而,看起来这个功能是为Firestore模式定义的,除非我错过了什么。
首先,我创建了一个简单的Go函数,目的是将事件对象打印到日志中。
package dblog
import (
"context"
"fmt"
"cloud.google.com/go/functions/metadata"
)
func DbWatch(ctx context.Context, e map[string]interface{}) error {
meta, err := metadata.FromContext(ctx)
if err != nil {
return fmt.Errorf("metadata.FromContext: %v", err)
}
fmt.Printf("%#+v\n%#+v", *meta, e)
return nil
}
我将它部署为
gcloud functions deploy dbwatch --entry-point DbWatch --trigger-event providers/cloud.firestore/eventTypes/document.create --trigger-resource "projects/MYPROJECTIDHERE/databases/(default)/documents/trigger/{triggerid}" --runtime go111 --memory 128MB
到目前为止,该功能是存在的,但如果我创建一个文档,其类型为 trigger
- 根本就没有调用记录。要么是我遗漏了关于数据存储的资源规范,要么是没有实现触发器。
我知道你在Datastore模式下为Firestore文档创建的云函数并没有像预期的那样被触发。
这的确是预期的行为,正如公共文档[1]的 "限制和保证 "部分所提到的,Firestore的云函数触发器仅在本地模式下可用。
因此,您只能使用 Cloud Functions 来监控 Firestore 本机文档的变化。要使用该功能,您需要在本地模式下创建一个新的Firestore项目[2]。
[1] https:/cloud.google.comfunctionsdocscallingcloud-firestore#limitations_and_guarantees。
[2] https:/cloud.google.comdatastoredocsfirestore或datastore#choosing_a_database_mode。