使用 Pub/Sub 消息接收事件 (gcloud CLI)

本快速入门介绍如何部署使用 Pub/Sub 接收事件的未经身份验证的 Cloud Run 服务。

在本快速入门中,您将执行以下操作:

  1. 将事件接收器服务部署到 Cloud Run。

  2. 创建 Eventarc 触发器。

  3. 向 Pub/Sub 主题发布消息以生成事件,并在 Cloud Run 日志中查看事件。

准备工作

您的组织定义的安全限制条件可能会导致您无法完成以下步骤。如需了解相关问题排查信息,请参阅在受限的 Google Cloud 环境中开发应用

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Run, Cloud Logging, Pub/Sub, and Eventarc APIs:

    gcloud services enable run.googleapis.com logging.googleapis.com pubsub.googleapis.com eventarc.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Cloud Run, Cloud Logging, Pub/Sub, and Eventarc APIs:

    gcloud services enable run.googleapis.com logging.googleapis.com pubsub.googleapis.com eventarc.googleapis.com
  12. 更新 Google Cloud CLI 组件:
    gcloud components update
  13. 使用您的账号登录:
    gcloud auth login
  14. 设置本快速入门中使用的配置变量:
    gcloud config set run/region us-central1
    gcloud config set run/platform managed
    gcloud config set eventarc/location us-central1
  15. 如果您是项目创建者,则会被授予基本 Owner 角色 (roles/owner)。默认情况下,此 Identity and Access Management (IAM) 角色可提供完全访问大多数 Google Cloud 资源所需的权限,您可以跳过此步骤。

    如果您不是项目创建者,则必须向主账号授予项目的必需权限。例如,主账号可以是 Google 账号(针对最终用户)或服务账号(针对应用和计算工作负载)。如需了解详情,请参阅事件目标位置的角色和权限页面。

    所需权限

    如需获得完成本快速入门所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

    如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

  16. 如果您在 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
  17. 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 上的事件接收器服务。

  1. 创建一个触发器来监听 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 项目 ID
    • TOPIC_ID:现有 Pub/Sub 主题的 ID

    这将为现有 Pub/Sub 主题创建一个名为 events-pubsub-trigger 的触发器。

    请注意,首次在 Google Cloud 项目中创建 Eventarc 触发器时,预配 Eventarc 服务代理可能会有延迟。通常,您可以尝试再次创建触发器,以解决此问题。如需了解详情,请参阅权限遭拒错误

  2. 确认触发器已成功创建:

    gcloud eventarc triggers list --location=us-central1
    

    events-pubsub-trigger 列出的目标位置是 Cloud Run 服务 helloworld-events-pubsub-quickstart

生成并查看 Pub/Sub 主题事件

您可以通过向 Pub/Sub 主题发布消息来生成 Eventarc 事件。

  1. 查找 Pub/Sub 主题并将其设置为环境变量:

    export RUN_TOPIC=$(gcloud eventarc triggers describe events-pubsub-trigger \
        --format='value(transport.pubsub.topic)')
    
  2. 向 Pub/Sub 主题发布消息以生成事件:

    gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"
    

    事件会被路由到 Cloud Run 服务,该服务会记录事件消息。

  3. 如需查看服务创建的与事件相关的日志条目,请运行以下命令:

    gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
    
  4. 查找类似如下的日志条目:

    jsonPayload:
    ...
    message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished.
        Event data: Hello World!'
    

恭喜!您已成功将事件接收器服务部署到 Cloud Run,创建 Eventarc 触发器,在 Pub/Sub 中生成事件并在 Cloud Run 日志中查看该事件。

清理

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。

您可以:

  1. 删除 Cloud Run 服务

  2. 删除 Eventarc 触发器

    此操作还会删除关联的 Pub/Sub 主题。

或者,您也可以删除 Google Cloud 项目,以避免产生费用。删除 Google Cloud 项目后,系统会停止对该项目中使用的所有资源计费。

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

如果您打算探索多个教程和快速入门,重复使用项目可以帮助您避免超出项目配额上限。

后续步骤