通过创建总线和注册来发布和接收事件(控制台)
本快速入门介绍了如何通过创建 Eventarc Advanced 总线并在项目中注册来发布和接收事件消息。 Google Cloud
借助总线,您可以集中管理系统中的消息流,并充当路由器。它会接收来自消息来源或由提供方发布的事件消息,并根据注册信息对其进行评估。
注册会标识对特定总线的订阅,并定义消息的匹配条件,以便将消息相应地路由到一个或多个目的地。
在本快速入门中,您将执行以下操作:
创建子网并启用专用 Google 访问通道。
创建网络连接。
创建 Artifact Registry 标准制品库。
将事件接收器服务部署到 Cloud Run。
创建 Eventarc Advanced 总线。
创建 Eventarc Advanced 注册。
向总线发布事件消息。
在 Cloud Run 日志中查看事件数据。
您可以使用 Google Cloud 控制台完成本快速入门中的大多数步骤。如需使用 Google Cloud CLI 完成所有步骤,请参阅通过创建总线和注册发布和接收事件 (gcloud CLI)。
准备工作
您的组织定义的安全限制条件可能会导致您无法完成以下步骤。如需了解相关问题排查信息,请参阅在受限的 Google Cloud 环境中开发应用。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs.
- 本快速入门中的部分步骤需要您使用 gcloud CLI:
- 在以下开发环境之一中设置 gcloud CLI:
Cloud Shell
如需使用已设置 gcloud CLI 的在线终端,请激活 Cloud Shell:
Cloud Shell 会话会在页面底部启动,并显示命令行提示符。该会话可能需要几秒钟来完成初始化。
本地 shell
如需使用本地开发环境,请按照以下步骤操作:
- 选择您的 Google Cloud 项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID
替换为您的 Google Cloud 项目名称。 - 更新
gcloud
组件:gcloud components update
- 使用您的账号登录:
gcloud auth login
- 设置本快速入门中使用的配置变量:
REGION=us-central1
- 在以下开发环境之一中设置 gcloud CLI:
-
如果您是项目创建者,则会被授予基本 Owner 角色 (
roles/owner
)。默认情况下,此 Identity and Access Management (IAM) 角色可提供完全访问大多数 Google Cloud资源所需的权限,您可以跳过此步骤。如果您不是项目创建者,则必须向主账号授予项目的必需权限。例如,主账号可以是 Google 账号(针对最终用户)或服务账号(针对应用和计算工作负载)。
请注意,默认情况下,Cloud Build 权限包含上传和下载 Artifact Registry 工件的权限。
所需权限
如需获得完成本快速入门所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
Cloud Build Editor (
roles/cloudbuild.builds.editor
) -
Cloud Run Admin (
roles/run.admin
) -
Eventarc Developer (
roles/eventarc.developer
) -
Eventarc Message Bus Admin (
roles/eventarc.messageBusAdmin
) -
Logs View Accessor (
roles/logging.viewAccessor
) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
Cloud Build Editor (
- 向 Compute Engine 默认服务账号授予项目角色。构建和部署容器映像需要这些角色。
- 在 Google Cloud 控制台中,转到 IAM 页面。
如需修改已拥有资源角色的服务账号的角色,请找到包含该主账号的行。
或
如需向服务账号授予角色(该服务账号在资源上没有任何角色),请点击
Grant Access(授予访问权限),然后使用以下表单输入 Compute Engine 默认服务账号的标识符:PROJECT_NUMBER-compute@developer.gserviceaccount.com
将
PROJECT_NUMBER
替换为您的 Google Cloud项目编号。您可以在 Google Cloud 控制台的欢迎页面上找到项目编号。- 点击相应行中的 修改主账号。
- 点击 添加角色或 添加其他角色。
- 在选择角色列表中,过滤出并选择以下角色:
- Artifact Registry Writer:用于上传 Artifact Registry 工件
- 日志写入器:用于将日志写入 Cloud Logging
- 存储对象用户:用于访问 Cloud Storage 对象
- 点击保存。
- 在 Google Cloud 控制台中,转到 IAM 页面。
- 默认情况下,只有 Project Owner、Project Editor 以及 Cloud Run Admin 和 Invoker 才能调用 Cloud Run 服务。如需设置身份验证,请向服务账号授予 Google Cloud 项目的 Cloud Run Invoker 角色。为了进行测试,您将此服务账号附加到 Eventarc Advanced 流水线,以表示该流水线的身份。
- 在 Google Cloud 控制台中,转到服务账号页面。
- 点击 创建服务账号。
- 输入服务账号名称。
- 点击创建并继续。
- 在选择角色列表中,过滤出并选择 Cloud Run Invoker 角色。
- 点击完成。
请注意,您可以通过以下任一方式配置谁可以访问您的 Cloud Run 服务:
- 向选定的服务账号或群组授予此权限,以允许访问服务。所有请求都必须具有 HTTP 授权标头,其中包含由 Google 为其中一个已获授权的服务账号签名的 OpenID Connect 令牌。本快速入门将以这种方式配置访问权限。
- 向
allUsers
授予此权限,以允许未经身份验证的访问。
如需了解详情,请参阅 Cloud Run 的访问权限控制。
- 在 Google Cloud 控制台中,转到服务账号页面。
创建子网并启用专用 Google 访问通道
除非您创建组织政策来禁止 VPC 网络,否则新 Google Cloud项目会首先创建一个默认的 Virtual Private Cloud (VPC) 网络(自动模式 VPC 网络),此网络在每个地区内都包含一个子网。子网具有与之关联的 IP 地址范围。
由于您要使用 DNS 地址将消息路由到 Cloud Run 目的地,因此必须在网络连接中使用的子网上启用专用 Google 访问通道;否则,DNS 地址将无法解析。如需详细了解专用网络和 Cloud Run,请参阅接收来自 VPC 网络的请求。
在项目的默认网络中创建子网,然后启用专用 Google 访问通道:
在 Google Cloud 控制台中,进入 VPC 网络页面。
在 VPC 网络列表中,点击默认名称。
在 VPC 网络详情页面中,点击子网标签页。
点击
添加子网。在添加子网窗格中,执行以下操作:
- 输入名称,例如
my-subnet
。 - 在区域列表中,选择 us-central1。
- 为子网输入主要 IPv4 地址范围,例如
10.8.0.0/24
。 - 对于专用 Google 访问通道,选择开启。
- 接受所有其他默认设置。
- 点击添加。
- 输入名称,例如
子网 IP 范围在一个 VPC 网络和对等 VPC 网络中必须唯一且不得互相重叠。如需详细了解子网类型和有效的子网范围,请参阅子网。
创建网络连接
网络连接是一种资源,它允许提供方 VPC 网络发起与使用方 VPC 网络的连接。为了发布事件,Eventarc Advanced 使用网络连接,与 VPC 网络中托管的端点建立连接。
在包含事件目标端点的同一网络和区域中创建网络连接,以自动接受与该网络连接关联的任何 Private Service Connect 接口发出的连接:
在 Google Cloud 控制台中,转到 Private Service Connect。
点击网络连接标签页。
点击
创建网络连接。输入名称,例如
my-network-attachment
。在网络列表中,选择默认。
在区域列表中,选择 us-central1(爱荷华)。
在子网列表中,选择您之前创建的子网。
点击自动接受所有项目的连接。
点击创建网络连接。
创建 Artifact Registry 标准制品库
创建 Artifact Registry 标准制品库以存储您的容器映像。
在 Google Cloud 控制台中,进入制品库页面。
点击
创建制品库。输入名称,例如
my-repo
。对于项目中的每个代码库位置,代码库名称不得重复。
在仓库格式中,选择 Docker。
在区域列表中,选择 us-central1(爱荷华)。
接受所有其他默认设置。
点击创建。
将事件接收器服务部署到 Cloud Run
部署记录事件内容的 Cloud Run 服务。此服务只能通过同一项目中的 VPC 网络访问,并且无法直接访问服务网址,因为该服务仅允许经过身份验证的调用。
在终端中,克隆 GitHub 代码库:
git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
切换到包含 Cloud Run 示例代码的目录:
cd eventarc-samples/eventarc-advanced-quickstart/
构建 Docker 容器映像,并将映像推送到代码库:
gcloud builds submit \ --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1
将
REPOSITORY
替换为您的 Artifact Registry 制品库的名称。将容器映像部署到 Cloud Run:
在 Google Cloud 控制台中,转到 Cloud Run 页面。
依次点击 > 服务。
部署容器选择从现有容器映像部署一个修订版本。
对于容器映像网址,点击选择以指定您之前创建的 Artifact Registry 容器映像。
(可选)您可以更改服务名称,例如将其更改为
my-service
。在区域列表中,选择 us-central1(爱荷华)。
对于身份验证,请选择需要进行身份验证。
对于入站,选择内部。
接受所有其他默认设置。
点击创建,然后等待部署完成。
创建 Eventarc Advanced 总线
总线会接收来自消息来源或由提供方发布的事件消息,并充当消息路由器。
如需了解详情,请参阅创建用于路由消息的总线。
在 Google Cloud 控制台中,前往 Eventarc > 总线页面。
点击
创建公交车。在创建公交车页面上,执行以下操作:
- 输入总线名称,例如
my-bus
。 - 在区域列表中,选择 us-central1(爱荷华)。
- 输入总线名称,例如
接受所有其他默认设置。
点击创建。
创建 Eventarc Advanced 注册
注册会确定要将哪些消息路由到目的地,还会指定用于为事件消息配置目的地的流水线。
如需了解详情,请参阅创建注册以接收事件。
使用 Google Cloud 控制台时,您可以同时创建注册和流水线。
如需创建注册,请在 Google Cloud 控制台中依次前往 Eventarc > 流水线页面。
点击
创建流水线。在流水线详情窗格中,执行以下操作:
- 输入流水线名称,例如
my-pipeline
。 - 在区域列表中,选择 us-central1(爱荷华)。流水线必须在与总线相同的区域内创建。
- 接受所有其他默认设置。
- 点击继续。
- 输入流水线名称,例如
在注册窗格中,执行以下操作:
- 点击添加注册。
- 输入注册名称,例如
my-enrollment
。 - 在 Eventarc Advanced 总线列表中,选择您之前创建的总线。
在 CEL 表达式字段中,使用 CEL 编写评估表达式。例如:
message.type == "hello-world-type"
点击完成。
点击继续。
在事件中介窗格中,再次点击继续。
在目标窗格中,执行以下操作:
在目标类型列表中,选择 Cloud Run 服务(通过 HTTP),然后选择您之前创建的 Cloud Run 服务。
在网络连接列表中,选择您之前创建的网络连接。
选中启用身份验证复选框。
在身份验证标头列表中,选择 OIDC 令牌。
在服务账号列表中,选择您之前创建的将调用目标服务的服务账号。此服务账号电子邮件地址用于生成 OIDC 令牌。
点击创建。
向总线发布事件消息
如需直接将消息发布到总线,您可以使用 gcloud beta eventarc message-buses publish
命令或向 Eventarc Publishing REST API 发送请求。如需了解详情,请参阅直接发布事件。
消息必须采用 CloudEvents 格式,后者是一种以通用方式描述事件数据的规范。data
元素是事件的载荷。任何格式正确的 JSON 都可以填入此字段。如需详细了解 CloudEvents 上下文属性,请参阅事件格式。
使用 gcloud CLI 以及 --event-data
和其他事件属性标志将事件发布到 Eventarc Advanced 总线:
gcloud beta eventarc message-buses publish BUS_NAME \
--event-data='{"key": "hello-world-data"}' \
--event-id=hello-world-id-1234 \
--event-source=hello-world-source \
--event-type=hello-world-type \
--event-attributes="datacontenttype=application/json" \
--location=$REGION
或者,使用 gcloud CLI 和 --json-message
标志将事件作为 JSON 消息发布到 Eventarc Advanced 总线:
gcloud beta eventarc message-buses publish BUS_NAME \
--location=$REGION \
--json-message='{"id": "hello-world-id-1234", "type":
"hello-world-type", "source":
"hello-world-source", "specversion": "1.0", "data":
{"key": "hello-world-data"}}'
发布事件后,您应该会收到一条“事件已成功发布”消息。
在 Cloud Run 日志中查看事件数据
将事件发布到 Eventarc Advanced 总线后,您可以查看 Cloud Run 服务的日志,以验证事件是否已按预期接收。
在 Google Cloud 控制台中,转到 Cloud Run 页面。
在 Services 页面上,点击您的服务的名称。
点击日志标签页。
您可以过滤日志条目并返回输出。例如,您可以搜索
hello-world-data
。查找如下日志条目:
2025-02-27 08:36:44.350 EST [2025-02-27 13:36:44,352] INFO in server: Body: b'{"key": "hello-world-data"}'
您已成功创建 Eventarc Advanced 总线和注册,向总线发布了事件消息,并在事件接收器服务的日志中验证了预期结果。
清理
完成本快速入门中所述的任务后,您可以通过删除所创建的资源来避免继续计费:
删除 Eventarc Advanced 资源:
或者,您也可以删除 Google Cloud 项目,以避免产生费用。删除 Google Cloud 项目后,系统会停止对该项目中使用的所有资源计费。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.