快速入门:接收来自 Cloud Storage 的直接事件 (gcloud CLI)

接收来自 Cloud Storage 的直接事件 (gcloud CLI)

本快速入门介绍如何使用 Eventarc(不使用 Cloud Audit Logs)在未经身份验证的 Cloud Run 服务中接收来自 Cloud Storage 的事件。

您可以配置通知触发以响应 Cloud Storage 存储桶内的各种事件 - 对象创建、删除、归档和元数据更新。

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

  1. 创建 Cloud Storage 存储桶作为事件来源。

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

  3. 创建 Eventarc 触发器。

  4. 通过将文件上传到 Cloud Storage 存储桶来创建事件,并在 Cloud Run 日志中查看该事件。

准备工作

如果您的组织将限制应用于您的 Google Cloud 环境,则本文档中的某些步骤可能无法正常工作。在这种情况下,您可能无法完成创建公共 IP 地址或服务帐号密钥等任务。如果您发出的请求会返回有关限制条件的错误,请参阅如何在受限的 Google Cloud 环境中开发应用

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  4. 启用 Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc, and Pub/Sub API。

    启用 API

  5. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  6. 确保您的 Google Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  7. 启用 Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc, and Pub/Sub API。

    启用 API

  8. 更新 gcloud 组件:
    gcloud components update
  9. 使用您的帐号登录:
    gcloud auth login
  10. 设置本快速入门中使用的配置变量:
    gcloud config set project PROJECT_ID
    gcloud config set run/region us-central1
    gcloud config set run/platform managed
    gcloud config set eventarc/location us-central1
    PROJECT_ID 替换为您的 Google Cloud 项目 ID。 您可以在 Google Cloud Console 的信息中心页面上找到项目 ID。
  11. pubsub.publisher 角色授予 Cloud Storage 服务帐号:

    SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:${SERVICE_ACCOUNT}" \
        --role='roles/pubsub.publisher'
    

  12. 如果您在 2021 年 4 月 8 日或之前启用了 Pub/Sub 服务帐号,请将 iam.serviceAccountTokenCreator 角色授予 Pub/Sub 服务帐号:

    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 Console 的信息中心页面上找到您的项目编号。

  13. 下载并安装 Git 源代码管理工具。

创建 Cloud Storage 存储桶

创建 Cloud Storage 存储桶以用作事件来源:

gsutil mb -l us-central1 gs://PROJECT_ID-bucket/

创建事件来源后,您可以在 Cloud Run 上部署事件接收器服务。

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

部署接收和记录事件的 Cloud Run 服务。

  1. 克隆代码库,然后切换到包含 Cloud Run 示例代码的目录:

    Go

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

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage
    

    .NET

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage
    

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage
    

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
    
  2. 构建容器并将其上传到 Cloud Build:

     gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld-events
    
  3. 将容器映像部署到 Cloud Run:

     gcloud run deploy helloworld-events \
         --image gcr.io/PROJECT_ID/helloworld-events \
         --allow-unauthenticated
    

    部署成功后,命令行会显示服务网址。

现在,您已将名为 helloworld-events 的事件接收器服务部署到 Cloud Run,接下来便可以设置触发器了。

创建 Eventarc 触发器

Eventarc 触发器会将 Cloud Storage 存储桶中的事件发送到 helloworld-events Cloud Run 服务。

  1. 创建一个过滤 Cloud Storage 事件并且使用 Compute Engine 默认服务帐号的触发器:

     gcloud eventarc triggers create storage-events-trigger \
         --destination-run-service=helloworld-events \
         --destination-run-region=us-central1 \
         --event-filters="type=google.cloud.storage.object.v1.finalized" \
         --event-filters="bucket=PROJECT_ID-bucket" \
         --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    这将创建一个名为 storage-events-trigger 的触发器。

  2. 要确认 storage-events-trigger 已成功创建,请运行以下命令:

     gcloud eventarc triggers list --location=us-central1
    

    输出内容类似如下:

     NAME                    TYPE                                      DESTINATION_RUN_SERVICE  DESTINATION_RUN_PATH  ACTIVE
     storage-events-trigger  google.cloud.storage.object.v1.finalized  helloworld-events                              Yes
    

生成并查看事件

  1. 要生成事件,请执行以下操作:

    将文本文件上传到 Cloud Storage:

     echo "Hello World" > random.txt
     gsutil cp random.txt gs://PROJECT_ID-bucket/random.txt
    

    上传操作会生成事件,而 Cloud Run 服务会记录事件的消息。

  2. 如需查看日志条目,请执行以下操作:

    1. 过滤日志条目并以 JSON 格式返回输出:

      gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
      
    2. 查找类似如下的日志条目:

      "textPayload": "2021/08/09 19:04:25 Detected change in Cloud Storage bucket: objects/random.txt"
      

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

清理

为避免因本页中使用的资源导致您的 Google Cloud 帐号产生费用,请按照以下步骤操作。

虽然当服务未在使用时 Cloud Run 不会产生费用,但您可能仍然需要为在 Container Registry 中存储容器映像在 Cloud Storage 存储桶中存储文件以及 Eventarc 资源付费。

您可以:

  1. 删除映像

  2. 删除存储桶

  3. 删除 Eventarc 触发器

或者,您也可以删除 Google Cloud 项目,以避免对该项目中使用的所有资源计费。

如需删除项目,请执行以下操作:

gcloud projects delete PROJECT_ID_OR_NUMBER

PROJECT_ID_OR_NUMBER 替换为您的 Google Cloud 项目 ID 或编号。

后续步骤