Eventarc 触发器声明您对某个事件或一系列事件感兴趣。如需配置事件路由,您可以为触发器指定过滤条件,包括事件来源和目标 Cloud Run 服务。
Eventarc 通过 HTTP 请求以 CloudEvents 格式将事件传送到事件接收器。
以下说明介绍如何配置到 Cloud Run 服务的事件路由(由直接Firebase Realtime Database 事件触发)。如需了解详情,请参阅支持的直接事件列表。
准备创建触发器
在创建触发器之前,请先完成以下前提条件:
控制台
在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目。
启用 Cloud Logging、Eventarc 和 Eventarc Publishing API。
如果适用,请启用与直接事件相关的 API。例如,对于 Firebase Realtime Database 事件,请启用Firebase Realtime Database 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。例如,对于 Firebase Realtime Database 事件,请启用
firebasedatabase.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 来源。
- 在事件提供方列表中,选择 Firebase Realtime Database。
请注意,关联的 Google Cloud 文档中使用的事件提供方名称可能没有 Cloud 或 Google Cloud 前缀。例如,在控制台中,Memorystore for Redis 称为 Google Cloud Memorystore for Redis。
- 在事件类型列表中,从“直接”事件中选择事件类型。
- 在事件数据内容类型列表中,选择事件载荷的编码。
对于来自 Firebase Realtime Database的直接事件,编码必须是 application/json。
- 在区域列表中,选择生成事件的 Google Cloud 服务所在的区域。
如需了解详情,请参阅 Eventarc 位置。
- 在属性 1 字段中,instance 资源 ID 充当事件过滤条件。选择此过滤条件的运算符:
- 等于
- 路径模式
如需了解详情,请参阅了解路径模式。
- 在属性值 1 字段中,输入要从中接收事件的数据库实例的名称。根据您在上一步选择的运算符,属性值应该是确切的名称或路径模式格式。
- 对于 ref 属性,选择路径模式运算符。
- 在属性值 2 字段中,输入要接收事件的数据库实例路径(在该路径或任何子路径中创建、更新或删除数据时生成事件)。
- 选择将调用您的服务或工作流的服务账号。
或者,您可以创建新的服务账号。
这用于指定与触发器相关联且您之前向其授予 Eventarc 所需的特定角色的 Identity and Access Management (IAM) 服务账号电子邮件。
- 在事件目的地列表中,选择 Cloud Run。
- 选择一项服务。
这是接收触发器事件的服务的名称。该服务必须与触发器位于同一项目中,并在事件生成时,接收作为 HTTP POST 请求发送到其根网址路径 (
/
) 的事件。 - (可选)您可以指定将传入请求发送到的服务网址路径。
这是触发器的事件应该发送到的目的地服务上的相对路径。例如:
/
、/route
、route
、route/subroute
。 - 点击创建。
创建触发器之后,您便无法修改事件来源过滤条件。请创建新触发器,并删除旧触发器。 如需了解详情,请参阅管理触发器。
gcloud
您可以通过运行包含必需和可选标志的 gcloud eventarc triggers create
命令来创建触发器。
gcloud eventarc triggers create TRIGGER \ --location=LOCATION \ --destination-run-service=DESTINATION_RUN_SERVICE \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=EVENT_FILTER_TYPE" \ --event-filters="instance=INSTANCE" \ --event-filters-path-pattern="ref=REF" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
替换以下内容:
TRIGGER
:触发器的 ID 或完全限定标识符。
LOCATION
:Eventarc 触发器的位置。 或者,您可以设置eventarc/location
属性;例如gcloud config set eventarc/location us-central1
。Eventarc 的 Firebase Realtime Database 触发器仅在特定位置提供,并且触发器必须与 Firebase Realtime Database 实例位于同一位置。如需了解详情,请参阅 Eventarc 位置和 Realtime Database 位置。
-
DESTINATION_RUN_SERVICE
:接收触发器事件的 Cloud Run 服务的名称。该服务可以位于任何 Cloud Run 支持位置,无需与触发器位于同一位置。但是,该服务必须与触发器位于同一项目中,并在事件生成时,接收作为 HTTP POST 请求发送到其根网址路径 (/
) 的事件。 -
DESTINATION_RUN_REGION
:(可选)目标 Cloud Run 服务所在的区域。如果未指定,系统将假定服务与触发器位于同一区域。 EVENT_FILTER_TYPE
:Firebase Realtime Database 事件的标识符,可以是以下类型之一:google.firebase.database.ref.v1.created
:在数据库中创建数据时发送事件google.firebase.database.ref.v1.updated
:在数据库中更新数据时发送事件google.firebase.database.ref.v1.deleted
:在数据库中删除数据时发送事件google.firebase.database.ref.v1.written
:在数据库中创建、更新或删除数据时发送事件
INSTANCE
:单个数据库实例,运算符可以是下列其中一项:- 等于;例如
--event-filters="instance=INSTANCE"
。 - 路径模式;例如
--event-filters-path-pattern="instance=INSTANCE"
。如需了解详情,请参阅了解路径模式。
- 等于;例如
REF
:数据库实例中的路径,当在该路径或其任何子路径中创建、更新或删除数据时,您希望从该路径接收事件。SERVICE_ACCOUNT_NAME
:用户管理的服务账号的名称。PROJECT_ID
:您的 Google Cloud 项目 ID。
注意:
- 对于来自 Firebase Realtime Database的直接事件,事件载荷的编码为
application/json
。 - 这些标志是必需的:
--event-filters="type=EVENT_FILTER_TYPE"
--event-filters="instance=INSTANCE"
或--event-filters-path-pattern="instance=INSTANCE"
--event-filters-path-pattern="ref=REF"
- 触发器创建后,事件过滤条件类型便无法更改。对于其他事件类型,您必须创建新的触发器。
--service-account
标志用于指定与触发器关联的 Identity and Access Management (IAM) 服务账号电子邮件。- (可选)您可以使用
--destination-run-path
标志指定触发器的事件应发送到的目标 Cloud Run 服务的相对路径。
示例:
gcloud eventarc triggers create helloworld-trigger \ --location=us-central1 \ --destination-run-service=helloworld-events \ --destination-run-region=us-central1 \ --event-filters="type=google.firebase.database.ref.v1.created" \ --event-filters="instance=test-instance" \ --event-filters-path-pattern="ref=users/*" \ --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
此命令会为标识为 google.firebase.database.ref.v1.created
的事件和标识为 test-instance
的数据库实例中的 users/*
路径创建名为 helloworld-trigger
的触发器。
Terraform
您可以使用 Terraform 为 Cloud Run 目标创建触发器。如需了解详情,请参阅使用 Terraform 创建触发器。
列出触发器
如需确认触发器已创建,您可以使用 Google Cloud CLI 或通过 Google Cloud 控制台列出 Eventarc 触发器。
控制台
在 Google Cloud 控制台中,进入 Eventarc 触发器页面。
此页面会列出所有位置的触发器,并包含名称、区域、事件提供方、目标位置等详细信息。
如需过滤触发器,请执行以下操作:
- 点击 过滤或过滤触发器字段。
- 在属性列表中,选择要作为触发器过滤条件的选项。
您可以选择单个属性,或使用逻辑运算符
OR
添加更多属性。如需对触发器进行排序,请点击任意受支持的列标题旁边的
排序。
gcloud
运行以下命令可列出触发器:
gcloud eventarc triggers list --location=-
此命令会列出所有位置的触发器,并包含名称、类型、目标位置和状态等详细信息。