在 gcloud 中使用 Eventarc 通过 Firestore 触发器部署 Google Cloud Function 时出错

问题描述 投票:0回答:1

我正在尝试使用 gcloud CLI 工具和 Eventarc 部署第二代 Google Cloud Function,该函数会触发特定 Firestore 文档路径中的任何写入操作(创建、更新、删除)。但是,我在指定路径模式时遇到了语法问题。

环境:

  • Google 云功能(第二代)
  • 运行时:Python 3.12
  • Firestore 数据库
  • gcloud CLI 版本:465.0.0

目标: 我需要云函数来触发对位于如下结构的路径中的文档的更改: 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,但没有找到解决方案。

firebase google-cloud-platform google-cloud-firestore google-cloud-functions gcloud
1个回答
0
投票

我建议查看部署示例函数的文档。这就是他们所展示的:

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}' \
© www.soinside.com 2019 - 2024. All rights reserved.