创建注册以接收事件

注册会标识对特定总线的订阅。注册会定义匹配条件,以确定要将哪些消息路由到目的地。它还指定了匹配消息应通过的流水线。借助流水线,您可以配置目标目的地,还可选择在将任何匹配的事件传送到目的地之前对其进行转换。

请注意以下几点:

  • 数据流和注册必须位于同一 Google Cloud 项目中。(该模块可以位于同一项目中,也可以位于其他项目中。)
  • 一个流水线可用于多次注册。
  • 只有一个目的地可以成为流水线路由消息的目标。
  • 在配置流水线或注册之前,您应该已创建 Eventarc Advanced 总线

所需的角色

Identity and Access Management (IAM) 角色包含一组权限,可让您对 Google Cloud 资源执行特定操作。若要创建用于转送消息的流水线和注册,您需要具备以下角色和权限:

  • 如需获得创建数据流水线所需的权限,请让您的管理员向您授予数据流水线项目的 Eventarc Developer (roles/eventarc.developer) IAM 角色。此预定义角色包含创建流水线所需的 eventarc.pipelines.create 权限。
  • 如需获得创建注册所需的权限,请让您的管理员向您授予注册项目的 Eventarc Developer (roles/eventarc.developer) IAM 角色。此预定义角色包含创建注册所需的 eventarc.enrollments.create 权限。
  • 如需获得使用消息队列所需的权限,请让您的管理员为您授予消息队列项目的 Eventarc Message Bus User (roles/eventarc.messageBusUser) IAM 角色。此预定义角色包含 eventarc.buses.use 权限,使用公交车需要该权限。

如需详细了解如何授予角色,请参阅管理访问权限。您也可以使用自定义角色或其他预定义角色来获取这些权限。

注册以接收事件

您可以在 Google Cloud 控制台中或使用 Google Cloud CLI 创建流水线和注册。

控制台

