管理触发器

您可以使用 Google Cloud 控制台或者终端或 Cloud Shell 中的 Google Cloud CLI 来管理触发器。您还可以通过 Eventarc API 管理触发器。

列出触发器

您可以列出所有位置的触发器,并进行过滤和排序。

控制台

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

    转到“触发器”

    这将列出项目中所有位置的触发器,包括触发器名称、区域、事件提供方、目标位置和事件类型等详细信息。

  2. 如需按特定属性过滤触发器,请执行以下操作:

    1. 点击 过滤条件框。
    2. 属性列表中,选择一个选项以过滤触发器,例如名称事件渠道

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

  3. 如需对触发器进行排序,请点击相应列标题旁边的 排序

    只有部分列可以排序,例如名称区域事件渠道

gcloud

gcloud eventarc triggers list --location=-

此命令列出所有位置的触发器名称、类型、目标位置和状态。

REST

如需列出指定项目和位置中的触发器,请使用 projects.locations.triggers.list 方法。

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

  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • LOCATION:创建触发器的区域,例如 us-central1

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

如果成功,则响应正文包含 Trigger 的实例,并且响应应类似如下内容:

{
  "triggers": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/triggers/TRIGGER_NAME",
      "uid": "d700773a-698b-47b2-a712-2ee10b690062",
      "createTime": "2022-12-06T22:44:04.744001514Z",
      "updateTime": "2022-12-06T22:44:09.116459550Z",
      "eventFilters": [
        {
          "attribute": "type",
          "value": "google.cloud.pubsub.topic.v1.messagePublished"
        }
      ],
      "serviceAccount": "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
      "destination": {
        "workflow": "projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_NAME"
      },
      "transport": {
        "pubsub": {
          "topic": "projects/PROJECT_ID/topics/TOPIC_ID",
          "subscription": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID"
        }
      }
    },
    {
      object (Trigger)
    }
  ],
  "nextPageToken": string,
  "unreachable": [
    string
  ]
}

描述触发器

您可以描述特定位置中的触发器。

控制台

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

    转到“触发器”

  2. 在触发器列表中,点击要详细了解的触发器。

触发器详情页面会显示触发器的详细信息,例如名称、区域、事件提供方、事件类型、事件数据内容类型和目标位置。

gcloud

gcloud eventarc triggers describe TRIGGER \
    --location=LOCATION

替换以下内容:

  • TRIGGER:触发器的 ID 或完全限定标识符。
  • LOCATION:Eventarc 触发器的位置。

此命令会返回如下所示的触发器相关信息:

  createTime: '2023-03-16T13:40:44.889670204Z'
  destination:
    cloudRun:
      path: /
      region: us-central1
      service: hello
  eventDataContentType: application/protobuf
  eventFilters:
  - attribute: serviceName
    value: cloudscheduler.googleapis.com
  - attribute: methodName
    value: google.cloud.scheduler.v1.CloudScheduler.DeleteJob
  - attribute: type
    value: google.cloud.audit.log.v1.written
  name: projects/project-name/locations/us-central1/triggers/name-of-trigger
  serviceAccount: project-number-compute@developer.gserviceaccount.com
  transport:
    pubsub:
      subscription: projects/project-name/subscriptions/eventarc-us-central1-name-of-trigger-sub-034
      topic: projects/project-name/topics/eventarc-us-central1-name-of-trigger-931

REST

如需描述指定项目和位置中的触发器,请使用 projects.locations.triggers.get 方法。

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

  • TRIGGER_NAME:您要描述的触发器的名称。
  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • LOCATION:创建触发器的区域,例如 us-central1

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

如果成功,响应正文将包含一个 Trigger 实例,如下所示:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/triggers/TRIGGER_NAME",
  "uid": "d700773a-698b-47b2-a712-2ee10b690062",
  "createTime": "2022-12-06T22:44:04.744001514Z",
  "updateTime": "2022-12-06T22:44:09.116459550Z",
  "eventFilters": [
    {
      "attribute": "type",
      "value": "google.cloud.pubsub.topic.v1.messagePublished"
    }
  ],
  "serviceAccount": "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
  "destination": {
    "workflow": "projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_NAME"
  },
  "transport": {
    "pubsub": {
      "topic": "projects/PROJECT_ID/topics/TOPIC_ID",
      "subscription": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID"
    }
  }
}

