使用 S3CrtClient 执行 Amazon S3 操作 - 适用于 C++ 的 AWS SDK

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

使用 S3CrtClient 执行 Amazon S3 操作

S3CrtClient 类在适用于 C++ 的 AWS SDK 的 1.9 版本中可用,它提高了向 Amazon S3 上传和从 Amazon S3 下载大型数据文件的吞吐量。有关此版本改进的更多信息,请参阅使用适用于 C++ 的 AWS SDK v1.9 提高 Amazon S3 吞吐量

S3CrtClient 构建于 AWS 通用运行时(CRT)库之上。

注意

为避免因上传不完整或部分上传而被收费,建议您对 Amazon S3 存储桶启用 AbortIncompleteMultipartUpload 生命周期规则。

该规则指示 Amazon S3 中止在启动后没有在指定天数内完成的分段上传。当超过设置的时间限制时,Amazon S3 将中止上传,然后删除未完成的上传数据。

有关更多信息,请参阅《Amazon S3 用户指南》中的在存储桶上设置生命周期配置

先决条件

在开始之前,建议您先阅读开始使用适用于 C++ 的 AWS SDK

下载示例代码并按代码示例入门中所述构建解决方案。

要运行这些示例,您的代码用于发出请求的用户配置文件必须在 AWS 中具有适当的权限(用于服务和操作)。有关更多信息,请参阅提供 AWS 凭证

使用 S3CrtClient 上传和下载对象

此示例演示如何使用 S3CrtClient。该示例创建一个存储桶,上传一个对象,下载该对象,然后删除该文件和存储桶。PUT 操作会转化为分段上传。GET 操作会转化为多个“分范围”GET 请求。有关分段上传的更多信息,请参阅《Amazon S3 用户指南》中的使用分段上传来上传和复制对象

在此示例中,提供的数据文件 ny.json 以分段上传的形式上传。这一点可以在程序成功运行后,通过查看调试日志来确认。

如果上传失败,底层 CRT 库中会发出 AbortMultipartUpload,以清理所有已上传的部分。但是,并非所有错误/故障都可以在内部处理(例如拔掉网线)。建议您在 Amazon S3 存储桶上创建生命周期规则,以确保部分上传的数据不会滞留在您的账户中(部分上传的数据仍然会产生费用)。有关如何设置生命周期规则,请参阅发现并删除未完成的分段上传以降低 Amazon S3 费用

使用调试日志浏览分段上传的详细信息
  1. main() 函数中,注意带有“TODO”注释的代码,这些注释提供了更新代码的说明。

    1. 对于 file_name:从代码注释中提供的链接下载示例数据文件 ny.json,或使用您自己的大型数据文件。

    2. 对于 region:使用枚举将 region 变量更新为您账户的 AWS 区域。要找到您的账户所在区域,请登录到AWS 管理控制台,然后在右上角找到该区域。

  2. 编译示例。

  3. 将变量 file_name 指定的文件复制到您的可执行文件夹,然后运行 s3-crt-demo 可执行文件。

  4. 在您的可执行文件夹中,找到最新的 .log 文件。

  5. 打开日志文件,选择搜索,然后输入 partNumber

  6. 该日志包含类似以下内容的条目,其中为上传文件的每个部分指定了 partNumberuploadId

    PUT /my-object partNumber=1&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD

    以及

    PUT /my-object partNumber=2&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD

请参阅 Github 上的完整示例。