将 Pub/Sub 事件路由到 Workflows

Eventarc 触发器声明您对某个事件或一系列事件感兴趣。如需配置事件路由,您可以为触发器指定过滤条件,包括事件来源和目标工作流。

事件通过 HTTP 请求以 CloudEvents 格式传送。Workflows 服务将事件转换为 JSON 对象(遵循 CloudEvents 规范),并将事件作为工作流运行时参数传递给工作流执行。确保事件大小不超过 512 KB。大于 Workflows 参数大小上限的事件不会触发工作流执行。

这些说明介绍如何配置事件路由,以便在发布到 Pub/Sub 主题的消息与触发器的过滤条件匹配时触发工作流的执行。这适用于 Cloud Pub/Sub 事件提供方。

准备创建触发器

在为目标工作流创建 Eventarc 触发器之前,请完成以下任务。

控制台

  1. 在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目

    转到“项目选择器”

  2. 启用 Eventarc、Eventarc Publishing、Workflows 和 Workflow Executions API。

    启用 API

  3. 如果适用,请启用与直接事件相关的 API。例如,对于 Cloud Pub/Sub 事件,请启用 Cloud Pub/Sub API。

  4. 如果您还没有用户管理的服务账号,请创建一个,并为其授予必要的角色和权限,以便 Eventarc 可以管理目标工作流的事件。

    1. 在 Google Cloud 控制台中,转到服务账号页面。

      转到“服务账号”

    2. 选择您的项目。

    3. 服务账号名称字段中,输入一个名称。Google Cloud 控制台会根据此名称填充服务账号 ID 字段。

      服务账号说明字段中,输入说明。例如 Service account for event trigger

    4. 点击创建并继续

    5. 如需提供适当的访问权限,请在选择角色列表中,选择要向服务账号授予的所需 Identity and Access Management (IAM) 角色。如需了解详情,请参阅 Workflows 目标的角色和权限

      如需添加其他角色,请点击 添加其他角色,然后添加其他各个角色。

    6. 点击继续

    7. 如需完成账号的创建过程,请点击完成

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 启用 Eventarc、Eventarc Publishing、Workflows 和 Workflow Executions API:

    gcloud services enable eventarc.googleapis.com \
        eventarcpublishing.googleapis.com \
        workflows.googleapis.com \
        workflowexecutions.googleapis.com
    

  3. 如果适用,请启用与直接事件相关的 API。例如,对于 Cloud Pub/Sub 事件,请启用 pubsub.googleapis.com

  4. 如果您还没有用户管理的服务账号,请创建一个,并为其授予必要的角色和权限,以便 Eventarc 可以管理目标工作流的事件。

    1. 创建服务账号:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME 替换为服务账号的名称。该名称必须介于 6 到 30 个字符之间,且可以包含小写字母数字字符和短划线。在服务账号创建完毕后,无法再更改其名称。

    2. 授予所需的 Identity and Access Management (IAM) 角色或权限。如需了解详情,请参阅 Workflows 目标的角色和权限

创建触发器

您可以使用 Google Cloud CLI(gcloud 或 Terraform)或通过 Google Cloud 控制台创建已部署工作流作为事件接收器的 Eventarc 触发器。

控制台

  1. 在 Google Cloud 控制台中,进入 Eventarc 触发器页面。

    转到“触发器”

  2. 点击 创建触发器
  3. 输入触发器名称

    这是触发器的 ID,必须以字母开头。最多可包含 63 个小写字母、数字或连字符。

  4. 触发器类型部分,选择 Google 来源
  5. 事件提供方列表中,选择 Cloud Pub/Sub

    请注意,关联的 Google Cloud 文档中使用的事件提供方名称可能没有 Cloud 或 Google Cloud 前缀。例如,在控制台中,Memorystore for Redis 称为 Google Cloud Memorystore for Redis

  6. 事件类型列表中,从“直接”事件中选择 google.cloud.pubsub.topic.v1.messagePublished
  7. 选择 Cloud Pub/Sub 主题列表中,选择一个主题或接受默认值,以便系统为您创建一个新主题。
  8. 区域列表中,选择生成事件的 Google Cloud 服务所在的区域。

    如需了解详情,请参阅 Eventarc 位置

  9. 选择将调用您的服务或工作流的服务账号

    或者,您可以创建新的服务账号。

    这用于指定与触发器相关联且您之前向其授予 Eventarc 所需的特定角色的 Identity and Access Management (IAM) 服务账号电子邮件。

  10. 事件目的地列表中,选择 Workflows
  11. 选择工作流。

    这是要将事件传递给的工作流的名称。工作流执行的事件会被转换并作为运行时参数传递给工作流。

    如需了解详情,请参阅为工作流创建触发器

  12. 点击创建
  13. 创建触发器之后,您便无法修改事件来源过滤条件。请创建新触发器,并删除旧触发器。 如需了解详情,请参阅管理触发器

gcloud

Pub/Sub 消息(现有主题)

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-workflow=DESTINATION_WORKFLOW  \
    --destination-workflow-location=DESTINATION_WORKFLOW_LOCATION \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=TOPIC_ID \
    --service-account="MY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com"

