Eventarc:事件路由与排障

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

本页覆盖 Eventarc Standard → Cloud Run。

推荐做法#

  • 先确认 Provider、event type、Region 与 filter,再建 Trigger。

相同 CloudEvent 外层格式不代表相同业务 payload。 本例 /push 读取 Pub/Sub 的 message.data;Storage 对象事件需要按 Bucket/object 字段另写处理逻辑。

  • Trigger 调用身份与应用 runtime SA 分开;消费端按业务键去重。

常用操作#

替换为实际资源;本段不依赖 lab.env。

PROJECT_ID='REPLACE_PROJECT_ID'
REGION='REPLACE_REGION'
TRIGGER='REPLACE_TRIGGER'

gcloud eventarc triggers describe "$TRIGGER" \
  --project="$PROJECT_ID" --location="$REGION"

容易踩的坑#

  • Trigger 存在不代表投递成功:检查 conditions、目标 Invoker、日志及业务结果。
  • 不要手改 Eventarc 管理的底层 Subscription;删除后检查残留专用资源。

Scheduler / Tasks / Pub/Sub 如何选择

配置说明与完整示例(按需展开)

Eventarc Standard 将受支持的事件以 CloudEvents 格式路由到目标。本篇验证 Pub/Sub → Eventarc → Cloud Run 的一条链路。

Scheduler、Tasks、Pub/Sub、Eventarc 怎么选#

主要需求 选择 关键配置
到指定时间触发 Cloud Scheduler schedule、时区、target 身份
指定 HTTP 目标、限制派发速率和并发 Cloud Tasks Queue、目标 URL、retry、业务幂等
一个事件由多个独立系统消费 Pub/Sub Topic、各自 Subscription、ACK
把支持的事件来源按条件路由到服务 Eventarc Provider、event type、filter、destination

这些服务可以组合。触发/投递成功只证明目标接受请求,最终业务完成需查业务状态。Tasks 与 Pub/Sub 选择

创建 Trigger#

前置:综合项目的 orders-worker。此实验创建独立 topic,不与现有 orders-created push 订阅重复消费。Worker 的 /push 可读取本例 Pub/Sub CloudEvent 中的 message.data,但不能原样处理 Storage 的事件数据。

source lab.env
gcloud services enable eventarc.googleapis.com pubsub.googleapis.com run.googleapis.com
export EVENT_SA="lab-eventarc@$PROJECT_ID.iam.gserviceaccount.com"
export PROJECT_NUMBER=$(gcloud projects describe "$PROJECT_ID" --format='value(projectNumber)')
export HUMAN_EMAIL=$(gcloud config get-value account)
gcloud iam service-accounts create lab-eventarc
gcloud iam service-accounts add-iam-policy-binding "$EVENT_SA" --member="user:$HUMAN_EMAIL" --role=roles/iam.serviceAccountUser
gcloud run services add-iam-policy-binding orders-worker --region="$REGION" --member="serviceAccount:$EVENT_SA" --role=roles/run.invoker
gcloud beta services identity create --service=pubsub.googleapis.com --project="$PROJECT_ID"
gcloud iam service-accounts add-iam-policy-binding "$EVENT_SA" --member="serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com" --role=roles/iam.serviceAccountTokenCreator
gcloud pubsub topics create lab-eventarc-orders
gcloud eventarc triggers create lab-orders \
  --location="$REGION" \
  --destination-run-service=orders-worker \
  --destination-run-region="$REGION" \
  --destination-run-path=/push \
  --event-filters=type=google.cloud.pubsub.topic.v1.messagePublished \
  --transport-topic="projects/$PROJECT_ID/topics/lab-eventarc-orders" \
  --service-account="$EVENT_SA"

首次启用可能要等待 Eventarc service agent 初始化;操作者需要 Eventarc Admin 和指定 SA 的 actAs。此 Pub/Sub 直接事件不需要额外给触发身份 Eventarc Event Receiver;其他 provider 按其文档配置。官方教程

发布与验收#

export EVENT_ORDER_ID=$(python3 -c 'import uuid; print(uuid.uuid4())')
export EVENT_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
gcloud pubsub topics publish lab-eventarc-orders --message="{\"id\":\"$EVENT_ORDER_ID\",\"amount\":500,\"created_at\":\"$EVENT_TIME\"}"
gcloud eventarc triggers describe lab-orders --location="$REGION"
gcloud logging read 'resource.type="cloud_run_revision" AND jsonPayload.order_id="'"$EVENT_ORDER_ID"'"' --freshness=1h --limit=10

验收:worker 日志出现 completed,订单桶出现该 ID;重发相同消息不会重复落库。401/403 先查目标 Run Invoker、生成 token 的 service agent 和 audience;没有投递先查 trigger 状态、topic 与地域。

清理#

gcloud eventarc triggers delete lab-orders --location="$REGION"
gcloud pubsub topics delete lab-eventarc-orders
gcloud run services remove-iam-policy-binding orders-worker --region="$REGION" --member="serviceAccount:$EVENT_SA" --role=roles/run.invoker
gcloud iam service-accounts delete "$EVENT_SA"

不手工修改 Eventarc 管理的底层订阅;在删除 trigger 后检查是否残留专用传输资源。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