Eventarc 触发器声明您对某个事件或一系列事件感兴趣。如需配置事件路由,您可以为触发器指定过滤条件,包括事件来源和目标工作流。
事件通过 HTTP 请求以 CloudEvents 格式传送。Workflows 服务将事件转换为 JSON 对象(遵循 CloudEvents 规范),并将事件作为工作流运行时参数传递给工作流执行。确保事件大小不超过 512 KB。大于 Workflows 参数大小上限的事件不会触发工作流执行。
以下说明介绍如何配置事件路由,以便触发工作流执行来响应直接Cloud Storage 事件。这适用于 Cloud Storage 事件提供方。如需了解详情,请参阅支持的直接事件列表。准备创建触发器
在为目标工作流创建 Eventarc 触发器之前,请完成以下任务。
控制台
在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目。
启用 Eventarc、Eventarc Publishing、Workflows 和 Workflow Executions API。
如果适用,请启用与直接事件相关的 API。例如,对于 Cloud Storage 事件,请启用Cloud Storage API。
如果您还没有用户管理的服务账号,请创建一个,并为其授予必要的角色和权限,以便 Eventarc 可以管理目标工作流的事件。
在 Google Cloud 控制台中,转到服务账号页面。
选择您的项目。
在服务账号名称字段中,输入一个名称。Google Cloud 控制台会根据此名称填充服务账号 ID 字段。
在服务账号说明字段中,输入说明。例如
Service account for event trigger
。点击创建并继续。
如需提供适当的访问权限,请在选择角色列表中,选择要向服务账号授予的所需 Identity and Access Management (IAM) 角色。如需了解详情,请参阅 Workflows 目标的角色和权限。
如需添加其他角色,请点击
添加其他角色,然后添加其他各个角色。点击继续。
如需完成账号的创建过程,请点击完成。
向 Cloud Storage 服务代理授予 Pub/Sub Publisher 角色。通常,此服务代理为
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
。您可以检索 Cloud Storage 服务代理的电子邮件地址。在 Google Cloud 控制台中,转到 IAM 页面。
在 Cloud Storage 服务代理对应的行中,点击
修改主账号。(如果未列出服务代理,请继续执行下一步。)此时会打开修改访问权限窗格。- 点击 add添加其他角色,然后搜索 Pub/Sub Publisher 角色。
- 选择角色。
- 点击保存。
如果未列出服务代理,请点击
授予访问权限。此时会打开授予访问权限窗格。- 在新的主账号字段中,输入服务代理的电子邮件地址。
- 在选择角色列表中,搜索 Pub/Sub Publisher 角色。
- 选择角色。
- 点击保存。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
启用 Eventarc、Eventarc Publishing、Workflows 和 Workflow Executions API:
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ workflows.googleapis.com \ workflowexecutions.googleapis.com
如果适用,请启用与直接事件相关的 API。例如,对于 Cloud Storage 事件,请启用
storage.googleapis.com
。如果您还没有用户管理的服务账号,请创建一个,并为其授予必要的角色和权限,以便 Eventarc 可以管理目标工作流的事件。
创建服务账号:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
将
SERVICE_ACCOUNT_NAME
替换为服务账号的名称。该名称必须介于 6 到 30 个字符之间,且可以包含小写字母数字字符和短划线。在服务账号创建完毕后,无法再更改其名称。授予所需的 Identity and Access Management (IAM) 角色或权限。如需了解详情,请参阅 Workflows 目标的角色和权限。
如果要为直接 Cloud Storage 事件创建触发器,请将
pubsub.publisher
角色授予 Cloud Storage 服务账号:SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role="roles/pubsub.publisher"
创建触发器
您可以使用 Google Cloud CLI(gcloud
或 Terraform)或通过 Google Cloud 控制台创建已部署工作流作为事件接收器的 Eventarc 触发器。
控制台
- 在 Google Cloud 控制台中,进入 Eventarc 触发器页面。
- 点击 创建触发器。
- 输入触发器名称。
这是触发器的 ID,必须以字母开头。最多可包含 63 个小写字母、数字或连字符。
- 在触发器类型部分,选择 Google 来源。
- 在事件提供方列表中,选择 Cloud Storage。
请注意,关联的 Google Cloud 文档中使用的事件提供方名称可能没有 Cloud 或 Google Cloud 前缀。例如,在控制台中,Memorystore for Redis 称为 Google Cloud Memorystore for Redis。
- 在事件类型列表中,从“直接”事件中选择一种事件类型:
- google.cloud.storage.object.v1.archived:当对象的当前版本被归档或删除时,系统会发送事件。系统仅针对启用了版本控制的存储桶发送此事件。
- google.cloud.storage.object.v1.delete:当对象被永久删除时,系统会发送事件。根据存储桶的对象版本控制设置,这意味着:
- 对于启用了版本控制的存储桶,只有当某个版本被永久删除时(而不是在对象被归档时),系统才会发送此事件。
- 对于未启用版本控制的存储桶,当某个对象被删除或覆盖时,系统会发送此事件。
- google.cloud.storage.object.v1.finalized:当存储桶中创建了新对象(或者现有对象被覆盖,以及创建了该对象的新实例)时,系统将发送此事件。
- google.cloud.storage.object.v1.metadataUpdated:在现有对象的[元数据](/storage/docs/metadata)发生更改时,系统将发送此事件。
- 在事件数据内容类型列表中,选择事件载荷的编码。
对于来自 Cloud Storage的直接事件,编码必须是 application/json。
- 指定或浏览 Cloud Storage 存储桶的全局唯一标识符。
Cloud Storage 存储桶必须与 Eventarc 触发器位于同一 Google Cloud 项目以及同一区域或多区域中。
- 选择区域。
Eventarc 的 Cloud Storage 触发器适用于单区域、双区域和多区域位置]。请注意,Cloud Storage 存储桶必须与 Eventarc 触发器位于同一 Google Cloud 项目和区域或多区域中。
事件是通过来自 Cloud Storage 的 Pub/Sub 通知传送的。针对同一存储桶设置过多的注册通知可能会耗尽存储桶的通知限额,如错误
Cloud Storage bucket ...: Pub/Sub notification limit reached
所示。存储桶最多可将 10 个通知配置设置为针对特定事件触发。请参阅 Cloud Storage 配额和限制页面,详细了解配额和限制。 - 选择将调用您的服务或工作流的服务账号。
或者,您可以创建新的服务账号。
这用于指定与触发器相关联且您之前向其授予 Eventarc 所需的特定角色的 Identity and Access Management (IAM) 服务账号电子邮件。
- 在事件目的地列表中,选择 Workflows。
- 选择工作流。
这是要将事件传递给的工作流的名称。工作流执行的事件会被转换并作为运行时参数传递给工作流。
如需了解详情,请参阅 为工作流创建触发器。
- 点击创建。
创建触发器之后,您便无法修改事件来源过滤条件。请创建新触发器,并删除旧触发器。 如需了解详情,请参阅管理触发器。
gcloud
gcloud eventarc triggers create TRIGGER \ --location=LOCATION \ --destination-workflow=DESTINATION_WORKFLOW \ --destination-workflow-location=DESTINATION_WORKFLOW_LOCATION \ --event-filters="type=EVENT_FILTER_TYPE" \ --event-filters="bucket=BUCKET" \ --service-account="MY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com"
替换以下内容:
TRIGGER
:触发器的 ID 或完全限定标识符。LOCATION
:Eventarc 触发器的位置,该触发器适用于单区域、双区域和多区域位置;您无法创建global
Eventarc 触发器。请注意,Cloud Storage 存储桶必须与 Eventarc 触发器位于同一 Google Cloud 项目和区域中。如需了解详情,请参阅 Eventarc 位置。-
DESTINATION_WORKFLOW
:从触发器接收事件的已部署工作流的 ID。 工作流可以位于 Workflows 支持的任何位置,无需与触发器位于同一位置。但是,工作流必须与触发器位于同一项目中。 -
DESTINATION_WORKFLOW_LOCATION
(可选):目标工作流的部署位置。如果未指定,系统将假定工作流与触发器位于同一位置。 EVENT_FILTER_TYPE
:Cloud Storage 事件的标识符,可以是以下各项之一:google.cloud.storage.object.v1.finalized
:当存储桶中创建了新对象(或者现有对象被覆盖,以及创建了该对象的新实例)时发送事件google.cloud.storage.object.v1.archived
:当对象的现行版本被归档或被删除时,系统会发送此事件。系统仅针对启用了版本控制的存储桶发送此事件。google.cloud.storage.object.v1.deleted
:当某个对象被永久删除时,系统会发送此事件。根据存储桶的对象版本控制设置,这意味着:- 对于启用了版本控制的存储桶,只有当某个版本被永久删除时(而不是在对象被归档时),系统才会发送此事件。
- 对于未启用版本控制的存储桶,当某个对象被删除或覆盖时,系统会发送此事件。
google.cloud.storage.object.v1.metadataUpdated
:当现有对象的元数据发生更改时,系统会发送此事件。
BUCKET
:Cloud Storage 存储桶的全球唯一标识符。-
SERVICE_ACCOUNT_NAME
:您创建的 IAM 服务账号的名称,您已向其授予工作流所需的特定角色。 PROJECT_ID
:您的 Google Cloud 项目 ID
注意:
- 对于来自 Cloud Storage的直接事件,事件载荷的编码为
application/json
。 - 这些标志是必需的:
--event-filters="type=EVENT_FILTER_TYPE"
--event-filters="bucket=BUCKET"
- 创建触发器后,
EVENT_FILTER_TYPE
便无法更改。对于其他事件类型,您必须创建新的触发器。 -
--service-account
:您的 Eventarc 触发器将用于调用工作流执行的 IAM 服务账号电子邮件。我们强烈建议您使用具备访问必需资源所需的最低权限的服务账号。如需详细了解服务账号,请参阅创建和管理服务账号。 - 事件是通过来自 Cloud Storage 的 Pub/Sub 通知传送的。针对同一存储桶设置过多的注册通知可能会耗尽存储桶的通知限制,如错误
Cloud Storage bucket ...: Pub/Sub notification limit reached
所示。存储桶最多可将 10 项通知配置设置为针对特定事件触发。请参阅 Cloud Storage 配额和限制页面,详细了解配额和限制。 -
每个触发器可以有多个事件过滤条件,在一个
--event-filters
=[ATTRIBUTE
=VALUE
,...] 标志内以英文逗号分隔,您也可以重复使用该标志来添加更多过滤条件。只有符合所有过滤条件的事件会被发送到目标。不支持通配符和正则表达式。 - Cloud Storage 存储桶必须与 Eventarc 触发器位于同一 Google Cloud 项目以及同一区域或多区域中。
- 默认情况下,为 Eventarc 创建的 Pub/Sub 订阅会持续存在(无论其活跃状态如何),并且不会过期。如需更改非活跃状态持续时间,请参阅订阅属性。
示例:
gcloud eventarc triggers create helloworld-trigger \ --location=us-central1 \ --destination-workflow=my-workflow \ --destination-workflow-location=europe-west4 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=my-project-bucket" \ --service-account="${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
此命令会为 Cloud Storage 存储桶 my-project-bucket
和标识为 google.cloud.storage.object.v1.finalized
的事件创建一个名为 helloworld-trigger
的触发器。
Terraform
您可以使用 Terraform 为工作流创建触发器。如需了解详情,请参阅使用 Eventarc 和 Terraform 触发工作流。
列出触发器
如需确认触发器已创建,您可以使用 Google Cloud CLI 或通过 Google Cloud 控制台列出 Eventarc 触发器。
控制台
在 Google Cloud 控制台中,进入 Eventarc 触发器页面。
此页面会列出所有位置的触发器,并包含名称、区域、事件提供方、目标位置等详细信息。
如需过滤触发器,请执行以下操作:
- 点击 过滤或过滤触发器字段。
- 在属性列表中,选择要作为触发器过滤条件的选项。
您可以选择单个属性,或使用逻辑运算符
OR
添加更多属性。如需对触发器进行排序,请点击任意受支持的列标题旁边的
排序。
gcloud
运行以下命令可列出触发器:
gcloud eventarc triggers list --location=-
此命令会列出所有位置的触发器,并包含名称、类型、目标位置和状态等详细信息。