在 Google Cloud 控制台中,您可以在流水线页面同时创建流水线和注册。

  1. 如需创建注册,请在 Google Cloud 控制台中,依次前往 Eventarc > 流水线页面。

    前往“流水线”

  2. 点击 创建流水线

  3. 流水线详情窗格中,执行以下操作:

    1. 输入流水线名称。这是您的流水线的 ID。
    2. 区域列表中,选择要部署流水线的区域。流水线必须与总线位于同一区域。如需了解详情,请参阅 Eventarc 高级位置
    3. 可选:您可以修改默认配置以重试事件
    4. 对于加密,接受默认的 Google 管理的加密密钥或选择 Cloud KMS 密钥。如需了解详情,请参阅使用客户管理的加密密钥 (CMEK)
    5. 如果您选择 Cloud KMS 密钥,请执行以下操作:

      1. 密钥类型列表中,选择用于管理密钥的方法。

        您可以手动管理密钥,也可以使用 Autokey,以按需生成密钥环和密钥。如果 Autokey 选项不可用,则表明其尚未与当前的资源类型集成。

      2. 选择客户管理的密钥中,选择一个密钥。

        请注意,您必须先选择区域,然后才能查看客户管理的密钥。

      3. 可选:如需手动输入密钥的资源名称,请在选择客户管理的密钥列表中,点击手动输入密钥,然后以指定格式输入密钥名称。

      4. 如果出现提示,请向 Eventarc Service Agent 授予 cloudkms.cryptoKeyEncrypterDecrypter 角色

    6. 可选:如需添加标签,请点击 添加标签。标签是有助于您整理 Google Cloud 资源的键值对。如需了解详情,请参阅什么是标签?

    7. 点击继续

  4. 注册窗格中,执行以下操作:

    1. 点击添加注册
    2. 输入注册名称
    3. Bus 列表中,选择要订阅的总线。
    4. CEL 表达式字段中,使用 CEL 编写评估表达式。例如:

      message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"

      请注意,默认表达式 true 表示所有消息都会被路由,且不经过过滤。

    5. 点击完成

    6. 您可以添加其他注册信息,也可以点击继续

  5. 可选:在事件中介窗格中,执行以下操作或点击继续

    1. 选中应用转换复选框。
    2. 入站格式列表中,选择适用的格式。

      请注意,应用转换时,您必须为流水线指定入站数据格式,并且所有事件都必须与该格式匹配。

    3. 对于 Avro 或 Protobuf 格式,您必须指定入站架构。(可选)您可以上传入站架构。如需了解详情,请参阅设置接收事件的格式

    4. CEL 表达式字段中,使用 CEL 编写转换表达式。

    5. 点击继续

  6. 目标窗格中,执行以下操作:

    1. 目标类型列表中,选择要将消息路由到的目标类型。根据目标位置类型,执行以下操作:

    2. 指定网络连接。

      网络连接是一种资源,允许提供方 VPC 网络发起与使用方 VPC 网络的连接。为了发布事件,Eventarc Advanced 使用网络连接与 VPC 网络中托管的端点建立连接。

      您可以创建网络连接,以自动接受与该网络连接关联的任何 Private Service Connect 接口发出的连接。在包含目标端点的同一网络和区域中创建网络连接。

      如果您要使用 DNS 地址将消息路由到 Google 目的地(例如 Cloud Run、Pub/Sub、Workflows 或其他 Eventarc Advanced 总线),请确保在网络连接中使用的子网上启用了专用 Google 访问通道;否则,DNS 地址将无法解析。

    3. 出站格式列表中,选择一种格式(如果适用)。

      请注意,如果未为流水线指定入站数据格式,则无法设置出站格式。

    4. 如适用,请应用消息绑定。如需了解详情,请参阅定义消息绑定

    5. 如需启用身份验证,请选中启用身份验证复选框。

      1. 身份验证标头列表中,选择要生成的令牌类型,并将其作为 Authorization 标头附加到 HTTP 请求中:

        • 通常,只有在调用 *.googleapis.com 上托管的 Google API 时,才应使用 OAuth 令牌。(可选)指定此令牌的范围;否则,默认为 https://www.googleapis.com/auth/cloud-platform。对于 Google Cloud 服务,最佳实践是使用 https://www.googleapis.com/auth/cloud-platform 范围(其中包括所有 Google Cloud API),以及提供精细访问权限控制的 Identity and Access Management (IAM)

          请注意,对其他 Eventarc Advanced 总线、Pub/Sub 或 Workflows 的所有请求都必须包含 HTTP 授权标头,其中包含由 Google 为其中一个已获授权的服务账号签名的 OAuth 令牌。

        • OIDC 令牌可用于许多场景,包括您打算自行验证令牌的端点。此外,请指定此令牌的目标受众群体。通常,它应与目标流水线的网址一致。如果未指定,系统会使用整个网址,包括所有请求参数。

          请注意,Cloud Run 会对每个请求执行 IAM 检查,您可以使用 run.routes.invoke 权限通过以下任一方式配置谁可以访问您的 Cloud Run 服务:

          • 向选定的服务账号或群组授予此权限,以允许访问服务。所有请求都必须具有 HTTP 授权标头,其中包含由 Google 为其中一个已获授权的服务账号签名的 OpenID Connect 令牌。

          • allUsers 授予此权限,以允许未经身份验证的访问。

          如需了解详情,请参阅 Cloud Run 的访问权限控制

        详细了解令牌类型

      2. 服务账号列表中,选择将调用目标服务的服务账号。或者,您也可以创建新的服务账号。

        这用于指定与流水线关联且您之前向其授予 Eventarc Advanced 所需的特定角色的 IAM 服务账号电子邮件。

  7. 点击创建

gcloud

使用 gcloud CLI 时,请先创建数据流,然后使用适当的命令创建注册。

