每个事件来源、事件目标和 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 项目路由事件,请参阅教程。