1. 简介
借助 Cloud Run,您可以在全代管式环境中运行无状态容器。它基于开源 Knative 构建而成,可让您选择使用 Cloud Run 在全代管式环境中运行容器,或使用 Cloud Run for Anthos 在 Google Kubernetes Engine 集群中运行容器。
借助 Eventarc,您可以轻松地将各种服务(Cloud Run、Cloud Functions、Workfklows)与各种来源的事件连接起来。您可以用它来构建事件驱动型架构,其中微服务是松散耦合和分布式的。它还负责事件提取、传送、安全性、授权和错误处理,从而提高开发者的敏捷性和应用弹性。
在此 Codelab 中,您将了解 Eventarc。更具体地说,您将使用 Eventarc 监听 Pub/Sub、Cloud Storage 和 Cloud Audit Logs 中的事件,并将其传递给 Cloud Run 服务。
学习内容
- Eventarc 的愿景
- 探索 Eventarc 中的活动
- 创建 Cloud Run 接收器
- 为 Pub/Sub 创建触发器
- 为 Cloud Storage 创建触发器
- 为 Cloud Audit Logs 创建触发器
- 探索 Eventarc 界面
2. Eventarc 的愿景
Eventarc 旨在将来自各种 Google、Google Cloud 和第三方事件来源的事件传送到 Google Cloud 事件目的地。
Google Cloud 来源 | 属于 Google Cloud 自有产品的事件来源 |
Google 来源 | 属于 Google 自有产品(例如 Gmail、Hangouts、Android Management 等)的事件来源 |
自定义来源 | 由最终用户自行创建的活动来源(非 Google 自有产品) |
第三方来源 | 既非 Google 自有也不由客户生成的事件来源。这包括由第三方提供商和合作伙伴拥有和维护的热门事件来源,例如 Check Point CloudGuard、Datadog、ForgeRock、Lacework 等。 |
事件被标准化为 CloudEvents v1.0 格式,以实现跨服务互操作性。CloudEvents 是一种独立于供应商的开放式规范,以通用格式描述事件数据,以实现跨服务、平台和系统的互操作性。
3. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串,您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中必须是唯一的,并且不可变(一经设置便无法更改)。Cloud Console 会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为
PROJECT_ID
),因此如果您不喜欢某个 ID,请再生成一个随机 ID,还可以尝试自己创建一个,并确认是否可用。然后,项目创建后,ID 会处于“冻结”状态。 - 第三个值是一些 API 使用的项目编号。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。要关闭资源以避免产生超出本教程范围的费用,请按照此 Codelab 末尾提供的任何“清理”说明操作。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。只需一个浏览器,即可完成本实验中的所有工作。
准备工作
在 Cloud Shell 中,确保项目 ID 已设置:
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
4. 部署 Cloud Run 服务
部署 Cloud Run 服务以接收事件。您将部署 Cloud Run 的 Hello 容器,用于记录 CloudEvents 的内容。
首先,为 Cloud Run 启用所需的服务:
gcloud services enable run.googleapis.com
将 Hello 容器部署到 Cloud Run:
REGION=us-central1 SERVICE_NAME=hello gcloud run deploy $SERVICE_NAME \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
成功完成时,命令行会显示服务网址。您可以在任何浏览器窗口中打开该服务网址,再次确认该服务现已部署完毕。
5. 事件发现
在 Eventarc 中创建触发器之前,您可以了解事件来源是什么、它们可以发出的事件类型,以及如何配置触发器以使用触发器。
如需查看不同类型的事件的列表,请执行以下操作:
gcloud beta eventarc attributes types list NAME DESCRIPTION google.cloud.audit.log.v1.written Cloud Audit Log written google.cloud.pubsub.topic.v1.messagePublished Cloud Pub/Sub message published google.cloud.storage.object.v1.archived Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted. google.cloud.storage.object.v1.deleted Cloud Storage: Sent when an object has been permanently deleted. google.cloud.storage.object.v1.finalized Cloud Storage: Sent when a new object (or a new generation of an existing object). google.cloud.storage.object.v1.metadataUpdated Cloud Storage: Sent when the metadata of an existing object changes.
如需详细了解每种事件类型,请执行以下操作:
gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written attributes: type,serviceName,methodName,resourceName description: 'Cloud Audit Log: Sent when a log is written.' name: google.cloud.audit.log.v1.written
如需查看发出特定事件类型的服务列表,请执行以下操作:
gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written SERVICE_NAME DISPLAY_NAME accessapproval.googleapis.com Access Approval accesscontextmanager.googleapis.com Access Context Manager admin.googleapis.com Google Workspace Admin aiplatform.googleapis.com AI Platform (under Vertex AI) apigee.googleapis.com Apigee apigeeconnect.googleapis.com Apigee Connect ... workflows.googleapis.com Workflows
如需查看每个服务可以发出的方法名称(子事件)列表,请执行以下操作:
gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com METHOD_NAME google.cloud.workflows.v1.Workflows.CreateWorkflow google.cloud.workflows.v1.Workflows.DeleteWorkflow google.cloud.workflows.v1.Workflows.GetWorkflow google.cloud.workflows.v1.Workflows.ListWorkflows google.cloud.workflows.v1.Workflows.UpdateWorkflow google.cloud.workflows.v1beta.Workflows.CreateWorkflow google.cloud.workflows.v1beta.Workflows.DeleteWorkflow google.cloud.workflows.v1beta.Workflows.GetWorkflow google.cloud.workflows.v1beta.Workflows.ListWorkflows google.cloud.workflows.v1beta.Workflows.UpdateWorkflow
6. 创建 Pub/Sub 触发器
接收事件的一种方法是通过 Cloud Pub/Sub。任何应用都可以将消息发布到 Pub/Sub,这些消息可以通过 Eventarc 传送到 Cloud Run。
设置
在创建任何触发器之前,请为 Eventarc 启用必需的服务:
gcloud services enable eventarc.googleapis.com
您还需要一个供触发器使用的服务账号。创建服务账号:
SERVICE_ACCOUNT=eventarc-trigger-sa gcloud iam service-accounts create $SERVICE_ACCOUNT
创建
创建一个触发器,以过滤发布到我们部署的 Cloud Run 服务的 Pub/Sub 主题的事件:
TRIGGER_NAME=trigger-pubsub gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
测试
Pub/Sub 触发器会在后台创建主题。让我们找到它并将其赋值给一个变量:
TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')
使用 gcloud
向主题发布消息:
gcloud pubsub topics publish $TOPIC_ID --message="Hello World"
Cloud Run 服务会记录传入消息的正文。您可以在 Cloud Run 实例的“日志”部分查看此信息:
使用现有 Pub/Sub 主题创建
默认情况下,当您创建 Pub/Sub 触发器时,Eventarc 会在后台创建一个主题,供您在应用与 Cloud Run 服务之间用作传输主题。这有助于轻松快速地创建由 Pub/Sub 支持的触发器,但有时您可能需要使用现有主题。Eventarc 允许您使用 --transport-topic
gcloud 标志指定同一项目中的现有 Pub/Sub 主题。
如需了解工作原理,请创建一个 Pub/Sub 主题以用作传输主题:
TOPIC_ID=eventarc-topic gcloud pubsub topics create $TOPIC_ID
创建触发器:
TRIGGER_NAME=trigger-pubsub-existing gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
您可以通过向主题发送消息来测试触发器:
gcloud pubsub topics publish $TOPIC_ID --message="Hello again"
7. 创建 Cloud Storage 触发器
在此步骤中,您将创建一个触发器来监听来自 Cloud Storage 的事件。
设置
首先,创建一个存储分区以接收来自以下位置的事件:
BUCKET_NAME=eventarc-gcs-$PROJECT_ID gsutil mb -l $REGION gs://$BUCKET_NAME
授予 eventarc.eventReceiver
角色,以便可以在 Cloud Storage 触发器中使用该服务账号:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/eventarc.eventReceiver \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
您还需要将 pubsub.publisher
角色添加到 Cloud Storage 触发器的 Cloud Storage 服务账号:
SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \ --role roles/pubsub.publisher
创建
创建一个触发器,以将新的文件创建事件从存储分区路由到您的服务:
TRIGGER_NAME=trigger-storage gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
测试
列出所有触发器以确认触发器已成功创建:
gcloud eventarc triggers list
将文件上传到 Cloud Storage 存储分区:
echo "Hello World" > random.txt gsutil cp random.txt gs://$BUCKET_NAME/random.txt
如果您在 Cloud 控制台中查看 Cloud Run 服务的日志,应该会看到收到的事件:
8. 创建 Cloud Audit Logs 触发器
虽然 Cloud Storage 触发器是监听 Cloud Storage 事件的更好方法,但在此步骤中,您将创建一个 Cloud Audit Log 触发器来实现此目的。
设置
如需接收来自服务的事件,您需要启用 Cloud Audit Logs。在 Cloud 控制台中,从左上角菜单中选择 IAM & Admin
和 Audit Logs
。在服务列表中,选中 Google Cloud Storage
:
在右侧,确保选中 Admin
、Read
和 Write
,然后点击 Save
:
创建
创建一个触发器,以将新的文件创建事件从存储分区路由到您的服务:
TRIGGER_NAME=trigger-auditlog-storage gcloud eventarc triggers create $TRIGGER_NAME\ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
测试
审核日志触发器需要一些时间进行初始化。您可以通过列出所有触发器来检查是否已创建触发器:
gcloud eventarc triggers list
您应该会看到 ACTIVE
字段为 Yes
:
NAME TYPE DESTINATION ACTIVE trigger-auditlog-storage google.cloud.audit.log.v1.written Cloud Run service: hello Yes
像之前一样将同一文件上传到 Cloud Storage 存储分区:
gsutil cp random.txt gs://$BUCKET_NAME/random.txt
如果您在 Cloud 控制台中查看 Cloud Run 服务的日志,应该会看到收到的事件:
9. 探索 Eventarc 界面
在此步骤中,您将探索 Google Cloud 控制台中的 Eventarc 界面。在 Eventarc 界面中,您可以通过 Google Cloud 控制台大致了解所有触发器、修改和删除这些触发器,以及创建新触发器。
转到 Google Cloud 的 Eventarc 部分:
您会看到之前创建的触发器列表:
如果点击触发器,可以查看触发器的详细信息,还可以修改或删除触发器:
您还可以选择 Create trigger
并填写触发器的详细信息,以创建新触发器:
10. 恭喜!
恭喜您完成此 Codelab。
所学内容
- Eventarc 的愿景
- 探索 Eventarc 中的活动
- 创建 Cloud Run 接收器
- 为 Pub/Sub 创建触发器
- 为 Cloud Storage 创建触发器
- 为 Cloud Audit Logs 创建触发器
- 探索 Eventarc 界面