如何使用 pub sub 从 Global EventArc 触发 Cloud Run

Posted

技术标签:

【中文标题】如何使用 pub sub 从 Global EventArc 触发 Cloud Run【英文标题】:How to trigger Cloud Run from Global EventArc using pub sub 【发布时间】:2021-10-12 12:40:25 【问题描述】:

我在 asia-south1 区域部署了一个 cloudrun 服务,并希望在 pubsub 中发布消息时从 eventarc 触发它。

但是 asia-south1 没有 eventarc,所以我决定将 event arc trigger 创建为 location=global。

下面看下面的命令。

    gcloud eventarc triggers create pubsub-trigger-new-auction-notification \
    --location=global \
    --destination-run-service=notification \
    --destination-run-path=/notify/bidder/auction \
    --destination-run-region=asia-south1 \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=projects/<my-project_id>/topics/newauction-notify \
    --service-account=cloud-run-pubsub-invoker@<my-project_id>.iam.gserviceaccount.com

但是它失败并出现以下错误,提到该类型应该是 google.cloud.audit.log.v1.written

ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was invalid: [INVALID_ARGUMENT] The request was invalid: invalid value for attribute 'type' in trigger.event_filters: only type "google.cloud.audit.log.v1.written" is allowed in global location

当我尝试使用 google.cloud.audit.log.v1.written 创建触发器时 它因缺少服务名称错误而失败。请看下文

ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was invalid: [INVALID_ARGUMENT] The request was invalid: missing required attribute "serviceName" in trigger.event_filters

我似乎找不到任何提及使用 pubsub 和云运行的全局触发器的文档。 当事件弧位置是全局的或指向正确的方向时,有人可以帮助我了解如何将基于 pubsub 的事件触发器链接到云运行吗?

谢谢

【问题讨论】:

【参考方案1】:

您可以设置支持 eventarc 的位置。您将遇到的“问题”是您将为区域间的流量付费。就是这样。


作为解决方法,您需要了解 EventArc 的工作原理。它在后台创建(但您可以在您的项目中看到)一个 pubsub 推送订阅,以在指定的 URL 调用您的 Cloud Run 服务。

您可以手动创建此推送订阅并等待您所在地区的 eventarc 可用性。

【讨论】:

感谢纪尧姆·布拉奇尔。在另一个地区创建触发器肯定有帮助。我误解了文档并认为如果目标运行区域不支持事件弧,则应该将全局用于 eventarc 触发器。我之前在寻找推送订阅,如果我没记错的话,这需要我的云运行服务始终处于启动状态以接收来自 pubsub 的推送事件。我目前正在努力避免这种情况。 正如我所说,Eve​​ntArc 创建了一个 PubSub 订阅。因此,如果 Cloud Run 服务不存在,PubSub 订阅会收到 HTTP 404 错误代码。该消息未得到确认,并会保留并重试最多 7 天。之后,该消息被删除。标准 pubSub 行为。

以上是关于如何使用 pub sub 从 Global EventArc 触发 Cloud Run的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Dataflow 批量(有效)发布到 Pub/Sub?

如何从前端移动客户端发布到 Google Pub/Sub?

如何从 Google Pub/Sub 获取 objectId、bucketId 等

如何使用 Python 从 Google Pub/Sub 可靠地提取消息?

如何使用当前的 pubsub 订阅者从 google Pub/Sub 系统获取消息

Google Cloud 上使用 Pub/Sub 的主/从模式