发布来自 Google 来源的事件

您可以创建 GoogleApiSource 资源,以针对特定 Eventarc Advanced 总线启用从 Google 来源收集和发布事件的功能。

来自 Google 来源的事件由未经中介的事件直接触发,例如创建 Cloud Run 函数或 Dataflow 作业的状态发生变化。如需了解详情,请参阅 Eventarc 支持的 Google 事件类型

请注意以下几点:

  • 默认情况下,系统会从GoogleApiSource资源所在的 Google Cloud 项目中收集事件。您还可以使用 gcloud CLI 从与 GoogleApiSource 资源位于同一组织中的多个项目收集事件。如需了解详情,请参阅本文档中的发布来自多个项目的事件部分。
  • 您可以将事件发布到与 GoogleApiSource 资源所在的 Google Cloud 项目不同的项目中的总线。您可以使用 gcloud CLI 或通过向 Eventarc API 发送请求来配置此设置(但不能通过 Google Cloud 控制台进行配置)。
  • 每个项目在每个区域最多只能有一个 GoogleApiSource 资源。 Google Cloud

准备工作

在开始之前,请确保您已完成以下步骤:

控制台

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Eventarc and Eventarc Publishing APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Eventarc and Eventarc Publishing APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

gcloud

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 安装 Google Cloud CLI。

  3. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  6. 验证是否已为您的 Google Cloud 项目启用结算功能

  7. 启用 Eventarc 和 Eventarc Publishing API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com
  8. 安装 Google Cloud CLI。

  9. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  10. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  11. 创建或选择 Google Cloud 项目

    选择或创建项目所需的角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目的名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  12. 验证是否已为您的 Google Cloud 项目启用结算功能

  13. 启用 Eventarc 和 Eventarc Publishing API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 获得了此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色

    gcloud services enable eventarc.googleapis.com eventarcpublishing.googleapis.com

启用来自 Google 来源的事件

如需发布来自 Google 来源的事件,您必须创建 GoogleApiSource 资源。此资源表示在特定 Google Cloud 项目内针对特定 Eventarc Advanced 总线订阅 Google API 事件。

您可以通过以下方式启用从 Google 来源发布事件的功能:

  • 在 Google Cloud 控制台中
  • 在终端或 Cloud Shell 中使用 Google Cloud CLI
  • 向 Eventarc API 发送请求

控制台

  1. 在 Google Cloud 控制台中,前往 Eventarc > 总线页面。

    前往总线

  2. 您可以创建总线,或者如果您要更新总线,请点击 修改

  3. 修改总线页面上,如需添加消息来源,请点击 添加来源

    1. 添加消息来源窗格中,对于 Google API 消息提供方,接受默认值 google-api-source 或输入其他消息来源名称。
    2. 点击创建
  4. 点击保存

gcloud

  1. 打开终端。

  2. 您可以使用 gcloud eventarc google-api-sources create 命令启用来自 Google 来源的事件:

    gcloud eventarc google-api-sources create GOOGLE_API_SOURCE_NAME \
        --destination-message-bus=BUS_NAME \
        --destination-message-bus-project=BUS_PROJECT_ID

    替换以下内容:

    • GOOGLE_API_SOURCE_NAMEGoogleApiSource 资源的 ID 或完全限定标识符,该资源表示针对特定总线订阅 Google API 事件
    • BUS_NAME:您要订阅 Google API 事件的总线的 ID 或完全限定标识符
    • BUS_PROJECT_ID:总线的 Google Cloud 项目 ID

    可选:您还可以使用以下标志:

    • --async - 立即从命令返回,而无需等待正在进行的操作完成。
    • --crypto-key - 指定客户管理的加密密钥的完全限定名称;如果它尚未指定,那么系统将使用 Google-owned and managed keys 。
    • --logging-config - 配置日志记录级别,这必须是以下之一:NONEDEBUGINFONOTICEWARNINGERRORCRITICALALERTEMERGENCY。如需了解详情,请参阅 LogSeverity

