通过创建总线和注册来发布和接收事件(控制台)
本快速入门介绍了如何在 Google Cloud项目中创建 Eventarc Advanced 总线并进行注册,以发布和接收事件消息。
总线充当中央路由器,接收来自事件源或提供方发布的消息。
注册通过处理流水线将总线接收到的消息路由到一个或多个目的地。
在本快速入门中,您将执行以下操作:
创建 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - 本快速入门中的几个步骤需要您使用 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 (
- 出于测试目的,请创建一个服务账号,并向其授予完成此快速入门所需的角色。使用该服务账号构建和部署容器映像,并将其附加到 Eventarc 高级流水线以表示该流水线的身份。
- 在 Google Cloud 控制台中,打开服务账号页面。
- 点击 创建服务账号。
- 输入服务账号名称。
- 点击创建并继续。
- 在选择角色列表中,过滤并选择以下角色:
- Artifact Registry Writer:用于上传 Artifact Registry 制品
- Logs Writer: 用于将日志写入 Cloud Logging
- Storage Admin:用于访问 Cloud Storage 对象
- Cloud Run Invoker:用于调用 Cloud Run
- 点击完成。
请注意,您可以通过以下任一方式配置谁可以访问您的 Cloud Run 服务:
- 向选定的服务账号或群组授予此权限,以允许访问服务。所有请求都必须具有 HTTP 授权标头,其中包含由 Google 为其中一个已获授权的服务账号签名的 OpenID Connect 令牌。这是本快速入门中配置访问权限的方式。
- 向
allUsers授予权限,以允许未经身份验证的访问。
如需了解详情,请参阅 Cloud Run 的访问权限控制。
- 在 Google Cloud 控制台中,打开服务账号页面。
在 Google Cloud 控制台中,前往制品库页面。
点击 创建代码库。
输入名称,例如
my-repo。对于项目中的每个代码库位置,代码库名称不得重复。
对于仓库格式,请选择 Docker。
在区域列表中,选择 us-central1(爱荷华)。
接受所有其他默认设置。
点击创建。
在终端中,克隆 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 \ --service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --default-buckets-behavior=regional-user-owned-bucket
替换以下内容:
REPOSITORY:您的 Artifact Registry 代码库的名称。SERVICE_ACCOUNT_NAME:您之前创建的服务账号的名称。
将容器映像部署到 Cloud Run:
在 Google Cloud 控制台中,前往 Cloud Run 页面。
依次点击 部署容器 > 服务。
选择从现有容器映像部署一个修订版本。
对于容器映像网址,点击选择以指定您之前创建的 Artifact Registry 容器映像。
您可以视需要更改服务名称,例如更改为
my-service。在区域列表中,选择 us-central1(爱荷华)。
对于身份验证,请选择需要进行身份验证。
此配置会将服务配置为仅允许经过身份验证的调用。
对于入站,选择全部。
这样一来,系统会允许所有请求,包括直接从互联网发送到
run.app网址的请求。如需了解详情,请参阅限制 Cloud Run 的网络入站流量。接受所有其他默认设置。
点击创建,然后等待部署完成。
在 Google Cloud 控制台中,前往 Eventarc > 总线页面。
点击 创建公交。
在创建公交线路页面上,执行以下操作:
- 输入总线名称,例如
my-bus。 - 在区域列表中,选择 us-central1(爱荷华)。
- 输入总线名称,例如
接受所有其他默认设置。
点击创建。
如需创建注册,请在 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 令牌。
点击创建。
在 Google Cloud 控制台中,前往 Cloud Run 页面。
在服务页面上,点击您的服务名称。
点击日志标签页。
您可以过滤日志条目并返回输出。例如,您可以搜索
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 资源:
- 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.
创建 Artifact Registry 标准制品库
创建 Artifact Registry 标准制品库以存储您的容器映像。
将事件接收器服务部署到 Cloud Run
部署记录事件内容的 Cloud Run 服务。系统还支持其他事件目标,例如 Pub/Sub 主题、Workflows 或 HTTP 端点。如需了解详情,请参阅事件提供方和目的地。
创建 Eventarc Advanced 总线
总线接收来自消息源或由提供方发布的事件消息,并充当消息路由器。
如需了解详情,请参阅创建用于路由消息的总线。
创建 Eventarc Advanced 注册
注册可确定哪些消息会路由到目的地,还会指定用于为事件消息配置目的地的流水线。
如需了解详情,请参阅创建注册以接收事件。
使用 Google Cloud 控制台时,您可以同时创建注册和流水线。
向总线发布事件消息
如需直接向总线发布消息,您可以使用 gcloud eventarc message-buses publish 命令或向 Eventarc Publishing REST API 发送请求。如需了解详情,请参阅直接发布事件。
消息必须采用 CloudEvents 格式,这是一种以通用方式描述事件数据的规范。data 元素是事件的载荷。此字段中可以包含任何格式正确的 JSON。如需详细了解 CloudEvents 上下文属性,请参阅事件格式。
使用 gcloud CLI 和 --event-data 及其他事件属性标志将事件发布到 Eventarc Advanced 总线:
gcloud 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 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 服务的日志,验证事件是否按预期接收。
您已成功创建 Eventarc Advanced 总线和注册,向总线发布事件消息,并在事件接收器服务的日志中验证预期结果。
清理
完成此快速入门中描述的任务后,您可以通过删除所创建的资源来避免继续计费:
或者,您也可以删除 Google Cloud 项目,以避免产生费用。删除 Google Cloud 项目后,系统即会停止对该项目中使用的所有资源计费。