流水线

  1. 打开终端。

  2. 使用 gcloud beta eventarc pipelines create 命令创建流水线:

    gcloud beta eventarc pipelines create PIPELINE_NAME \
        --destinations=DESTINATION_KEY \
        --location=REGION

    替换以下内容:

    • PIPELINE_NAME:流水线的 ID 或完全限定名称
    • DESTINATION_KEY:一个或多个键值对,用于为流水线配置目标位置

      您必须仅设置以下键之一:

      您必须设置以下键:

      • network_attachment:一种资源,允许提供方 VPC 网络发起与使用方 VPC 网络的连接。为了发布事件,Eventarc Advanced 使用网络连接与 VPC 网络中托管的端点建立连接。

        您可以创建网络连接,以自动接受与该网络连接关联的任何 Private Service Connect 接口发出的连接。在包含目标资源的同一网络和区域中创建网络连接。

        如果您要使用 DNS 地址将消息路由到 Google 目的地(例如 Cloud Run、Pub/Sub、Workflows 或其他 Eventarc Advanced 总线),请确保在网络连接中使用的子网上启用了专用 Google 访问通道;否则,DNS 地址将无法解析。

      如需启用身份验证,您可以设置以下一个密钥:

      • google_oidc_authentication_service_account - 用于生成 OIDC 令牌的服务账号电子邮件地址,可用于许多场景,包括您打算自行验证令牌的端点。(可选)您可以设置 google_oidc_authentication_audience 来指定此令牌的目标受众群体。通常,它应与目标流水线的网址匹配。如果未指定,系统会使用整个网址,包括所有请求参数。

        请注意,Cloud Run 会对每个请求执行 IAM 检查,您可以使用 run.routes.invoke 权限通过以下任一方式配置谁可以访问您的 Cloud Run 服务:

        • 向选定的服务账号或群组授予此权限,以允许访问服务。所有请求都必须具有 HTTP 授权标头,其中包含由 Google 为其中一个已获授权的服务账号签名的 OpenID Connect 令牌。

        • allUsers 授予此权限,以允许未经身份验证的访问。

        如需了解详情,请参阅 Cloud Run 的访问权限控制

      • oauth_token_authentication_service_account - 用于生成 OAuth 令牌的服务账号电子邮件地址,通常仅应在调用 *.googleapis.com 上托管的 Google API 时使用。您可以选择性地设置 oauth_token_authentication_scope 以指定此令牌的范围;否则,它默认为 https://www.googleapis.com/auth/cloud-platform。对于 Google Cloud 服务,最佳实践是使用 https://www.googleapis.com/auth/cloud-platform 范围(其中包括所有 Google Cloud API),以及提供精细访问权限控制的 Identity and Access Management (IAM)

        请注意,对其他 Eventarc Advanced 总线、Pub/Sub 或 Workflows 的所有请求都必须包含 HTTP 授权标头,其中包含由 Google 为其中一个已获授权的服务账号签名的 OAuth 令牌。

        详细了解令牌类型

      可选:您可以设置以下一个按键:

      • output_payload_format_avro_schema_definition
      • output_payload_format_json
      • output_payload_format_protobuf_schema_definition

        请注意,如果您设置了输出格式,则还必须指定输入格式(请参阅以下 input-payload-format-* 标志)。

      可选:如果 http_endpoint_uri 用作目标键,您可以设置以下键:

      • project - 目标资源的 Google Cloud 项目 ID;默认情况下,系统会使用流水线的项目 ID。
      • location - 目标资源的位置;默认情况下,系统会使用流水线的位置。
    • REGION受支持的 Eventarc Advanced 位置

      或者,您也可以设置 gcloud CLI 位置属性:

      gcloud config set eventarc/location REGION
      

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

    • --async 以立即从命令返回,而无需等待正在进行的操作完成。
    • --crypto-key 用于指定客户管理的加密密钥的完全限定名称;如果未指定,则使用 Google 管理的密钥。
    • --logging-config,用于配置日志记录级别,该级别必须为以下之一:NONEDEBUGINFONOTICEWARNINGERRORCRITICALALERTEMERGENCY
    • --mediations 以应用转换transformation_template 是唯一支持的模板,并且每个流水线仅支持一个中介;例如:

      --mediations=transformation_template='message.removeFields(["id\ ","credit_card_number","age"])'

      请注意,如果您要应用转换,则必须使用以下某个标志来指定输入格式。

    • 以下任一项,用于指定输入格式

      • --input-payload-format-avro-schema-definition
      • --input-payload-format-json
      • --input-payload-format-protobuf-schema-definition
    • --max-retry-attempts--max-retry-delay--min-retry-delay 重试事件

    例如:

    gcloud beta eventarc pipelines create my-pipeline \
        --destinations=http_endpoint_uri='https://example-endpoint.com',network_attachment=my-network-attachment,oauth_token_authentication_service_account=example-service-account@example-project.gserviceaccount.iam.com,oauth_token_authentication_scope='https://www.googleapis.com/auth/cloud-platform',output_payload_format_avro_schema_definition='{"type": "record","name": "my_record", "fields": [{"name": "my_field", "type":"string"}]}' \
        --input-payload-format-avro-schema-definition='{"type":"record", "name": "my_record", "fields": [{"name": "my_field","type": "string"}]}' \
        --location=us-central1 \
        --async
    

    如需了解详情和示例,请参阅 gcloud CLI 文档