REST API

如需启用来自 Google 来源的事件,请使用 projects.locations.googleApiSources.create 方法。

在使用任何请求数据之前,请先进行以下替换:

  • GOOGLE_API_SOURCE_NAMEGoogleApiSource 资源的显示名称,该资源表示针对特定总线的 Google API 事件的订阅,例如 my_google_source
  • LABEL_KEYLABEL_VALUE:可选。标签键值对映射,可帮助您整理 Google Cloud 资源。如需了解详情,请参阅什么是标签?
  • ANNOTATION_KEYANNOTATION_VALUE:可选。自由形式文本的注解键值对的映射。您可以使用它们来附加与资源关联的任意信息。如需了解详情,请参阅注解
  • DESTINATION:Eventarc Advanced 总线的完全限定标识符,Google 源事件应以 projects/PROJECT_NAME/locations/LOCATION/messageBuses/BUS_NAME 格式发布到该总线。 如需了解详情,请参阅创建用于路由消息的总线
  • ENCRYPT_KEY:可选。GoogleApiSource 资源用于数据加密的 Cloud KMS 密钥,格式为 projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME。如需了解详情,请参阅使用客户管理的加密密钥
  • PROJECT_ID:要创建 GoogleApiSource 资源的 Google Cloud项目 ID。
  • LOCATION:用于创建 GoogleApiSource 资源的支持的区域,例如 us-central1
  • LOG_SEVERITY:可选。日志条目中所述事件的最低严重性。以下之一:NONEDEBUGINFONOTICEWARNINGERRORCRITICALALERTEMERGENCY。默认值为 NONE。如需了解详情,请参阅 LogSeverity

请求 JSON 正文:

{
  "displayName": "GOOGLE_API_SOURCE_NAME",
  "labels": {"LABEL_KEY":"LABEL_VALUE"},
  "annotations": {"ANNOTATION_KEY":"ANNOTATION_VALUE"},
  "destination": "DESTINATION",
  "cryptoKeyName": "ENCRYPT_KEY",
  "loggingConfig": {"logSeverity":"LOG_SEVERITY"}
}

如需发送您的请求,请展开以下选项之一:

如果成功,响应正文将包含一个新创建的 Operation 实例:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.eventarc.v1.OperationMetadata",
    "createTime": "2024-01-25T17:17:45.782370139Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/googleApiSources/GOOGLE_API_SOURCE_NAME",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

现在,系统会收集与 GoogleApiSource 资源位于同一 Google Cloud 项目中的 Google 来源的事件,并将其发布到总线。

停用来自 Google 来源的事件

如需禁止将特定Google Cloud 项目中的 Google 来源事件发布到 Eventarc Advanced 总线,您必须删除 GoogleApiSource 资源。

您可以通过以下方式停用从 Google 来源发布事件的功能:

  • 在 Google Cloud 控制台中
  • 在终端或 Cloud Shell 中使用 gcloud CLI
  • 向 Eventarc API 发送请求

控制台

  1. 在 Google Cloud 控制台中,前往 Eventarc > 总线详情页面。

    前往“总线”详情

  2. 点击 修改

  3. 修改总线页面上,如需删除 Google API 消息提供方,请针对 google-api-source 消息来源(或您为其指定的名称)点击 删除资源

  4. 删除资源提示中,点击确认

  5. 点击保存

gcloud

  1. 打开终端。

  2. 您可以使用 gcloud eventarc google-api-sources delete 命令停用来自 Google 来源的事件:

    gcloud eventarc google-api-sources delete GOOGLE_API_SOURCE_NAME \
        --location=REGION

    替换以下内容:

    • GOOGLE_API_SOURCE_NAMEGoogleApiSource 资源的 ID 或完全限定标识符
    • REGIONGoogleApiSource 资源所在的位置

REST API