替换以下内容:

  • TRIGGER:触发器的 ID 或完全限定标识符。
  • LOCATION:Eventarc 触发器的位置。 或者,您可以设置 eventarc/location 属性;例如 gcloud config set eventarc/location us-central1。Eventarc 的 Pub/Sub 触发器仅在单区域位置提供,您无法创建全球 Eventarc 触发器。
  • DESTINATION_WORKFLOW:从触发器接收事件的已部署工作流的 ID。 工作流可以位于 Workflows 支持的任何位置,无需与触发器位于同一位置。但是,工作流必须与触发器位于同一项目中。
  • DESTINATION_WORKFLOW_LOCATION(可选):目标工作流的部署位置。如果未指定,系统将假定工作流与触发器位于同一位置。

  • TOPIC_ID:现有 Pub/Sub 主题的 ID。主题必须与触发器位于同一项目中。
  • SERVICE_ACCOUNT_NAME:您创建的 IAM 服务账号的名称,您已向其授予 Workflows 所需的特定角色。
  • PROJECT_ID:您的 Google Cloud 项目 ID

备注:

  • --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" 标志是必需的,无法更改。对于其他事件类型,您必须创建新的触发器。
  • --service-account:您的 Eventarc 触发器将用于调用工作流执行的 IAM 服务账号电子邮件。我们强烈建议您使用具备访问必需资源所需的最低权限的服务账号。如需详细了解服务账号,请参阅创建和管理服务账号
  • 每个触发器可以有多个事件过滤条件,在一个 --event-filters=[ATTRIBUTE=VALUE,...] 标志内以英文逗号分隔,您也可以重复使用该标志来添加更多过滤条件。只有符合所有过滤条件的事件会被发送到目标。不支持通配符和正则表达式。
  • --transport-topic 标志用于指定现有 Pub/Sub 主题的 ID 或其完全限定标识符。
  • 默认情况下,为 Eventarc 创建的 Pub/Sub 订阅会持续存在(无论其活跃状态如何),并且不会过期。如需更改非活跃状态持续时间,请参阅订阅属性

示例:

  gcloud eventarc triggers create pubsub-workflows-trigger-existing \
      --location=us-central1 \
      --destination-workflow=my-workflow \
      --destination-workflow-location=europe-west4 \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --transport-topic=${TOPIC_ID} \
      --service-account="${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

这会为 ${TOPIC_ID} 标识的 Pub/Sub 主题创建一个名为 pubsub-workflows-trigger-existing 的触发器。

Pub/Sub 消息(新 主题)

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-workflow=DESTINATION_WORKFLOW  \
    --destination-workflow-location=DESTINATION_WORKFLOW_LOCATION \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --service-account="MY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com"

替换以下内容:

  • TRIGGER:触发器的 ID 或完全限定标识符。
  • LOCATION:Eventarc 触发器的位置。 或者,您可以设置 eventarc/location 属性;例如 gcloud config set eventarc/location us-central1。Eventarc 的 Pub/Sub 触发器仅在单区域位置提供,您无法创建全球 Eventarc 触发器。
  • DESTINATION_WORKFLOW:从触发器接收事件的已部署工作流的 ID。 工作流可以位于 Workflows 支持的任何位置,无需与触发器位于同一位置。但是,工作流必须与触发器位于同一项目中。
  • DESTINATION_WORKFLOW_LOCATION(可选):目标工作流的部署位置。如果未指定,系统将假定工作流与触发器位于同一位置。
  • SERVICE_ACCOUNT_NAME:您创建的 IAM 服务账号的名称,您已向其授予 Workflows 所需的特定角色。
  • PROJECT_ID:您的 Google Cloud 项目 ID

备注:

  • --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" 标志是必需的,无法更改。对于其他事件类型,您必须创建新的触发器。
  • --service-account:您的 Eventarc 触发器将用于调用工作流执行的 IAM 服务账号电子邮件。我们强烈建议您使用具备访问必需资源所需的最低权限的服务账号。如需详细了解服务账号,请参阅创建和管理服务账号
  • 每个触发器可以有多个事件过滤条件,在一个 --event-filters=[ATTRIBUTE=VALUE,...] 标志内以英文逗号分隔,您也可以重复使用该标志来添加更多过滤条件。只有符合所有过滤条件的事件会被发送到目标。不支持通配符和正则表达式。
  • 默认情况下,为 Eventarc 创建的 Pub/Sub 订阅会持续存在(无论其活跃状态如何),并且不会过期。如需更改非活跃状态持续时间,请参阅订阅属性

示例:

  gcloud eventarc triggers create pubsub-workflows-trigger-new \
      --location=us-central1 \
      --destination-workflow=my-workflow \
      --destination-workflow-location=europe-west4 \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account="${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

这会创建一个新的 Pub/Sub 主题和一个名为 pubsub-workflows-trigger-new 的触发器。

我们建议的最佳实践是,不要重复使用触发器创建的 Pub/Sub 主题,因为在删除 Eventarc 触发器时系统也会删除由触发器创建的所有 Pub/Sub 主题。

Terraform

您可以使用 Terraform 为工作流创建触发器。如需了解详情,请参阅使用 Eventarc 和 Terraform 触发工作流

列出触发器

如需确认触发器已创建,您可以使用 Google Cloud CLI 或通过 Google Cloud 控制台列出 Eventarc 触发器。

控制台

  1. 在 Google Cloud 控制台中,进入 Eventarc 触发器页面。

    转到“触发器”

    此页面会列出所有位置的触发器,并包含名称、区域、事件提供方、目标位置等详细信息。

  2. 如需过滤触发器,请执行以下操作:

    1. 点击 过滤过滤触发器字段。
    2. 属性列表中,选择要作为触发器过滤条件的选项。

    您可以选择单个属性,或使用逻辑运算符 OR 添加更多属性。

  3. 如需对触发器进行排序,请点击任意受支持的列标题旁边的 排序

gcloud

运行以下命令可列出触发器:

gcloud eventarc triggers list --location=-

此命令会列出所有位置的触发器,并包含名称、类型、目标位置和状态等详细信息。

后续步骤