如果触发器的条件指示 Pub/Sub 主题存在问题,请参阅触发器未传送事件

更新触发器

您可以更新 Cloud Run、Google Kubernetes Engine (GKE) 和 Workflows 目标的触发器。 您可以根据目标位置更新特定字段。

控制台

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

    转到“触发器”

  2. 在触发器列表中,点击要详细了解的触发器。

  3. 触发器详情页面上,点击 修改

  4. 根据需要修改字段,然后点击保存

    请注意,您无法更新任何不可用的字段,例如事件提供方事件目标位置。如需详细了解这些字段,请参阅特定提供方、事件类型和目标位置控制台说明。

gcloud

Cloud Run

gcloud eventarc triggers update TRIGGER \
    --location=LOCATION \
    --event-filters=NEW_EVENT_FILTERS \
    --service-account=NEW_SERVICE_ACCOUNT \
    --destination-run-region=NEW_REGION \
    --destination-run-service=NEW_SERVICE \
    --destination-run-path=NEW_PATH \
    --event-data-content-type="NEW_EVENT_DATA_TYPE"

替换以下内容:

  • TRIGGER:触发器的 ID 或完全限定标识符。
  • LOCATION:Eventarc 触发器的位置。

您可以更新以下任意一项:

  • NEW_EVENT_FILTERS:用于配置触发器的事件路由的过滤条件;例如,methodName=storage.objects.create 可以更新为 methodName=storage.objects.delete。请注意,触发器创建后,type 事件过滤条件便无法更改。对于其他事件类型,您必须创建新的触发器。
  • NEW_SERVICE_ACCOUNT:与触发器关联的 Identity and Access Management (IAM) 服务账号电子邮件地址。
  • NEW_REGION:目标 Cloud Run 服务所在的区域。
  • NEW_SERVICE:为触发器接收事件的 Cloud Run 服务的名称。
  • NEW_PATH:应向其发送触发器事件的目标 Cloud Run 服务的相对路径。
  • NEW_EVENT_DATA_TYPE:事件载荷的编码;根据事件提供方,这可能是 application/jsonapplication/protobuf

例如,如需更新触发器的服务账号,请运行以下命令:

gcloud eventarc triggers update my-cloud-run-trigger \
    --service-account=new-serviceaccount@${PROJECT_ID}.iam.gserviceaccount.com

此命令会将名为 my-cloud-run-trigger 的触发器的服务账号更新为 new-serviceaccount@PROJECT_ID.iam.gserviceaccount.com

GKE

请注意,本部分也适用于在 GKE 集群中运行的专用服务和公共服务的公共端点。

gcloud eventarc triggers update TRIGGER \
    --location=LOCATION \
    --destination-gke-namespace=NEW_NAMESPACE \
    --destination-gke-service=NEW_SERVICE \
    --destination-gke-path=NEW_PATH \
    --event-data-content-type="NEW_EVENT_DATA_TYPE"

替换以下内容:

  • TRIGGER:触发器的 ID 或完全限定标识符。
  • LOCATION:Eventarc 触发器的位置。

您可以更新以下任意一项:

  • NEW_NAMESPACE:目标 GKE 服务在其中运行的命名空间。
  • NEW_SERVICE:接收触发器的事件的 GKE 服务名称。
  • NEW_PATH:触发器的事件应该发送到的目标 GKE 服务的相对路径。
  • NEW_EVENT_DATA_TYPE:事件载荷的编码;根据事件提供方,这可能是 application/jsonapplication/protobuf

例如,如需更新触发器的事件接收器服务,请运行以下命令:

gcloud eventarc triggers update my-gke-trigger \
    --destination-gke-service=helloworld-events

此命令会将名为 my-gke-trigger 的触发器的事件接收器服务更新为名为 helloworld-events 的 GKE 服务。

Workflows

