使用经过身份验证的 Cloud Run 服务接收 Pub/Sub 事件

本教程介绍如何使用经过身份验证的 Cloud Run 服务来部署容器化应用,该服务负责接收使用 Pub/Sub 的事件。 Pub/Sub 是一种全代管式实时消息传递服务,可让您在独立的应用之间发送和接收消息。

创建 Artifact Registry 标准制品库

创建 Artifact Registry 标准制品库以存储您的容器映像:

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

REPOSITORY 替换为制品库的唯一名称。

将事件接收器部署到 Cloud Run

部署记录事件内容的 Cloud Run 服务。

  1. 克隆 GitHub 代码库:

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

    Ruby

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git

    或者,您也可以下载该示例的 zip 文件并将其解压缩。

  2. 切换到包含 Cloud Run 示例代码的目录:

    Node.js

    cd nodejs-docs-samples/eventarc/pubsub/

    Python

    cd python-docs-samples/eventarc/pubsub/

    Go

    cd golang-samples/eventarc/pubsub/

    Java

    cd java-docs-samples/eventarc/pubsub/

    Ruby

    cd ruby-docs-samples/eventarc/pubsub/

    C#

    cd dotnet-docs-samples/eventarc/pubsub/
  3. 构建容器并将其上传到 Cloud Build:

    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  4. 将容器映像部署到 Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  5. 在出现是否允许未经身份验证的调用触发 pubsub (y/N)? 提示时,回复 n 表示“否”。

当您看到 Cloud Run 服务网址时,表示部署完成。

创建 Eventarc 触发器

当消息发布到 Pub/Sub 主题时,该事件会触发 Cloud Run 服务。

  1. 创建一个触发器来监听 Pub/Sub 消息:

    新的 Pub/Sub 主题

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    这会创建一个新的 Pub/Sub 主题和一个名为 trigger-pubsub 的触发器。

    现有 Pub/Sub 主题

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目 ID
    • TOPIC_ID:现有 Pub/Sub 主题的 ID

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

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

  2. 确认触发器已成功创建。请注意,尽管触发器会立即创建,但它最长可能需要两分钟才能完全正常运行。

    gcloud eventarc triggers list --location=${REGION}

    返回的触发器状态应为 ACTIVE: Yes

生成并查看事件

向 Pub/Sub 主题发布消息以生成事件并触发 Cloud Run 服务。Cloud Run 服务会记录服务日志中的消息。

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

    export TOPIC_ID=$(gcloud eventarc triggers describe ${SERVICE_NAME} \
        --format='value(transport.pubsub.topic)')
  2. 向 Pub/Sub 主题发送消息以生成事件:

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"

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

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

    gcloud logging read 'textPayload: "Hello there!"'

    该日志条目应如下所示:

    textPayload: 'Hello, Hello there!'

您可能需要等待一些时间才能看到日志。如果您没有立即看到日志,请稍等片刻,然后再检查一次。