使用事件或 Pub/Sub 消息触发工作流

您可以使用 Eventarc 触发器执行因某个事件或一组事件而触发的工作流。事件从事件提供程序路由到感兴趣的事件接收器。

Eventarc 通过 HTTP 请求以 CloudEvents 格式将事件传递给事件接收器。Workflows 服务将事件转换为 JSON 对象(遵循 CloudEvents 规范),并将事件作为工作流运行时参数传递到工作流执行中。

触发工作流的执行:

  • 创建与触发器的过滤条件匹配的审核日志时。 例如,请参阅本快速入门,使用使用 Cloud Audit Logs 中的 BigQuery 事件触发工作流。
  • 响应直接事件,例如 Cloud Storage 存储分区更新或 Firebase Remote Config 模板更新。例如,请参阅此快速入门教程,了解如何使用来自 Cloud Storage 的直接事件触发工作流。
  • 通过发布到 Pub/Sub 主题的消息。例如,请参阅此快速入门教程,了解如何使用 Pub/Sub 消息触发工作流。

请注意以下几点:

  • 在工作流的执行开始之后,事件即被视为传送完毕,并且实际执行将在工作流服务中异步进行。

  • 如果工作流执行开始,但之后失败,则由事件触发的执行不会重试。如需了解详情,请参阅事件重试政策

  • 将 Workflows 用作 Eventarc 触发器的目标位置时,大于工作流大小上限参数的事件将无法触发工作流执行。 如需了解详情,请参阅配额和限制

使用 Google Cloud CLI 创建触发器

您可以通过运行 gcloud eventarc triggers create 命令以及必需和可选标志来创建触发器。如需了解详情,请参阅为工作流创建触发器

使用控制台创建触发器

以下步骤介绍了如何在 Google Cloud Console 的工作流页面上创建触发器。

准备工作

  1. 启用 Eventarc and Pub/Sub API。

    启用 API

  2. 创建服务帐号,以便 Eventarc 向 Workflows API 发出请求:

    1. 在 Cloud Console 中,转到服务帐号页面。
      转到服务帐号

    2. 选择项目,然后点击创建服务帐号

    3. 服务帐号名称字段中,输入一个介于 6 到 30 个字符的名称。

      可以包含小写字母数字字符和短划线。在服务帐号创建完毕后,无法再更改其名称。

    4. 点击创建并继续

    5. 向新服务帐号授予 workflows.callr 角色,以便该帐号有权触发您的工作流。在选择角色列表中,选择 Workflows > Workflows Invoker

      如果您开发的是正式版应用,请始终授予尽可能宽松的角色。如需了解详情,请参阅管理对项目、文件夹和组织的访问权限

    6. 点击完成

  3. 如需允许运行 Eventarc 的主帐号能够充当 Identity and Access Management (IAM) 服务帐号,请授予使该主帐号能够模拟服务帐号的角色