gcloud eventarc triggers update TRIGGER \
    --location=LOCATION \
    --event-filters=NEW_EVENT_FILTERS \
    --service-account=NEW_SERVICE_ACCOUNT \
    --destination-workflow=NEW_DESTINATION_WORKFLOW \
    --destination-workflow-location=NEW_DESTINATION_WORKFLOW_LOCATION \
    --event-data-content-type="NEW_EVENT_DATA_TYPE"

替换以下内容:

  • TRIGGER:触发器的 ID 或完全限定标识符。
  • LOCATION:Eventarc 触发器的位置。

您可以更新以下任意一项:

  • NEW_EVENT_FILTERS:用于配置触发器的事件路由的过滤条件;例如,methodName=storage.objects.create 可以更新为 methodName=storage.objects.delete。请注意,触发器创建后,type 事件过滤条件便无法更改。对于其他事件类型,您必须创建新的触发器。
  • NEW_SERVICE_ACCOUNT:与触发器关联的 Identity and Access Management (IAM) 服务账号电子邮件地址。
  • NEW_DESTINATION_WORKFLOW:从触发器接收事件的已部署工作流的 ID。
  • NEW_DESTINATION_WORKFLOW_LOCATION:目标工作流的部署位置。
  • NEW_EVENT_DATA_TYPE:事件载荷的编码;根据事件提供方,这可能是 application/jsonapplication/protobuf

例如,如需更新触发器的服务账号,请运行以下命令:

gcloud eventarc triggers update my-workflows-trigger \
    --service-account=new-serviceaccount@${PROJECT_ID}.iam.gserviceaccount.com

此命令会将名为 my-workflows-trigger 的触发器的服务账号更新为 new-serviceaccount@PROJECT_ID.iam.gserviceaccount.com

REST

如需更新现有触发器,请使用 projects.locations.triggers.patch 方法,并视情况使用 updateMask 查询参数指定要更新的字段列表。

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

  • TRIGGER_NAME:您要更新的触发器的名称。
  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • LOCATION:创建触发器的区域,例如 us-central1
  • SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com:可选。与触发器关联的 Identity and Access Management (IAM) 服务账号电子邮件地址。
  • DESTINATION:可选。指定事件应发送到的目标位置,并包含 Destination 的实例。例如:

    {"destination": {"workflow": "projects/my-project/locations/us-central1/workflows/my-first-workflow"}}

    {"destination": {"cloudRun": {"service": "hello-world", "region": "us-central1"}}}

  • EVENT_FILTER:可选。要过滤的事件属性。仅支持更新 Cloud Audit Logs 触发器的方法类型。例如:

    {"eventFilters": [{"attribute": "methodName", "value": "storage.buckets.create"}, {"attribute": "type", "value": "google.cloud.audit.log.v1.written"}, {"attribute": "serviceName", "value": "storage.googleapis.com"}]}

    请注意,您无法更新 GKE 目标的方法类型。

  • CONTENT_TYPE:可选。事件载荷的编码;根据事件提供方,这可能是 application/jsonapplication/protobuf
  • UPDATE_FIELDS:可选。要更新的字段的逗号分隔列表。如果未提供,则请求中提供的所有字段都会更新。例如 serviceAccount,destination

请求 JSON 正文:

{
  "serviceAccount": "SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com",
  "destination": DESTINATION,
  "eventFilters" EVENT_FILTER,
  "eventDataContentType": "CONTENT_TYPE"
}

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

如果成功,响应正文将包含一个新创建的 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/triggers/TRIGGER_NAME",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

如果 "done" 的值为 false,则表示操作仍在进行中。

删除触发器

您可以删除触发器。

控制台

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

    转到“触发器”

  2. 选择触发器,然后点击 删除

gcloud

gcloud eventarc triggers delete TRIGGER

TRIGGER 替换为触发器的 ID 或完全限定的标识符。

REST

如需删除具有指定名称的触发器,请使用 projects.locations.triggers.delete 方法。

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

  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • LOCATION:创建触发器的区域,例如 us-central1
  • TRIGGER_NAME:要删除的触发器的名称。

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

如果成功,则响应正文包含一个 Operation 实例:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.eventarc.v1.OperationMetadata",
    "createTime": "2024-01-24T17:53:52.834876290Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/triggers/TRIGGER_NAME",
    "verb": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

如果 "done" 的值为 false,则表示操作仍在进行中。

后续步骤