了解 Eventarc 位置

每个事件来源、事件目标和 Eventarc 触发器都有自己的位置。有时候这些位置必须匹配,有时候则可以不同。如需了解详情,请参阅 Eventarc 位置

来源位置

事件来源的位置通常决定了触发器位置。在以下示例中,由于 Cloud Storage 存储桶位于 europe-west1 区域,因此触发器也必须位于 europe-west1

gcloud eventarc triggers create trigger-storage \
  --destination-run-service=hello \
  --destination-run-region=us-central1 \
  --location=europe-west1 \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=my-bucket-in-europe-west1-region" \
  --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

目标位置

部署事件目标(例如 Cloud Run 服务时)时,您需要选择一个受支持的区域作为其位置。出于延迟时间和数据存放位置的考虑,通常选择与事件来源相同的区域。但这不是必需的,在前面的示例中,事件来源位于 europe-west1,而 --destination-run-region 标志表明事件目标位于 us-central1

触发器位置

此外,创建的 Eventarc 触发器的类型会影响通过 --location 标志指定的触发器的位置:

Cloud Audit Logs

借助 Cloud Audit Logs 触发器,您可以将发出审核日志的任何事件来源连接到事件目标。Cloud Audit Logs 触发器可在单区域位置使用,您也可以创建全球 Eventarc 触发器;但是,双区域和多区域位置不支持触发器。

事件来源的位置决定了触发器位置,通常是单区域位置。例如,如需使用审核日志触发器从 europe-west1 区域中的存储桶捕获 Cloud Storage 事件,请在同一位置创建触发器:

gcloud eventarc triggers create trigger-auditlog \
  --destination-run-service=hello \
  --destination-run-region=us-central1 \
  --location=europe-west1 \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

使用 Cloud Audit Logs 触发器时,由于没有按存储桶过滤,因此它将匹配 europe-west1 区域中的所有存储桶。(如需按存储桶过滤,您可以改用直接 Cloud Storage 触发器。)

或者,如需匹配双区域或多区域存储桶(如 eu),您可以使用 global 位置创建触发器,该触发器将匹配事件过滤条件匹配的所有区域中的所有存储桶:

gcloud eventarc triggers create trigger-storage \
  --destination-run-service=hello \
  --destination-run-region=us-central1 \
  --location=global \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=my-bucket-in-europe-west1-region" \
  --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Cloud Storage

Cloud Storage 触发器会响应 Cloud Storage 存储桶中的事件,包括对象创建、删除、归档和元数据更新。Cloud Storage 触发器适用于单区域、双区域和多区域位置;您无法创建全球 Eventarc 触发器。

Cloud Storage 存储桶的位置决定了 Eventarc 触发器的位置,两者必须匹配。在以下示例中,触发器位置与 Cloud Storage 存储桶(eu 多区域位置)的位置匹配:

gcloud eventarc triggers create trigger-storage \
  --destination-run-service=hello \
  --destination-run-region=us-central1 \
  --location=eu \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=my-bucket-in-eu-multi-region" \
  --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

如果存储桶区域与触发器区域不匹配,您将看到类似于以下内容的错误:

ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was
invalid: Bucket "my-bucket-in-eu-multi-region" location "eu" does not match
trigger location "europe-west1". Try again by creating the trigger in "eu".

Pub/Sub

Pub/Sub 触发器会将 Pub/Sub 主题连接到事件目标。Pub/Sub 触发器仅在单区域位置可用,您无法创建全球 Eventarc 触发器。

虽然 Pub/Sub 主题是全球性资源并且不绑定到单个区域,但在创建 Pub/Sub 触发器时,您必须使用 --location 标志为其指定区域:

gcloud eventarc triggers create trigger-pubsub \
--destination-run-service=hello \
--destination-run-region=us-central1 \
--location=us-central1 \
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
--transport-topic=projects/your-projectid/topics/your-topic

Eventarc 会配置地理围栏,以使 Pub/Sub 事件仅保留在指定位置。您也可以使用区域 Pub/Sub 服务端点发布到主题,以使所有数据保留在单个区域中。

后续步骤

  • 如需了解如何跨 Google Cloud 项目路由事件,请参阅教程