Eventarc 触发器声明您对某个事件或一系列事件感兴趣。如需配置事件路由,您可以为触发器指定过滤条件,包括事件来源和目标 Cloud Run 服务。
Eventarc 通过 HTTP 请求以 CloudEvents 格式将事件传送到事件接收器。
以下说明介绍如何配置到 Cloud Run 服务的事件路由(由直接Cloud Pub/Sub 事件触发);在这种情况下,消息会发布到 Pub/Sub 主题。如需了解详情,请参阅支持的直接事件列表。
准备创建触发器
在创建触发器之前,请先完成以下前提条件:
控制台
在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目。
启用 Cloud Logging、Eventarc 和 Eventarc Publishing API。
如果适用,请启用与直接事件相关的 API。例如,对于 Cloud Pub/Sub 事件,请启用Cloud Pub/Sub API。
如果您还没有用户管理的服务账号,请创建一个,然后为其授予必要的角色和权限,以便 Eventarc 可以管理目标服务的事件。
在 Google Cloud 控制台中,进入创建服务账号页面。
选择您的项目。
在服务账号名称字段中,输入一个名称。Google Cloud 控制台会根据此名称填充服务账号 ID 字段。
在服务账号说明字段中,输入说明。例如
Service account for event trigger
。点击创建并继续。
如需提供适当的访问权限,请在选择角色列表中,针对经过身份验证或未经身份验证的调用选择要向服务账号授予的所需 Identity and Access Management (IAM) 角色。如需了解详情,请参阅 Cloud Run 目标的角色和权限。
如需添加其他角色,请点击
添加其他角色,然后添加其他各个角色。点击继续。
如需完成账号的创建过程,请点击完成。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
启用 Cloud Logging、Eventarc 和 Eventarc Publishing API。
gcloud services enable logging.googleapis.com \ eventarc.googleapis.com \ eventarcpublishing.googleapis.com
如果适用,请启用与直接事件相关的 API。例如,对于 Cloud Pub/Sub 事件,请启用
pubsub.googleapis.com
。如果您还没有用户管理的服务账号,请创建一个,然后为其授予必要的角色和权限,以便 Eventarc 可以管理目标服务的事件。
创建服务账号:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
将
SERVICE_ACCOUNT_NAME
替换为服务账号的名称。该名称必须介于 6 到 30 个字符之间,且可以包含小写字母数字字符和短划线。在服务账号创建完毕后,无法再更改其名称。为经过身份验证或未经身份验证的调用授予所需的 Identity and Access Management (IAM) 角色或权限。如需了解详情,请参阅 Cloud Run 目标的角色和权限。
创建触发器
您可以使用 Google Cloud CLI 或通过 Google Cloud 控制台创建 Eventarc 触发器。
控制台
- 在 Google Cloud 控制台中,进入 Eventarc 触发器页面。
- 点击 创建触发器。
- 输入触发器名称。
这是触发器的 ID,必须以字母开头。最多可包含 63 个小写字母、数字或连字符。
- 在触发器类型部分,选择 Google 来源。
- 在事件提供方列表中,选择 Cloud Pub/Sub。
请注意,关联的 Google Cloud 文档中使用的事件提供方名称可能没有 Cloud 或 Google Cloud 前缀。例如,在控制台中,Memorystore for Redis 称为 Google Cloud Memorystore for Redis。
- 在事件类型列表中,从“直接”事件中选择 google.cloud.pubsub.topic.v1.messagePublished。
- 在选择 Cloud Pub/Sub 主题列表中,选择一个主题或接受默认值无,以便系统为您创建一个新主题。
- 在区域列表中,选择生成事件的 Google Cloud 服务所在的区域。
如需了解详情,请参阅 Eventarc 位置。
- 选择将调用您的服务或工作流的服务账号。
或者,您可以创建新的服务账号。
这用于指定与触发器相关联且您之前向其授予 Eventarc 所需的特定角色的 Identity and Access Management (IAM) 服务账号电子邮件。
- 在事件目的地列表中,选择 Cloud Run。
- 选择一项服务。
这是接收触发器事件的服务的名称。该服务必须与触发器位于同一项目中,并在事件生成时,接收作为 HTTP POST 请求发送到其根网址路径 (
/
) 的事件。 - (可选)您可以指定将传入请求发送到的服务网址路径。
这是触发器的事件应该发送到的目的地服务上的相对路径。例如:
/
、/route
、route
、route/subroute
。 - 点击创建。
创建触发器之后,您便无法修改事件来源过滤条件。请创建新触发器,并删除旧触发器。 如需了解详情,请参阅管理触发器。
gcloud
您可以通过运行包含必需和可选标志的 gcloud eventarc triggers create
命令来创建触发器。
Pub/Sub 消息(现有主题)
gcloud eventarc triggers create TRIGGER \ --location=LOCATION \ --destination-run-service=DESTINATION_RUN_SERVICE \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
替换以下内容:
TRIGGER
:触发器的 ID 或完全限定标识符。LOCATION
:Eventarc 触发器的位置。 或者,您可以设置eventarc/location
属性;例如gcloud config set eventarc/location us-central1
。Eventarc 的 Pub/Sub 触发器仅在单区域位置提供,您无法创建全球 Eventarc 触发器。如需了解详情,请参阅 Eventarc 位置。
-
DESTINATION_RUN_SERVICE
:接收触发器事件的 Cloud Run 服务的名称。该服务可以位于任何 Cloud Run 支持位置,无需与触发器位于同一位置。但是,该服务必须与触发器位于同一项目中,并在事件生成时,接收作为 HTTP POST 请求发送到其根网址路径 (/
) 的事件。 -
DESTINATION_RUN_REGION
:(可选)目标 Cloud Run 服务所在的区域。如果未指定,系统将假定服务与触发器位于同一区域。 PROJECT_ID
:您的 Google Cloud 项目 ID。
TOPIC_ID
:现有 Pub/Sub 主题的 ID。主题必须与触发器位于同一项目中。SERVICE_ACCOUNT_NAME
:用户管理的服务账号的名称。
注意:
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
标志是必需的,并且无法更改。对于其他事件类型,您必须创建新的触发器。- 每个触发器可以有多个事件过滤条件,在一个
--event-filters
=[ATTRIBUTE
=VALUE
,...] 标志内以英文逗号分隔,您也可以重复使用该标志来添加更多过滤条件。只有符合所有过滤条件的事件会被发送到目的地。不支持通配符和正则表达式。 --transport-topic
标志用于指定现有 Pub/Sub 主题的 ID 或其完全限定标识符。- (可选)您可以使用
--destination-run-path
标志指定触发器的事件应发送到的目的地 Cloud Run 服务的相对路径。 - 默认情况下,为 Eventarc 创建的 Pub/Sub 订阅会持续存在(无论其活跃状态如何),并且不会过期。如需更改非活跃时长,请参阅管理订阅。
示例:
gcloud eventarc triggers create helloworld-trigger \ --location=us-central1 \ --destination-run-service=helloworld-events \ --destination-run-region=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/${PROJECT_ID}/topics/${TOPIC_NAME} --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
此命令会为 projects/${PROJECT_ID}/topics/${TOPIC_ID}
标识的 Pub/Sub 主题创建一个名为 helloworld-trigger
的触发器。
Pub/Sub 消息(新 主题)
gcloud eventarc triggers create TRIGGER \ --location=LOCATION \ --destination-run-service=DESTINATION_RUN_SERVICE \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
替换以下内容:
TRIGGER
:触发器的 ID 或完全限定标识符。LOCATION
:Eventarc 触发器的位置。 或者,您可以设置eventarc/location
属性;例如gcloud config set eventarc/location us-central1
。Eventarc 的 Pub/Sub 触发器仅在单区域位置提供,您无法创建全球 Eventarc 触发器。如需了解详情,请参阅 Eventarc 位置。
-
DESTINATION_RUN_SERVICE
:接收触发器事件的 Cloud Run 服务的名称。该服务可以位于任何 Cloud Run 支持位置,无需与触发器位于同一位置。但是,该服务必须与触发器位于同一项目中,并在事件生成时,接收作为 HTTP POST 请求发送到其根网址路径 (/
) 的事件。 -
DESTINATION_RUN_REGION
:(可选)目标 Cloud Run 服务所在的区域。如果未指定,系统将假定服务与触发器位于同一区域。 SERVICE_ACCOUNT_NAME
:用户管理的服务账号的名称。PROJECT_ID
:您的 Google Cloud 项目 ID。
注意:
--event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
标志是必需的,并且无法更改。对于其他事件类型,您必须创建新的触发器。- 每个触发器可以有多个事件过滤条件,在一个
--event-filters
=[ATTRIBUTE
=VALUE
,...] 标志内以英文逗号分隔,您也可以重复使用该标志来添加更多过滤条件。只有符合所有过滤条件的事件会被发送到目的地。不支持通配符和正则表达式。 - (可选)您可以使用
--destination-run-path
标志指定触发器的事件应发送到的目的地 Cloud Run 服务的相对路径。 - 默认情况下,为 Eventarc 创建的 Pub/Sub 订阅会持续存在(无论其活跃状态如何),并且不会过期。如需更改非活跃时长,请参阅管理订阅。
示例:
gcloud eventarc triggers create helloworld-trigger \ --location=us-central1 \ --destination-run-service=helloworld-events \ --destination-run-region=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
此命令会创建一个新的 Pub/Sub 主题并为它创建一个名为 helloworld-trigger
的触发器。
作为最佳实践,Google 建议您不要重复使用由触发器创建的 Pub/Sub 主题,因为删除 Eventarc 触发器也会删除该触发器创建的所有 Pub/Sub 主题。
Terraform
您可以使用 Terraform 为 Cloud Run 目标创建触发器。如需了解详情,请参阅使用 Terraform 创建触发器。
列出触发器
如需确认触发器已创建,您可以使用 Google Cloud CLI 或通过 Google Cloud 控制台列出 Eventarc 触发器。
控制台
在 Google Cloud 控制台中,进入 Eventarc 触发器页面。
此页面会列出所有位置的触发器,并包含名称、区域、事件提供方、目标位置等详细信息。
如需过滤触发器,请执行以下操作:
- 点击 过滤或过滤触发器字段。
- 在属性列表中,选择要作为触发器过滤条件的选项。
您可以选择单个属性,或使用逻辑运算符
OR
添加更多属性。如需对触发器进行排序,请点击任意受支持的列标题旁边的
排序。
gcloud
运行以下命令可列出触发器:
gcloud eventarc triggers list --location=-
此命令会列出所有位置的触发器,并包含名称、类型、目标位置和状态等详细信息。