我正在尝试使用 gcloud CLI 工具和 Eventarc 部署第二代 Google Cloud Function,该函数会触发特定 Firestore 文档路径中的任何写入操作(创建、更新、删除)。但是,我在指定路径模式时遇到了语法问题。
环境:
目标: 我需要云函数来触发对位于如下结构的路径中的文档的更改: MyCollection/{userId}/MySubCollection/{personId}/MyNestedCollection/{sessionId}
问题: 使用 gcloud 命令部署该函数时,遇到与 --trigger-event-filters-path-pattern 标志相关的错误。错误消息表明路径模式中的字典参数语法错误。
使用的命令:
gcloud beta functions deploy trigger_generate_insights \
--gen2 \
--runtime python312 \
--entry-point trigger_generate_insights \
--trigger-event-filters="type=google.cloud.firestore.document.v1.written" \
--trigger-event-filters-path-pattern="projects/my-project/databases/(default)/documents/MyCollection/{userId}/MySubCollection/{personId}/MyNestedCollection/{sessionId}" \
--trigger-location="us-central1" \
--region us-central1 \
--memory 128MB \
--allow-unauthenticated
错误信息:
错误:(gcloud.beta.functions.deploy)参数 --trigger-event-filters-path-pattern:dict arg 语法错误:[projects/my-project/databases/(default)/documents/MyCollection/{userId}/MySubCollection/{personId}/MyNestedCollection/{sessionId} ]。 请参阅
或gcloud topic flags-file
了解 有关提供具有特殊功能的列表或字典标志值的信息 角色。gcloud topic escaping
尝试解决: 我尝试转义花括号 {} 并在路径周围使用引号。 检查了 gcloud topic flags-file 和 gcloud topic escaping,但没有找到解决方案。
我建议查看部署示例函数的文档。这就是他们所展示的:
gcloud functions deploy FUNCTION_NAME \
--gen2 \
--runtime=RUNTIME \
--region=REGION \
--trigger-location=TRIGGER REGION \
--source=. \
--entry-point=ENTRY_POINT \
--trigger-event-filters=type=google.cloud.firestore.document.v1.written \
--trigger-event-filters=database='(default)' \
--trigger-event-filters-path-pattern=document='users/{username}'
注意两件事:
--trigger-event-filters-path-pattern
标志中的文档路径(带有通配符)与您正在使用的不同。--trigger-event-filters
来正确指定默认数据库。这两个标志都采用字典,这意味着它们各自指定一个键/值对作为标志的值。
也许您想要做的事情最好用以下方式表达:
--trigger-event-filters=type=google.cloud.firestore.document.v1.written \
--trigger-event-filters=database='(default)' \
--trigger-event-filters-path-pattern=document='MyCollection/{userId}/MySubCollection/{personId}/MyNestedCollection/{sessionId}' \