使用 Pub/Sub 消息接收事件 (gcloud CLI)
本快速入门介绍如何部署使用 Pub/Sub 接收事件的未经身份验证的 Cloud Run 服务。
在本快速入门中,您将执行以下操作:
将事件接收器服务部署到 Cloud Run。
创建 Eventarc 触发器。
向 Pub/Sub 主题发布消息以生成事件,并在 Cloud Run 日志中查看事件。
准备工作
您的组织定义的安全限制条件可能会导致您无法完成以下步骤。如需了解相关问题排查信息,请参阅 在受限的环境中开发应用 Google Cloud 。
- 登录您的 Google Cloud 账号。如果您是 Google Cloud的新用户, 请创建账号,以评估我们的产品在 实际场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需角色
- 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
-
创建项目:如需创建项目,您需要拥有 Project Creator 角色
(
roles/resourcemanager.projectCreator),该角色包含resourcemanager.projects.create权限。了解如何授予 角色。
-
创建 Google Cloud 项目:
gcloud projects create PROJECT_ID
将
PROJECT_ID替换为您要创建的 Google Cloud 项目的名称。 -
选择您创建的 Google Cloud 项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID替换为您的 Google Cloud 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用 Cloud Run、Cloud Logging、Pub/Sub 和 Eventarc API:
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予 角色。gcloud services enable run.googleapis.com
logging.googleapis.com pubsub.googleapis.com eventarc.googleapis.com -
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需角色
- 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
-
创建项目:如需创建项目,您需要拥有 Project Creator 角色
(
roles/resourcemanager.projectCreator),该角色包含resourcemanager.projects.create权限。了解如何授予 角色。
-
创建 Google Cloud 项目:
gcloud projects create PROJECT_ID
将
PROJECT_ID替换为您要创建的 Google Cloud 项目的名称。 -
选择您创建的 Google Cloud 项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID替换为您的 Google Cloud 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用 Cloud Run、Cloud Logging、Pub/Sub 和 Eventarc API:
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予 角色。gcloud services enable run.googleapis.com
logging.googleapis.com pubsub.googleapis.com eventarc.googleapis.com - 更新 Google Cloud CLI 组件:
gcloud components update
- 使用您的账号登录:
gcloud auth login
- 设置本快速入门中使用的配置变量:
gcloud config set run/region us-central1 gcloud config set run/platform managed gcloud config set eventarc/location us-central1
-
如果您是项目创建者,则会被授予 基本 Owner 角色 (
roles/owner)。默认情况下,此 Identity and Access Management (IAM) 角色 可提供完全访问大多数 Google Cloud 资源所需的权限,您可以跳过此步骤。如果您不是项目创建者,则必须向主账号授予项目的必需权限。例如,主账号可以是 Google 账号(针对最终用户)或服务账号(针对应用和计算工作负载)。如需了解详情,请参阅事件目标位置的角色和权限页面。
所需权限
如需获得完成本快速入门所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
Cloud Run Admin (
roles/run.admin) -
Eventarc Admin (
roles/eventarc.admin) -
Logs View Accessor (
roles/logging.viewAccessor) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin) -
Pub/Sub Publisher (
roles/pubsub.publisher) -
Service Account Admin (
roles/iam.serviceAccountAdmin) -
Service Account User (
roles/iam.serviceAccountUser) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
Cloud Run Admin (
- 如果您在 2021 年 4 月 8 日或之前启用了 Cloud Pub/Sub 服务代理,以支持经过身份验证的 Pub/Sub 推送请求,请向该服务代理授予 Service Account Token Creator 角色 (
roles/iam.serviceAccountTokenCreator)。否则,系统会默认授予此角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
将 PROJECT_NUMBER 替换为您的 Google Cloud
项目编号。您可以在
控制台
的欢迎页面上,或通过运行以下命令来查找项目编号: Google Cloud
gcloud projects describe PROJECT_ID --format='value(projectNumber)'
将事件接收器部署到 Cloud Run
部署 Cloud Run 服务,该服务将使用预构建的映像 us-docker.pkg.dev/cloudrun/container/hello 接收和记录事件:
gcloud run deploy helloworld-events-pubsub-quickstart \
--image=us-docker.pkg.dev/cloudrun/container/hello \
--allow-unauthenticated
当您看到服务网址时,表示部署完成。
创建 Eventarc 触发器
当消息发布到 Pub/Sub 主题时,事件触发器会将消息发送到部署在 Cloud Run 上的事件接收器服务。
创建一个触发器来监听 Pub/Sub 消息:
新的 Pub/Sub 主题
gcloud eventarc triggers create events-pubsub-trigger \ --destination-run-service=helloworld-events-pubsub-quickstart \ --destination-run-region=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"这会创建一个新的 Pub/Sub 主题和一个名为
events-pubsub-trigger的触发器。现有 Pub/Sub 主题
gcloud eventarc triggers create events-pubsub-trigger \ --destination-run-service=helloworld-events-pubsub-quickstart \ --destination-run-region=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 IDTOPIC_ID:现有 Pub/Sub 主题的 ID
这将为现有 Pub/Sub 主题创建一个名为
events-pubsub-trigger的触发器。请注意,首次在 Google Cloud 项目中创建 Eventarc 触发器时,预配 Eventarc 服务代理可能会有延迟。通常,您可以尝试再次创建触发器,以解决此问题。如需了解详情,请参阅 权限遭拒错误。
确认触发器已成功创建:
gcloud eventarc triggers list --location=us-central1events-pubsub-trigger列出的目标位置是 Cloud Run 服务helloworld-events-pubsub-quickstart。
生成并查看 Pub/Sub 主题事件
您可以通过向 Pub/Sub 主题发布消息来生成 Eventarc 事件。
查找 Pub/Sub 主题并将其设置为环境变量:
export RUN_TOPIC=$(gcloud eventarc triggers describe events-pubsub-trigger \ --format='value(transport.pubsub.topic)')向 Pub/Sub 主题发布消息以生成事件:
gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"事件会被路由到 Cloud Run 服务,该服务会记录事件消息。
如需查看服务创建的与事件相关的日志条目,请运行以下命令:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
查找类似如下的日志条目:
jsonPayload: ... message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World!'
恭喜!您已成功将事件接收器服务部署到 Cloud Run,创建 Eventarc 触发器,在 Pub/Sub 中生成事件并在 Cloud Run 日志中查看该事件。
清理
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。
您可以:
-
此操作还会删除关联的 Pub/Sub 主题。
或者,您也可以删除 Google Cloud 项目,以避免产生费用。 删除您的 Google Cloud 项目后,系统即会停止对该项目中使用的所有资源 计费。
删除项目: Google Cloud
gcloud projects delete PROJECT_ID
如果您打算探索多个教程和快速入门,重复使用项目可以帮助您避免超出项目配额上限。