

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

# 亚马逊 S3 交付的工作原理
<a name="data-delivery-s3-about"></a>

 使用本主题了解 Amazon S3 交付如何将记录从 Amazon Kinesis 数据流发送到通用亚马逊简单存储服务存储桶，包括存储配置、压缩、存储类别、记录格式和加密。

## 配送的工作原理
<a name="data-delivery-s3-how-it-works"></a>

 Amazon S3 交付通过以下步骤将记录发送到通用的 Amazon S3 存储桶：

1.  **读取 ** — 交付从 Kinesis 数据流中的所有分片中读取记录。

1.  **缓冲区 ** — 对记录进行缓冲，直到达到数据新鲜度间隔。

1.  **验证 ** — 当记录格式为时`STRING`，每条记录都被验证为有效 UTF-8 字符串；当记录格式为时`JSON`，每条记录都被验证为有效的 JSON 负载。验证失败的记录将发送到死信队列。

1.  **压缩和格式化 ** — 根据配置的输出格式对记录进行格式化，并使用指定的压缩算法进行压缩。

1.  **交付 ** — 使用配置的密钥模板将生成的对象写入目标 Amazon S3 存储桶。

1.  **Dead-letter 队列 ** — 验证失败的记录将写入带有错误上下文的死信队列。

## 存储配置
<a name="data-delivery-s3-storage-configuration"></a>

 创建 Amazon S3 交付时，您需要指定以下存储配置：
+  **bucketARN ** — 目标 Amazon S3 存储桶的 ARN。
+  **ExpectedBucketOwner**— 目标存储桶的预期所有者的 12 位 AWS 账户 ID。此值为必填值，有助于防止在所有权发生变化时传送到意外存储桶。
+  **CompressionType**— 应用于交付对象的压缩类型。此值为必填值；指定`NONE`在不压缩的情况下交付对象。请参阅[压缩选项](#data-delivery-s3-compression)。
+  **StorageClass**— 已交付对象的 Amazon S3 存储类别（可选）。请参阅[存储类](#data-delivery-s3-storage-class)。
+  **OutputKeyTemplate**— 用于构造 Amazon S3 对象密钥的模板（可选）。请参阅[用于 Amazon S3 交付的 S3 输出密钥模板](data-delivery-s3-key-template.md)。

## 压缩选项
<a name="data-delivery-s3-compression"></a>

 您必须指定压缩类型才能传输到通用 Amazon S3 存储桶。要在不压缩的情况下交付对象，请选择`NONE`。选择以下压缩类型之一：
+ **GZIP ** — 标准的 gzip 压缩。压缩比和速度的良好平衡。
+ **ZSTD ** — Z 标准压缩。更高的压缩比和更快的解压速度。
+ **无 ** — 未应用压缩。记录未经压缩传送。

## 存储类
<a name="data-delivery-s3-storage-class"></a>

 您可以选择为交付的对象指定 Amazon S3 存储类别。如果未指定，则默认存储类别为标准。支持的存储类别：
+ **标准 ** — 用于存放经常访问数据的通用存储。
+ **INTELLIGENT\_TIERING ** — 根据使用模式自动在接入层之间移动数据。
+ **GLACIER\_IR ** — 低成本存储，用于存储需要立即检索的数据。

 有关 Amazon S3 存储类的更多信息，请参阅 A * mazon S3 用户指南[中的](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html)了解和管理存储类别*。

## 输出键模板
<a name="data-delivery-s3-key-template-about"></a>

 您可以配置输出密钥模板来控制已交付文件的 Amazon S3 对象密钥结构。该模板支持日期、时间和交付元数据的动态占位符，用于在目标存储桶中组织数据。有关默认模板、支持的变量和示例，请参阅[用于 Amazon S3 交付的 S3 输出密钥模板](data-delivery-s3-key-template.md)。

## 数据新鲜度
<a name="data-delivery-s3-data-freshness"></a>

 数据新鲜度定义了传送记录之前的最大缓冲时间。您可以在 300 到 900 秒（5 到 15 分钟）之间配置此值。默认值为 300 秒。值越低，交付速度越快，而值越高生成的对象越少、越大。

## Dead-letter 队列
<a name="data-delivery-s3-dead-letter-queue"></a>

 死信队列是可选的，可以传送到通用的 Amazon S3 存储桶。如果您未指定死信队列配置，则传送会默认将错误信息写入带有错误前缀的同一个目标存储桶。

 如果您指定死信队列，则需要提供以下内容：
+  **bucketARN ** — Amazon S3 存储桶的 ARN，用于接收有关无法传送的记录的信息。
+  **ExpectedBucketOwner**— 死信队列存储桶的预期所有者的 12 位 AWS 账户 ID（指定死信队列时为必填项）。
+  **ErrorOutputPrefix**— 用于在存储桶内组织故障元数据对象的可选前缀。

## 录制格式
<a name="data-delivery-s3-record-formats"></a>

 Amazon S3 交付支持以下记录格式以传输到通用亚马逊 S3 存储桶：
+ **JSON ** — 纯的 JSON 记录。
+ **STRIN UTF-8 G ** — 字符串记录。
+ **BYTE\_ARRAY ** — 原始二进制记录。

**注意**  
 不支持将`GSR_JSON`记录格式传输到通用 Amazon S3 存储桶。它仅支持传送到需要 AWS Glue 架构注册表的 Apache Iceberg 上的流媒体表。

## Cross-account 交货
<a name="data-delivery-s3-cross-account"></a>

 亚马逊 S3 交付支持跨账户传输到通用亚马逊 S3 存储桶。源流和目标存储桶必须在同一个存储桶中 AWS 区域。配置目标存储桶策略以授予交付 IAM 角色写入对象的权限。

## 加密
<a name="data-delivery-s3-encryption"></a>

 Amazon S3 交付支持使用客户管理的 AWS KMS 密钥对交付到通用的 Amazon S3 存储桶的对象进行服务器端加密。您可以指定客户管理的 AWS KMS 密钥来加密交付的对象。

**重要**  
 您不能使用`aws/kinesis` AWS KMS 别名进行目标加密。您必须使用客户管理的 AWS KMS 密钥。

 如果您的源 Kinesis 数据流已加密，则需要考虑其他注意事项。不支持使用 AWS 托管式密钥 （`aws/kinesis`别名）加密的流，服务执行角色需要 AWS KMS 权限才能解密源记录。有关源流加密要求，请参阅[源流加密](data-delivery-security.md#data-delivery-security-source-stream-encryption)。有关服务执行角色所需的 AWS KMS 权限，请参阅[数据传输的 IAM 权限](data-delivery-iam.md)。