本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊 S3 交付的工作原理
使用本主题了解 Amazon S3 交付如何将记录从 Amazon Kinesis 数据流发送到通用亚马逊简单存储服务存储桶,包括存储配置、压缩、存储类别、记录格式和加密。
配送的工作原理
Amazon S3 交付通过以下步骤将记录发送到通用的 Amazon S3 存储桶:
-
读取 — 交付从 Kinesis 数据流中的所有分片中读取记录。
-
缓冲区 — 对记录进行缓冲,直到达到数据新鲜度间隔。
-
验证 — 当记录格式为时
STRING,每条记录都被验证为有效 UTF-8 字符串;当记录格式为时JSON,每条记录都被验证为有效的 JSON 负载。验证失败的记录将发送到死信队列。 -
压缩和格式化 — 根据配置的输出格式对记录进行格式化,并使用指定的压缩算法进行压缩。
-
交付 — 使用配置的密钥模板将生成的对象写入目标 Amazon S3 存储桶。
-
Dead-letter 队列 — 验证失败的记录将写入带有错误上下文的死信队列。
存储配置
创建 Amazon S3 交付时,您需要指定以下存储配置:
-
bucketARN — 目标 Amazon S3 存储桶的 ARN。
-
ExpectedBucketOwner— 目标存储桶的预期所有者的 12 位 AWS 账户 ID。此值为必填值,有助于防止在所有权发生变化时传送到意外存储桶。
-
CompressionType— 应用于交付对象的压缩类型。此值为必填值;指定
NONE在不压缩的情况下交付对象。请参阅压缩选项。 -
StorageClass— 已交付对象的 Amazon S3 存储类别(可选)。请参阅存储类。
-
OutputKeyTemplate— 用于构造 Amazon S3 对象密钥的模板(可选)。请参阅用于 Amazon S3 交付的 S3 输出密钥模板。
压缩选项
您必须指定压缩类型才能传输到通用 Amazon S3 存储桶。要在不压缩的情况下交付对象,请选择NONE。选择以下压缩类型之一:
-
GZIP — 标准的 gzip 压缩。压缩比和速度的良好平衡。
-
ZSTD — Z 标准压缩。更高的压缩比和更快的解压速度。
-
无 — 未应用压缩。记录未经压缩传送。
存储类
您可以选择为交付的对象指定 Amazon S3 存储类别。如果未指定,则默认存储类别为标准。支持的存储类别:
-
标准 — 用于存放经常访问数据的通用存储。
-
INTELLIGENT_TIERING — 根据使用模式自动在接入层之间移动数据。
-
GLACIER_IR — 低成本存储,用于存储需要立即检索的数据。
有关 Amazon S3 存储类的更多信息,请参阅 A mazon S3 用户指南中的了解和管理存储类别。
输出键模板
您可以配置输出密钥模板来控制已交付文件的 Amazon S3 对象密钥结构。该模板支持日期、时间和交付元数据的动态占位符,用于在目标存储桶中组织数据。有关默认模板、支持的变量和示例,请参阅用于 Amazon S3 交付的 S3 输出密钥模板。
数据新鲜度
数据新鲜度定义了传送记录之前的最大缓冲时间。您可以在 300 到 900 秒(5 到 15 分钟)之间配置此值。默认值为 300 秒。值越低,交付速度越快,而值越高生成的对象越少、越大。
Dead-letter 队列
死信队列是可选的,可以传送到通用的 Amazon S3 存储桶。如果您未指定死信队列配置,则传送会默认将错误信息写入带有错误前缀的同一个目标存储桶。
如果您指定死信队列,则需要提供以下内容:
-
bucketARN — Amazon S3 存储桶的 ARN,用于接收有关无法传送的记录的信息。
-
ExpectedBucketOwner— 死信队列存储桶的预期所有者的 12 位 AWS 账户 ID(指定死信队列时为必填项)。
-
ErrorOutputPrefix— 用于在存储桶内组织故障元数据对象的可选前缀。
录制格式
Amazon S3 交付支持以下记录格式以传输到通用亚马逊 S3 存储桶:
-
JSON — 纯的 JSON 记录。
-
STRIN UTF-8 G — 字符串记录。
-
BYTE_ARRAY — 原始二进制记录。
注意
不支持将GSR_JSON记录格式传输到通用 Amazon S3 存储桶。它仅支持传送到需要 AWS Glue 架构注册表的 Apache Iceberg 上的流媒体表。
Cross-account 交货
亚马逊 S3 交付支持跨账户传输到通用亚马逊 S3 存储桶。源流和目标存储桶必须在同一个存储桶中 AWS 区域。配置目标存储桶策略以授予交付 IAM 角色写入对象的权限。
加密
Amazon S3 交付支持使用客户管理的 AWS KMS 密钥对交付到通用的 Amazon S3 存储桶的对象进行服务器端加密。您可以指定客户管理的 AWS KMS 密钥来加密交付的对象。
重要
您不能使用aws/kinesis AWS KMS 别名进行目标加密。您必须使用客户管理的 AWS KMS 密钥。
如果您的源 Kinesis 数据流已加密,则需要考虑其他注意事项。不支持使用 AWS 托管式密钥 (aws/kinesis别名)加密的流,服务执行角色需要 AWS KMS 权限才能解密源记录。有关源流加密要求,请参阅源流加密。有关服务执行角色所需的 AWS KMS
权限,请参阅数据传输的 IAM 权限。