

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 教程：使用记录 Amazon S3 对象级操作 EventBridge
<a name="eb-log-s3-data-events"></a>

您可以在 [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 桶中记录对象级别 API 操作。 EventBridge 在 Amazon 匹配这些[事件](eb-events.md)之前，您必须使用[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)设置和配置跟踪以接收这些事件。

在本教程中，您将创建 CloudTrail 跟踪、创建[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)函数，然后在 EventBridge 控制台中创建[规则](eb-rules.md)，用于调用该函数以响应 S3 数据事件。

**Topics**
+ [步骤 1：配置您的 AWS CloudTrail 跟踪](#eb-configure-trail)
+ [步骤 2：创建 AWS Lambda 函数](#eb-log-s3-create-lambda-function)
+ [步骤 3：创建 规则](#eb-log-s3-create-rule)
+ [第 4 步：测试规则](#eb-log-s3-test-rule)
+ [步骤 5：确认成功](#success)
+ [步骤 6：清除资源](#cleanup)

## 步骤 1：配置您的 AWS CloudTrail 跟踪
<a name="eb-configure-trail"></a>

要将 S3 存储桶的数据事件记录到 AWS CloudTrail 和 EventBridge中，请先创建跟踪。*跟踪* 会捕获您账户中的 API 调用和相关事件，并将日志文件传输到您指定的 S3 桶。您可以更新现有跟踪或创建一个新跟踪。

有关更多信息，请参阅《AWS CloudTrail 用户指南》中的[数据事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-and-data-events-with-cloudtrail.html#logging-data-events)。

**创建跟踪**

1. 打开 CloudTrail 控制台，网址为[https://console.aws.amazon.com/cloudtrail/](https://console.aws.amazon.com/cloudtrail/)。

1. 依次选择 **Trails (跟踪)**、**Create trail (创建跟踪)**。

1. 对于 **Trail name**，键入跟踪的名称。

1. 在**存储位置**中，选择**创建新的 S3 桶**。

1. 在 **AWS KMS 别名**中，为 KMS 密钥键入别名。

1. 选择**下一步**。

1. 对于**事件类型**，选择**数据事件**。

1. 对于**数据事件**，执行以下操作之一：
   + 要记录存储桶中所有 Amazon S3 对象的数据事件，请指定一个 S3 存储桶和一个空前缀。当事件在该存储桶中的对象上发生时，跟踪将处理和记录事件。
   + 要记录桶中特定 Amazon S3 对象的数据事件，请指定 S3 桶和对象前缀。当事件在该 存储桶中的对象上发生且对象以指定前缀开头时，跟踪将处理和记录事件。

1. 对于每个资源，选择是要记录**读取**事件、**写入**事件，还是同时记录这两类事件。

1. 选择**下一步**。

1. 选择**创建跟踪**。

## 步骤 2：创建 AWS Lambda 函数
<a name="eb-log-s3-create-lambda-function"></a>

创建一个 Lambda 函数，以记录 S3 存储桶的数据事件。

**创建 Lambda 函数**

1. 打开 AWS Lambda 控制台，网址为[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)。

1. 选择**创建函数**。

1. 选择**从头开始创作**。

1. 输入 Lambda 函数的名称和说明。例如，将函数命名为 `LogS3DataEvents`。

1. 将其余选项保留为默认值，然后选择**创建函数**。

1. 在函数页面的**代码**选项卡上，双击 **index.js**。

1. 使用以下代码替换现有代码。

   ```
   'use strict';
   
   exports.handler = (event, context, callback) => {
       console.log('LogS3DataEvents');
       console.log('Received event:', JSON.stringify(event, null, 2));
       callback(null, 'Finished');
   };
   ```

1. 选择**部署**。

## 步骤 3：创建 规则
<a name="eb-log-s3-create-rule"></a>

创建规则，运行您在步骤 2 中创建的 Lambda 函数。此规则运行是为了响应 Amazon S3 数据事件。

**创建 规则**

1. 打开 Amazon EventBridge 控制台，网址为[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)。

1. 在导航窗格中，选择**规则**。

1. 选择**创建规则**。

1. 为规则输入名称和描述。例如，将规则命名为 `TestRule`

1. 对于**事件总线**，请选择要与此规则关联的事件总线。如果您希望此规则对来自您自己的账户的匹配事件触发，请选择**默认**。当您账户中的某个 AWS 服务发出一个事件时，它始终会发送到您账户的默认事件总线。

1. 对于**规则类型**，选择**具有事件模式的规则**。

1. 选择**下一步**。

1. 对于**事件源**，选择**AWS 服务**。

1. 对于 **Event pattern**（事件模式），执行以下操作：

   1. 对于**事件源**，从下拉列表中选择 **Simple Storage Service (S3)**。

   1. 对于**事件类型**，请 CloudTrail从下拉列表中选择**对象级 API 调用**方式。

   1. 选择 “**特定操作**”，然后选择**PutObject**。

   1. 默认情况下，该规则与区域中所有存储桶的数据事件匹配。要匹配特定存储桶的数据事件，请选择 **Specify bucket(s) by name (按名称匹配特定存储桶)**，然后指定一个或多个存储桶。

1. 选择**下一步**。

1. 对于**目标类型**，选择**AWS 服务**。

1. 对于**选择目标**，从下拉列表中选择 **Lambda 函数**。

1. 对于**函数**，选择您在步骤 1 中创建的 Lambda 函数。

1. 选择**下一步**。

1. 选择**下一步**。

1. 查看规则详细信息并选择**创建规则**。

## 第 4 步：测试规则
<a name="eb-log-s3-test-rule"></a>

为了测试规则，将一个对象置于 S3 存储桶中。您可以验证您的 Lambda 函数是否已调用。

**要查看您的 Lambda 函数的日志**

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，选择**日志**。

1. 选择您的 Lambda 函数 (`/aws/lambda/function-name`) 的日志组的名称。

1. 选择日志流的名称，以查看您启动的实例的函数提供的数据。

您还可以在为跟踪指定的 S3 存储桶中查看 CloudTrail 日志。有关更多信息，请参阅《*AWS CloudTrail 用户指南》*中的 “[获取和查看您的 CloudTrail 日志文件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/get-and-view-cloudtrail-log-files.html)”。

## 步骤 5：确认成功
<a name="success"></a>

如果您在 CloudWatch 日志中看到 Lambda 事件，则说明您已成功完成本教程。如果您的 CloudWatch 日志中没有该事件，请通过验证规则是否成功创建来开始故障排除，如果规则看起来正确，请验证您的 Lambda 函数的代码是否正确。

## 步骤 6：清除资源
<a name="cleanup"></a>

除非您想要保留为本教程创建的资源，否则可立即将其删除。通过删除不再使用的 AWS 资源，可以防止向您的 AWS 账户收取不必要的费用。

**要删除 EventBridge 规则**

1. 打开 EventBridge 控制台的 [“规则” 页面](https://console.aws.amazon.com/events/home#/rules)。

1. 选择您创建的规则。

1. 选择**删除**。

1. 选择**删除**。

**删除 Lambda 函数**

1. 打开 Lamba 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面。

1. 选择您创建的函数。

1. 依次选择**操作**和**删除**。

1. 选择**删除**。

**要删除 CloudTrail 跟踪**

1. 打开 CloudTrail 控制台的 T [rails 页面](https://console.aws.amazon.com/cloudtrail/home#/trails)。

1. 选择您创建的跟踪。

1. 选择**删除**。

1. 选择**删除**。