接收来自 Cloud Storage 的直接事件 (gcloud CLI)
本快速入门介绍如何使用 Eventarc(不使用 Cloud Audit Logs)在未经身份验证的 Cloud Run 服务中接收来自 Cloud Storage 的事件。
您可以配置通知触发以响应 Cloud Storage 存储桶内的各种事件 - 对象创建、删除、归档和元数据更新。
在本快速入门中,您将执行以下操作:
创建 Cloud Storage 存储桶作为事件来源。
将事件接收器服务部署到 Cloud Run。
创建 Eventarc 触发器。
通过将文件上传到 Cloud Storage 存储桶来创建事件,并在 Cloud Run 日志中查看该事件。
准备工作
如果您的组织将限制应用于您的 Google Cloud 环境,则本文档中的某些步骤可能无法正常工作。在这种情况下,您可能无法完成创建公共 IP 地址或服务帐号密钥等任务。如果您发出的请求会返回有关限制条件的错误,请参阅如何在受限的 Google Cloud 环境中开发应用。
- 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Google Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc, and Pub/Sub API。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Google Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc, and Pub/Sub API。
- 更新
gcloud
组件:gcloud components update
- 使用您的帐号登录:
gcloud auth login
- 设置本快速入门中使用的配置变量:
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。 - 将
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'
- 如果您在 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 的信息中心页面上找到您的项目编号。 - 下载并安装 Git 源代码管理工具。
创建 Cloud Storage 存储桶
创建 Cloud Storage 存储桶以用作事件来源:
gsutil mb -l us-central1 gs://PROJECT_ID-bucket/
创建事件来源后,您可以在 Cloud Run 上部署事件接收器服务。
将事件接收器服务部署到 Cloud Run
部署接收和记录事件的 Cloud Run 服务。
克隆代码库,然后切换到包含 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
构建容器并将其上传到 Cloud Build:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld-events
将容器映像部署到 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 服务。
创建一个过滤 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
的触发器。要确认
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
生成并查看事件
要生成事件,请执行以下操作:
将文本文件上传到 Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://PROJECT_ID-bucket/random.txt
上传操作会生成事件,而 Cloud Run 服务会记录事件的消息。
如需查看日志条目,请执行以下操作:
过滤日志条目并以 JSON 格式返回输出:
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
查找类似如下的日志条目:
"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 资源付费。
您可以:
或者,您也可以删除 Google Cloud 项目,以避免对该项目中使用的所有资源计费。
如需删除项目,请执行以下操作:
gcloud projects delete PROJECT_ID_OR_NUMBER
将 PROJECT_ID_OR_NUMBER 替换为您的 Google Cloud 项目 ID 或编号。