配置触发器

  1. 如果您还没有要触发的工作流,请创建和部署一个工作流

  2. 在 Cloud Console 中,转到工作流页面:
    转到工作流

  3. 在“工作流”页面上,选择一个工作流以转到其详情页面。

  4. 工作流详细信息页面上,选择 修改

  5. 修改工作流页面上,选择添加新的触发器 > Eventarc

    此时将打开 Eventarc 触发器窗格。

  6. 输入触发器名称

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

  7. 选择事件提供方

    这是作为事件来源的 Google Cloud 服务。例如,选择 BigQuery

  8. 选择事件

    • 自定义事件 - 适用于 Cloud Pub/Sub 事件提供方
    • 直接事件 - 仅适用于某些事件提供方
    • “通过 Cloud Audit Logs” 事件 - 适用于所有事件提供方

    自定义

    当消息发布到 Pub/Sub 主题时,会触发对您的服务的请求。这适用于 Cloud Pub/Sub 事件提供方。

    1. 自定义下列出的事件中,选择 Cloud Pub/Sub 主题

    2. 选择现有主题或接受默认值,以便为该触发器创建一个新主题。

      现有 Pub/Sub 主题必须与触发器位于同一项目中。

      默认情况下,为 Eventarc 创建的 Pub/Sub 订阅会持续存在(无论其活跃状态如何),并且不会过期。如需更改非活跃状态持续时间,请参阅管理订阅

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

    3. 选择区域

      Eventarc 的 Pub/Sub 触发器仅在单区域位置提供,您无法创建全球 Eventarc 触发器。

    直接

    Cloud Storage

    触发对您的服务的请求,以响应 Cloud Storage 存储桶中的事件 - 对象创建、删除、归档和元数据更新。这适用于 Cloud Storage 事件提供方。

    1. 从“直接”下方列出的事件中,选择以下选项之一:

      • google.cloud.storage.object.v1.archived:当对象的当前版本被归档或删除时,系统会发送事件。系统仅针对启用了版本控制的存储桶发送此事件。
      • google.cloud.storage.object.v1.delete:当对象被永久删除时,系统会发送事件。根据存储桶的对象版本控制设置,这意味着:
        • 对于启用了版本控制的存储桶,只有当某个版本被永久删除时(而不是在对象被归档时),系统才会发送此事件。
        • 对于未启用版本控制的存储分区,当某个对象被删除或覆盖时,系统会发送此事件。
      • google.cloud.storage.object.v1.finalized:当存储桶中创建了新对象(或者现有对象被覆盖,以及创建了该对象的新实例)时,系统将发送此事件
      • google.cloud.storage.object.v1.metadataUpdated:在现有对象的元数据发生更改时,系统将发送此事件。
    2. 指定或浏览 Cloud Storage 存储桶的全局唯一标识符。

      Cloud Storage 存储桶必须与 Eventarc 触发器位于同一 Google Cloud 项目和区域或多区域中。

    3. 选择区域

      Eventarc 的 Cloud Storage 触发器适用于单区域、双区域和多区域位置。请注意,Cloud Storage 存储桶必须与 Eventarc 触发器位于同一 Google Cloud 项目和区域或多区域中。

    事件是通过来自 Cloud Storage 的 Pub/Sub 通知传送的。针对同一存储桶设置过多的注册通知可能会耗尽存储桶的通知限制,如错误 Cloud Storage bucket ...: Pub/Sub notification limit reached 所示。存储桶最多可将 10 项通知配置设置为针对特定事件触发。请参阅 Cloud Storage 配额和限制页面,详细了解配额和限制。

    Firebase Alerts

    当 Firebase 服务发布 Firebase 提醒时,系统会触发对相应服务的请求作为对该事件的响应。

    1. 直接类别下方列出的事件中,选择 google.firebase.firebasealerts.alerts.v1.published

    2. 区域列表中,选择 global(全球)

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

    3. 在“过滤条件”部分的提醒类型列表中,选择以下选项之一:

      • appDistribution.newTesterIosDevice:在从给定应用注册新的 iOS 设备时发送事件
      • billing.planAutomatedUpdate:在 Firebase 项目的结算方案自动更新时发送事件;例如,当某个方案因付款问题而降级时
      • billing.planUpdate:在用户修改 Firebase 项目的结算方案时发送事件;例如,当结算帐号附加到项目或与项目分离时
      • crashlytics.newAnrIssue:在应用遇到新的应用无响应 (ANR) 错误(而非任何后续相同事件)时发送事件
      • crashlytics.newFatalIssue:在应用遇到新的严重崩溃(而非任何后续相同事件)时发送事件
      • crashlytics.newNonfatalIssue:在应用遇到新的非严重错误(而非任何后续相同事件)时发送事件
      • crashlytics.regression:在应用因遇到已针对先前的应用版本标记为已解决的问题而发生崩溃时发送事件
      • crashlytics.stabilityDigest:在 Crashlytics 中出现热门问题通知时发送事件
      • crashlytics.velocity:在单个问题导致大量应用会话崩溃时发送事件
    4. (可选)您可以过滤特定 Firebase 应用 ID 的事件。点击 添加过滤条件并指定 appid

      必须完全匹配。

    Firebase Remote Config

    当更新 Remote Config 模板时,系统会触发对您的服务的请求来响应事件。

    1. 从“直接”下方列出的事件中,选择 google.firebase.remoteconfig.remoteConfig.v1.updated

    2. 区域列表中,选择 global(全球)

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

    Firebase Test Lab

    当 TestMatrix 完成时,系统会触发对您的服务的请求来响应事件。

    1. 从“直接”下方列出的事件中,选择 google.firebase.testlab.testMatrix.v1.completed

    2. 区域列表中,选择 global(全球)

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

    通过 Cloud Audit Logs

    当创建符合触发器过滤条件的审核日志时,系统会触发对您的服务的请求。这种类型的事件适用于所有事件提供方。

    1. 从“通过 Cloud Audit Logs”下列出的事件中,选择一个。

    2. 从下列选项中选择一项:

      • 任何资源 - 这是默认资源,其中包含动态创建的资源,这些资源会在创建时生成标识符。

      • 特定资源 - 必须提供完整的资源名称。

      • 路径模式 - 可以使用路径模式过滤资源。例如,输入 projects/_/buckets/eventarc-bucket/objects/random.txt 或输入 projects/_/buckets/**/r*.txt

    3. 选择区域

      Eventarc 的 Cloud Audit Logs 触发器可在特定区域和全球区域使用,但无法在双区域和多区域位置使用。为避免全球触发器导致任何性能和数据驻留问题,建议触发器位置与生成事件的 Google Cloud 服务的位置匹配。

      如果指定全球位置,您将收到来自事件过滤条件匹配的所有位置的事件。例如,通过创建全球 Eventarc 触发器,您可以从 EU 和 US 多区域的资源接收事件。

    如需详细了解如何捕获在创建与触发器的过滤条件匹配的审核日志时触发的事件,请参阅确定 Cloud Audit Logs 的事件过滤条件

  9. 选择调用您的工作流的服务帐号

    这会指定您之前授予 workflows.invoker 角色的 IAM 服务帐号,使该帐号有权触发您的工作流。

  10. 点击保存触发器

    现在,Workflows Details 页面的 Triggers 标签页中列出了 Eventarc 触发器。

  11. 如果要更新或删除触发器,您必须修改工作流:

    1. 工作流详细信息页面上,选择 修改
    2. 触发器部分,找到要更新或删除的触发器。
    3. 点击 修改资源 删除资源

现在,与触发器过滤条件匹配的事件会触发您的工作流执行。

后续步骤