注册

  1. 打开终端。

  2. 使用 gcloud beta eventarc enrollments create 命令创建注册:

    gcloud beta eventarc enrollments create ENROLLMENT_NAME \
        --cel-match=MATCH_EXPRESSION \
        --destination-pipeline=PIPELINE_NAME \
        --message-bus=BUS_NAME \
        --message-bus-project=PROJECT_ID \
        --location=REGION

    替换以下内容:

    • ENROLLMENT_NAME:注册的 ID 或完全限定名称
    • MATCH_EXPRESSION使用 CEL 为此注册表单创建的匹配表达式,例如 "message.type == 'google.cloud.dataflow.job.v1beta3.statusChanged'"
    • PIPELINE_NAME:此注册的目标流水线 ID 或其完全限定名称
    • BUS_NAME:Eventarc Advanced 总线的 ID 或其完全限定名称
    • PROJECT_ID:相应数据总线的 Google Cloud 项目 ID
    • REGION受支持的 Eventarc Advanced 位置

      或者,您也可以设置 gcloud CLI 位置属性:

      gcloud config set eventarc/location REGION
      

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

    • --async,用于立即从命令返回,而无需等待正在进行的操作完成

    例如:

    gcloud beta eventarc enrollments create my-enrollment \
        --cel-match="message.type == 'google.cloud.dataflow.job.v1beta3.statusChanged'" \
        --destination-pipeline=my-pipeline \
        --message-bus=my-message-bus \
        --message-bus-project=another-google-cloud-project \
        --location=us-central1 \
        --async
    

删除注册

您可以在 Google Cloud 控制台中或使用 Google Cloud CLI 删除注册。

控制台

  1. 如需删除注册,请在 Google Cloud 控制台中,依次前往 Eventarc > 流水线页面。

    前往“流水线”

  2. 点击要从中删除注册的流水线的名称。

    流水线详情窗格随即会打开。

  3. 点击继续

    系统随即会打开注册窗格。

  4. 针对要删除的注册,点击 删除图标。

  5. 点击保存

gcloud

  1. 打开终端。

  2. 使用 gcloud beta eventarc enrollments delete 命令删除注册:

    gcloud beta eventarc enrollments delete ENROLLMENT_NAME \
          --location=REGION

    替换以下内容:

删除流水线

您可以在 Google Cloud 控制台中或使用 Google Cloud CLI 删除数据流式传输。

请注意,删除流水线可能需要 10 分钟以上。

控制台

  1. 如需删除流水线,请在 Google Cloud 控制台中,依次前往 Eventarc > 流水线页面。

    前往“流水线”

  2. 在流水线列表中,选中要删除的流水线名称旁边的复选框。

  3. 点击 删除

  4. 输入 Delete 以确认删除。

  5. 点击删除

gcloud

  1. 打开终端。

  2. 使用 gcloud beta eventarc pipelines delete 命令删除流水线:

    gcloud beta eventarc pipelines delete PIPELINE_NAME \
          --location=REGION

    替换以下内容:

后续步骤