如何使用 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 的推送事件。我目前正在努力避免这种情况。 正如我所说,EventArc 创建了一个 PubSub 订阅。因此,如果 Cloud Run 服务不存在,PubSub 订阅会收到 HTTP 404 错误代码。该消息未得到确认,并会保留并重试最多 7 天。之后,该消息被删除。标准 pubSub 行为。以上是关于如何使用 pub sub 从 Global EventArc 触发 Cloud Run的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Dataflow 批量(有效)发布到 Pub/Sub?
如何从 Google Pub/Sub 获取 objectId、bucketId 等
如何使用 Python 从 Google Pub/Sub 可靠地提取消息?