如需停用来自 Google 来源的事件,请使用 projects.locations.googleApiSources.delete 方法。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:创建GoogleApiSource资源的 Google Cloud 项目 ID。
  • LOCATION:创建 GoogleApiSource 资源的区域,例如 us-central1
  • GOOGLE_API_SOURCE_NAME:您要删除的 GoogleApiSource 资源的名称。

如需发送您的请求,请展开以下选项之一:

如果成功,响应正文将包含一个新创建的 Operation 实例:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.eventarc.v1.OperationMetadata",
    "createTime": "2024-01-25T17:17:45.782370139Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/googleApiSources/GOOGLE_API_SOURCE_NAME",
    "verb": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

系统不再收集和发布与已删除的 GoogleApiSource 资源位于同一 Google Cloud 项目中的 Google 来源的事件。

发布多个项目的事件

如需从多个 Google Cloud 项目收集和发布 Google 来源事件,您必须创建 GoogleApiSource 资源,并且这些项目必须与 GoogleApiSource 资源位于同一组织中。如需详细了解组织,请参阅资源层次结构

请注意以下几点:

  • 必须使用 gcloud CLI 配置来自多个项目的事件发布,并且该配置不会显示在 Google Cloud 控制台中。
  • 如果包含 GoogleApiSource 资源的项目被移至其他组织,则发布来自多个项目的事件将不再按预期运行。您必须更新或重新创建 GoogleApiSource 资源。

1. 向 Eventarc 服务代理授予适当的 IAM 角色

如需在组织级层收集事件,请使用 gcloud organizations add-iam-policy-binding 命令向 Eventarc 服务代理授予相应的 Identity and Access Management (IAM) 角色:

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member="SERVICE_AGENT_EMAIL" \
    --role="roles/eventarc.multiProjectEventCollector"

替换以下内容:

  • ORGANIZATION_ID:您的组织资源 ID
  • SERVICE_AGENT_EMAIL:您要在其中创建 GoogleApiSource 资源的项目的 Eventarc 主服务代理的电子邮件地址。电子邮件地址的格式如下:

    service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com
    

    PROJECT_NUMBER 替换为您的Google Cloud 项目编号。您可以在 Google Cloud 控制台的欢迎页面上,或通过运行以下命令来查找项目编号:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
    

2. 从所有项目或项目列表发布

如需发布多个项目中的 Google 来源事件,请通过以下任一方式使用 gcloud eventarc google-api-sources create 命令:

  • 从与 GoogleApiSource 资源位于同一组织中的所有 Google Cloud 项目发布:

    gcloud eventarc google-api-sources create GOOGLE_API_SOURCE_NAME \
        --location=REGION \
        --destination-message-bus=BUS_NAME \
        --destination-message-bus-project=BUS_PROJECT_ID \
        --organization-subscription
  • 从与 GoogleApiSource 资源位于同一组织中的 Google Cloud 项目列表中发布:

    gcloud eventarc google-api-sources create GOOGLE_API_SOURCE_NAME \
        --location=REGION \
        --destination-message-bus=BUS_NAME \
        --destination-message-bus-project=BUS_PROJECT_ID \
        --project-subscriptions=LIST_OF_PROJECTS

    替换以下内容:

    • GOOGLE_API_SOURCE_NAMEGoogleApiSource 资源的 ID 或完全限定标识符
    • REGIONGoogleApiSource 资源所在的位置
    • BUS_NAME:您要订阅 Google API 事件的总线的 ID 或完全限定标识符
    • BUS_PROJECT_ID:总线的 Google Cloud 项目 ID
    • LIST_OF_PROJECTS:以英文逗号分隔的Google Cloud 项目 ID 或项目编号列表。 您可以在同一列表中组合使用 ID 和数字。如需发布来自包含 GoogleApiSource 资源的Google Cloud 项目的事件,您必须在列表中明确包含项目 ID 或编号。

后续步骤