

 **此页面仅适用于使用文件库和 2012 年原始 REST API 的 Amazon Glacier 服务的现有客户。**

如果您正在寻找归档存储解决方案，建议使用 Amazon S3 中的 Amazon Glacier 存储类别 S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive。要了解有关这些存储选项的更多信息，请参阅 [Amazon Glacier 存储类别](https://aws.amazon.com/s3/storage-classes/glacier/)。

Amazon Glacier（最初基于保管库的独立服务）不再接受新客户。Amazon Glacier 是一项独立的服务 APIs ，拥有自己的服务，可将数据存储在文件库中，不同于亚马逊 S3 和 Amazon S3 Glacier 存储类别。在 Amazon Glacier 中，您现有的数据将确保安全，并且可以无限期地访问。无需进行迁移。对于低成本、长期的存档存储， AWS 建议[使用 Amazon S3 Glacier 存储类别，这些存储类别](https://aws.amazon.com/s3/storage-classes/glacier/)基于S3存储桶 APIs、完全 AWS 区域 可用性、更低的成本和 AWS 服务集成，可提供卓越的客户体验。如果您希望加强功能，可以考虑使用我们的 [AWS 将数据从 Amazon Glacier 文件库传输到 Amazon S3 Glacier 存储类别的解决方案指南](https://aws.amazon.com/solutions/guidance/data-transfer-from-amazon-s3-glacier-vaults-to-amazon-s3/)，迁移到 Amazon S3 Glacier 存储类别。

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

# 使用上传大型档案 AWS CLI
<a name="uploading-an-archive-mpu-using-cli"></a>

您可以使用 () 在 Amazon Glacier（Amazon Glacier AWS CLI）中 AWS Command Line Interface 上传档案。为了改善大型档案的上传体验，Amazon Glacier 提供了多个 API 操作来支持分段上传。通过这些 API 操作，您可以分段上传档案。您可以独立地、以任何顺序以及并行地上传这些段。如果某个分段上传失败，则您只需重新上传该分段，而无需重新上传整个档案。您可以对大小从 1 字节到大约 40000 GiB 的档案使用分段上传。

有关 Amazon Glacier 分段上传的更多信息，请参阅[分段上传大型档案（分段上传）](uploading-archive-mpu.md)。

**Topics**
+ [（先决条件）设置 AWS CLI](#Creating-Vaults-CLI-Setup)
+ [（先决条件）安装 Python](#Uploading-Archives-mpu-CLI-Install-Python)
+ [（先决条件）创建 Amazon Glacier 文件库](#Uploading-Archives-mpu-CLI-Create-Vault)
+ [示例：使用分段上传大型档案 AWS CLI](#Uploading-Archives-mpu-CLI-Implementation)

## （先决条件）设置 AWS CLI
<a name="Creating-Vaults-CLI-Setup"></a>

1. 下载并配置 AWS CLI。有关说明，请参阅《AWS Command Line Interface 用户指南》**中的以下主题：

    [正在安装 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) 

   [正在配置 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. 在命令提示符下输入以下命令来验证您的 AWS CLI 设置。这些命令没有显式提供凭证，因此将使用默认配置文件的凭证。
   + 尝试使用 help 命令。

     ```
     aws help
     ```
   + 要获取已配置账户上 Amazon Glacier 文件库的列表，请使用 `list-vaults` 命令。*123456789012*用您的 AWS 账户 身份证替换。

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 要查看的当前配置数据 AWS CLI，请使用`aws configure list`命令。

     ```
     aws configure list
     ```

## （先决条件）安装 Python
<a name="Uploading-Archives-mpu-CLI-Install-Python"></a>

要完成分段上传，您必须计算所上传档案的 SHA256 树形哈希。这样做与计算要上传的文件的 SHA256 树形哈希值不同。要计算您正在上传的档案的 SHA256 树形哈希，可以使用 Java C\$1（使用.NET）或Python。在此示例中，您将使用 Python。有关使用 Java 或 C\$1 的说明，请参阅[计算校验和](checksum-calculations.md)。

有关安装 Python 的更多信息，请参阅《Boto3 开发人员指南》**中的[安装或更新 Python](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installation)。

## （先决条件）创建 Amazon Glacier 文件库
<a name="Uploading-Archives-mpu-CLI-Create-Vault"></a>

要使用下面的示例，必须至少创建一个 Amazon Glacier 文件库。有关如何创建文件库的更多信息，请参阅[在 Amazon Glacier 中创建文件库](creating-vaults.md)。

## 示例：使用分段上传大型档案 AWS CLI
<a name="Uploading-Archives-mpu-CLI-Implementation"></a>

在此示例中，您将创建一个文件并使用分段上传 API 操作将此文件分段上传到 Amazon Glacier。
**重要**  
在开始此过程之前，请确保您已执行所有先决条件的步骤。要上传档案，您必须创建并 AWS CLI 配置文件库，并准备好使用 Java C\$1 或Python计算 SHA256 树形哈希。

以下过程使用`initiate-multipart-upload``upload-multipart-part`、和`complete-multipart-upload` AWS CLI 命令。

有关所有这些命令的更多详细信息，请参阅《AWS CLI 命令参考》**中的 [https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html)、[https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html) 和 [https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html)。

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html) 命令创建分段上传资源。在您的请求中，请指定分段大小（以字节数为单位）。除了最后一个分段以外，您上传的每个分段都必须为此大小。启动上传任务时，您不需要知道整个档案的大小。但是，在最后一步完成上传时，您将需要知道每个分段的总大小（以字节为单位）。

   在下面的命令中，将 `--vault-name` 和 `--account-ID` 参数的值替换为您自己的信息。此命令指定每个文件将上传分段大小为 1 兆字节（MiB）（1024 x 1024 字节）的档案。如果需要，请替换此 `--part-size` 参数值。

   ```
   aws glacier initiate-multipart-upload --vault-name awsexamplevault --part-size 1048576 --account-id 123456789012
   ```

   预期输出：

   ```
   {
   "location": "/123456789012/vaults/awsexamplevault/multipart-uploads/uploadId",
   "uploadId": "uploadId"
   }
   ```

   完成后，该命令将输出分段上传资源的上传 ID 和在 Amazon Glacier 中的位置。在后续步骤中，您将使用此上传 ID。

1. 在本示例中，您可以使用以下命令创建一个 4.4 MiB 的文件，将其拆分为 1 MiB 的块，然后上传每个块。要上传自己的文件，您可以按照类似的步骤将数据拆分为多个块并上传每个分段。

   

**Linux 或 macOS**  
以下命令将在 Linux 或 macOS 上创建一个名为 `file_to_upload` 的 4.4 MiB 的文件。

   ```
   mkfile -n 9000b file_to_upload
   ```

**Windows**  
以下命令将在 Windows 上创建一个名为 `file_to_upload` 的 4.4 MiB 的文件。

   ```
   fsutil file createnew file_to_upload 4608000
   ```

1. 接下来，您将把此文件拆分为 1 MiB 的块。

   ```
   split -b 1048576 file_to_upload chunk
   ```

   您现在有以下五个块。前四个大小为 1 MiB，最后一个是 400 千字节（KiB）。

   ```
   chunkaa
   chunkab
   chunkac
   chunkad
   chunkae
   ```

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html) 命令以上传档案的一个分段。您可以按任何顺序上传档案分段。此外，您还可以并行上传分段。您最多可以为一个分段上传上传 10000 段。

   在下面的命令中，将替换 `--vault-name`、`--account-ID` 和 `--upload-id` 参数的值。上传 ID 必须与 `initiate-multipart-upload` 命令输出中提供的 ID 相匹配。`--range` 参数指定您将上传大小为 1 MiB（1024 x 1024 字节）的分段。此大小必须与您在 `initiate-multipart-upload` 命令中指定的大小一致。如有必要，请调整此大小值。`--body` 参数指定您要上传的分段的名称。

   ```
   aws glacier upload-multipart-part --body chunkaa --range='bytes 0-1048575/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```

   如果成功，该命令将生成包含已上传分段校验和的输出。

1. 再次运行 `upload-multipart-part` 命令以上传分段上传的其余部分。更新每个命令的 `--range` 和 `–-body` 参数值，使其与您要上传的分段相匹配。

   ```
   aws glacier upload-multipart-part --body chunkab --range='bytes 1048576-2097151/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```

   ```
   aws glacier upload-multipart-part --body chunkac --range='bytes 2097152-3145727/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```

   ```
   aws glacier upload-multipart-part --body chunkad --range='bytes 3145728-4194303/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```

   ```
   aws glacier upload-multipart-part --body chunkae --range='bytes 4194304-4607999/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```
**注意**  
最终命令的 `--range` 参数值较小，因为上传的最后一个分段小于 1 MiB。如果成功，每个命令都将生成包含每个已上传分段校验和的输出。

1. 接下来，您将接组档案并完成上传。您必须包括档案的总大小和 SHA256 树形哈希。

   要计算存档的 SHA256 树形哈希，可以使用 Java C\$1 或Python。在此示例中，您将使用 Python。有关使用 Java 或 C\$1 的说明，请参阅[计算校验和](checksum-calculations.md)。

   创建 Python 文件 `checksum.py` 并插入以下代码。如果需要，请替换原始文件的名称。

   ```
   from botocore.utils import calculate_tree_hash
   					
   checksum = calculate_tree_hash(open('file_to_upload', 'rb'))
   print(checksum)
   ```

1. 运行`checksum.py`计算 SHA256 树形哈希。以下哈希值可能与您的输出不匹配。

   ```
   $ python3 checksum.py
   $ 3d760edb291bfc9d90d35809243de092aea4c47b308290ad12d084f69988ae0c
   ```

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html) 命令完成档案上传。替换 `--vault-name`、`--account-ID`、`--upload-ID` 和 `--checksum` 参数的值。`--archive` 参数值以字节为单位指定档案的总大小。此值必须是为您上传的各段的所有大小之和。如果需要，请替换此值。

   ```
   aws glacier complete-multipart-upload --archive-size 4608000 --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID --checksum checksum
   ```

   完成后，该命令将输出档案的 ID、校验和以及在 Amazon Glacier 中的位置。