

 **此页面仅适用于使用文件库和 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 存储类别。

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

# Amazon Glacier 入门
<a name="amazon-glacier-getting-started"></a>

您可以通过使用文件库和档案开始使用 Amazon Glacier（Amazon Glacier）。*文件库* 是用于存储档案的容器，*档案*是您存储在文件库中的任何对象（例如照片、视频或文档）。档案是 Amazon Glacier 中的基本存储单位。此入门练习为您提供了相关说明，帮助您了解如何对文件库和档案资源进行基本 Amazon Glacier 操作。有关这些资源的更多信息，请参阅 [Amazon Glacier 数据模型](amazon-glacier-data-model.md)部分。

在入门练习中，您将创建文件库、上传和下载档案，然后删除档案和文件库。您可以编程方式执行所有的这些操作。但是，入门练习会使用 Amazon Glacier 管理控制台来创建和删除文件库。要上传和下载档案，本入门部分使用了 适用于 Java 的 AWS SDK 和的高级别 API 适用于 .NET 的 AWS SDK。使用 Amazon Glacier 时，高级 API 将提供简化的编程体验。有关将高级 API 与配合使用的更多信息 AWS SDKs，请参阅[AWS SDKs 与 Amazon Glacier 搭配使用](using-aws-sdk.md)。

 

**重要**  
Amazon Glacier 确实提供了一个控制台。但是，任何存档操作（例如上传、下载或删除）都需要您使用 AWS Command Line Interface (CLI) 或编写代码。存档操作没有控制台支持。例如，要上传数据（例如照片、视频和其他文档），您必须使用 AWS CLI 或编写代码来发出请求，方法是直接使用 REST API 或使用 AWS SDKs。  
要安装 AWS CLI，请参阅[AWS Command Line Interface](https://aws.amazon.com/cli/)。有关将 Amazon Glacier 与配合使用的更多信息 AWS CLI，请参阅《[亚马逊冰川AWS CLI 参考](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)资料》。有关使用将档案上传 AWS CLI 到 Amazon Glacier 的示例，请参阅将 [Amazon Glacier 与 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-glacier.html) 

此入门练习为您提供了上传和下载存档的 Java 和 C\$1 代码示例。入门练习的最后一个部分为您提供了相关步骤，您可以通过这些步骤详细了解开发人员的 Amazon Glacier 使用体验。

**Topics**
+ [步骤 1：开始使用 Amazon Glacier 之前](getting-started-before-you-begin.md)
+ [步骤 2：在 Amazon Glacier 中创建文件库](getting-started-create-vault.md)
+ [步骤 3：在 Amazon Glacier 中将档案上传到文件库](getting-started-upload-archive.md)
+ [步骤 4：在 Amazon Glacier 中从文件库下载档案](getting-started-download-archive.md)
+ [步骤 5：从 Amazon Glacier 中的文件库删除档案](getting-started-delete-archive.md)
+ [步骤 6：在 Amazon Glacier 中删除文件库](getting-started-delete-vault.md)
+ [我从这里可以了解哪些内容？](getting-started-where-do-i-go-next.md)

# 步骤 1：开始使用 Amazon Glacier 之前
<a name="getting-started-before-you-begin"></a>

在开始本练习之前，你必须先注册 AWS 账户 （如果你还没有），然后下载其中一个 AWS SDKs。有关说明，请参阅以下部分。

**Topics**
+ [设置管理员用户 AWS 账户 和管理员用户](#setup)
+ [下载相应的 AWS SDK](#getting-started-download-sdk)

## 设置管理员用户 AWS 账户 和管理员用户
<a name="setup"></a>

如果您尚未这样做，则必须注册 AWS 账户 并在该帐户中创建管理员用户。

要完成设置，请遵循以下主题中的说明。

### 设置 AWS 账户 并创建管理员用户
<a name="setting-up"></a>

#### 报名参加 AWS
<a name="setting-up-signup"></a>

当您注册 Amazon Web Services (AWS) AWS 账户 时，系统会自动注册所有服务 AWS，包括亚马逊 Glacier。您只需为使用的服务付费。有关 Amazon Glacier 使用费率的更多信息，请参阅 [Amazon Glacier 定价页面](https://aws.amazon.com/s3/glacier/pricing/)。

如果您已经有 AWS 账户，请跳至[下载相应的 AWS SDK](#getting-started-download-sdk)。如果您没有 AWS 账户，请按以下步骤创建一个。

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**报名参加 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

要创建管理员用户，请选择以下选项之一。


****  

| 选择一种方法来管理您的管理员 | 目标 | 方式 | 您也可以 | 
| --- | --- | --- | --- | 
| 在 IAM Identity Center 中 （推荐） | 使用短期凭证访问 AWS。这符合安全最佳实操。有关最佳实践的信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。 | 有关说明，请参阅《AWS IAM Identity Center 用户指南》中的[入门](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html)。 | 通过在《AWS Command Line Interface 用户指南[》 AWS IAM Identity Center中配置 AWS CLI 要使用的来](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-sso.html)配置编程访问权限。 | 
| 在 IAM 中 （不推荐使用） | 使用长期凭证访问 AWS。 | 按照《IAM 用户指南》中的[创建用于紧急访问的 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started-emergency-iam-user.html)中的说明进行操作。 | 按照《IAM 用户指南》中的[管理 IAM 用户的访问密钥](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_access-keys.html)，配置编程式访问。 | 

## 下载相应的 AWS SDK
<a name="getting-started-download-sdk"></a>

要尝试入门练习，您必须决定要使用哪种编程语言，然后为您的开发平台下载相应的 AWS SDK。

入门练习提供了 Java 和 C\$1 示例。

### 正在下载 适用于 Java 的 AWS SDK
<a name="getting-started-download-sdk-java"></a>

要测试此开发人员指南中的 Java 示例，需要 适用于 Java 的 AWS SDK。您有以下几种下载选择：
+ [如果你使用的是 Eclipse，你可以使用更新网站 AWS Toolkit for Eclipse http://aws.amazon.com/eclipse/ 下载并安装。](https://aws.amazon.com/eclipse/)有关更多信息，请参阅 [AWS Toolkit for Eclipse](https://aws.amazon.com/eclipse/)。
+ 如果您使用任何其他 IDE 来创建应用程序，请下载[适用于 Java 的 AWS SDK](https://aws.amazon.com/sdkforjava)。

### 正在下载 适用于 .NET 的 AWS SDK
<a name="getting-started-download-sdk-dotnet"></a>

要测试此开发人员指南中的 C\$1 示例，需要 适用于 .NET 的 AWS SDK。您有以下几种下载选择：
+ 如果您使用的是 Visual Studio，则可以同时安装 适用于 .NET 的 AWS SDK 和 AWS Toolkit for Visual Studio。该工具包提供了 Visual Studio 的 AWS 资源管理器以及可用于开发的项目模板。要下载 适用于 .NET 的 AWS SDK，请访问 [http://aws.amazon.com/sdkfornet](https://aws.amazon.com/sdkfornet/)。默认情况下，安装脚本会同时安装 S AWS DK 和 AWS Toolkit for Visual Studio。要了解有关工具包的更多信息，请参阅[AWS Toolkit for Visual Studio 用户指南](https://docs.aws.amazon.com/AWSToolkitVS/latest/UserGuide/)。
+ 如果您使用任何其他 IDE 创建应用程序，则可以使用上述步骤中提供的相同链接并仅安装 适用于 .NET 的 AWS SDK。

# 步骤 2：在 Amazon Glacier 中创建文件库
<a name="getting-started-create-vault"></a>

文件库是用于存储档案的容器。您的第一步是在其中一个支持的存储库中创建一个保管库 AWS 区域。有关 Amazon Glacier 支持的终端节点列表，请参阅*AWS 一般参考*中的[亚马逊 Glacier 终端节点和配额](https://docs.aws.amazon.com/general/latest/gr/glacier-service.html)。 AWS 区域 

您可以编程方式创建文件库，也可以通过使用 Amazon Glacier 控制台创建文件库。此部分使用控制台创建文件库。

**创建文件库**

1. 登录 AWS 管理控制台 并在家中打开 Amazon Glacier [https://console.aws.amazon.com/glacier/主](https://console.aws.amazon.com/glacier/home)机。

1. 在左侧导航窗格中，选择**文件库**。

1. 选择**创建文件库**。

   将打开 **创建文件库**页面。

1. 在 **“选择区域”** 下， AWS 区域 从 “区域” 选择器中选择。您的文件库将位于您选择的区域中。

1. 对于**文件库名称**，输入文件库的名称。

   以下是文件库的命名要求：
   + 文件库名称在 AWS 账户 和创建文件库时必须是唯一的。 AWS 区域 
   + 文件库名称的长度必须介于 1 到 255 个字符之间。
   + 文件库名称只能包含以下字符：**a–z**、**A–Z**、**0–9**、**\$1**（下划线）、**-**（连字符）和 **.**（句点）。

1. 在**事件通知**下，要在文件库中打开或关闭任务完成时的通知，请选择以下设置之一：
   + **关闭通知** - 将关闭通知，在指定任务完成后不会向 Amazon Simple Notification Service（Amazon SNS）主题发送通知。
   + **打开通知** - 将打开通知，在指定任务完成后将向提供的 Amazon SNS 主题发送通知。

     如果您选择了**打开通知**，请参阅[使用 Amazon Glacier 控制台配置文件库通知](https://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications-console.html)。

1. 如果 AWS 区域 和保管库名称正确，请选择**创建文件库**。

新的文件库现已列在 Amazon Glacier 控制台的**文件库**页面上。

# 步骤 3：在 Amazon Glacier 中将档案上传到文件库
<a name="getting-started-upload-archive"></a>

在此步骤中，您将示例档案上传到您在前面的步骤中创建的文件库（请参阅[步骤 2：在 Amazon Glacier 中创建文件库](getting-started-create-vault.md)）。请根据您使用的开发平台选择本节末尾的链接之一。

**重要**  
任何档案操作（例如上传、下载或删除）均要求您使用 AWS Command Line Interface （CLI）或编写代码。存档操作没有控制台支持。例如，要上传数据（例如照片、视频和其他文档），您必须使用 AWS CLI 或编写代码来发出请求，方法是直接使用 REST API 或使用 AWS SDKs。  
要安装 AWS CLI，请参阅[AWS Command Line Interface](https://aws.amazon.com/cli/)。有关将 Amazon Glacier 与配合使用的更多信息 AWS CLI，请参阅 [Amazon Glacier AWS CLI 参考](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)资料。有关使用将档案上传 AWS CLI 到 Amazon Glacier 的示例，请参阅将 [Amazon Glacier 与 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-glacier.html) 

档案是您存储在文件库中的任何对象（例如，照片、视频或文档）。档案是 Amazon Glacier 中的基本存储单位。您可以在单个请求中上传档案。对于大型档案，Amazon Glacier 提供了分段上传 API 操作，它可让您分段上传档案。

在此入门部分中，您会在单个请求中上传示例档案。对于此练习，您会指定一个较小的文件。对于较大的文件，适合使用分段上传。有关更多信息，请参阅[分段上传大型档案（分段上传）](uploading-archive-mpu.md)。

**Topics**
+ [使用以下方法将档案上传到 Amazon Glacier 中的文件库 适用于 Java 的 AWS SDK](getting-started-upload-archive-java.md)
+ [使用 Amazon Glacier 将档案上传到文件库 适用于 .NET 的 AWS SDK](getting-started-upload-archive-dotnet.md)

# 使用以下方法将档案上传到 Amazon Glacier 中的文件库 适用于 Java 的 AWS SDK
<a name="getting-started-upload-archive-java"></a>

以下 Java 代码示例使用的高级别 API 将示例档案上传 适用于 Java 的 AWS SDK 到文件库。在代码示例中，请注意以下情况：
+ 以下示例创建 `AmazonGlacierClient` 类的实例。
+ 该示例使用了 `ArchiveTransferManager` 类的 `upload` API 操作，该类属于 适用于 Java 的 AWS SDK高级 API。
+ 该示例使用美国西部（俄勒冈州）区域（`us-west-2`）。

有关如何运行此示例的 step-by-step说明，请参阅[使用 Eclipse 运行 Amazon Glacier 的 Java 示例](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java)。您必须更新待上传档案文件名称旁显示的代码。

**注意**  
Amazon Glacier 在文件库中保留一份所有档案的清单。当您上传以下示例中的档案时，该档案直到文件库清单已更新后才会在管理控制台的文件库中显示。此更新通常每天进行一次。

**适用于 Java 的 SDK 2.x**  
 还有更多相关信息 GitHub。在 [AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/glacier#code-examples)中查找完整示例，了解如何进行设置和运行。

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.glacier.GlacierClient;
import software.amazon.awssdk.services.glacier.model.UploadArchiveRequest;
import software.amazon.awssdk.services.glacier.model.UploadArchiveResponse;
import software.amazon.awssdk.services.glacier.model.GlacierException;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class UploadArchive {

    static final int ONE_MB = 1024 * 1024;

    public static void main(String[] args) {
        final String usage = """

                Usage:   <strPath> <vaultName>\s

                Where:
                   strPath - The path to the archive to upload (for example, C:\\AWS\\test.pdf).
                   vaultName - The name of the vault.
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String strPath = args[0];
        String vaultName = args[1];
        File myFile = new File(strPath);
        Path path = Paths.get(strPath);
        GlacierClient glacier = GlacierClient.builder()
                .region(Region.US_EAST_1)
                .build();

        String archiveId = uploadContent(glacier, path, vaultName, myFile);
        System.out.println("The ID of the archived item is " + archiveId);
        glacier.close();
    }

    public static String uploadContent(GlacierClient glacier, Path path, String vaultName, File myFile) {
        // Get an SHA-256 tree hash value.
        String checkVal = computeSHA256(myFile);
        try {
            UploadArchiveRequest uploadRequest = UploadArchiveRequest.builder()
                    .vaultName(vaultName)
                    .checksum(checkVal)
                    .build();

            UploadArchiveResponse res = glacier.uploadArchive(uploadRequest, path);
            return res.archiveId();

        } catch (GlacierException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }

    private static String computeSHA256(File inputFile) {
        try {
            byte[] treeHash = computeSHA256TreeHash(inputFile);
            System.out.printf("SHA-256 tree hash = %s\n", toHex(treeHash));
            return toHex(treeHash);

        } catch (IOException ioe) {
            System.err.format("Exception when reading from file %s: %s", inputFile, ioe.getMessage());
            System.exit(-1);

        } catch (NoSuchAlgorithmException nsae) {
            System.err.format("Cannot locate MessageDigest algorithm for SHA-256: %s", nsae.getMessage());
            System.exit(-1);
        }
        return "";
    }

    public static byte[] computeSHA256TreeHash(File inputFile) throws IOException,
            NoSuchAlgorithmException {

        byte[][] chunkSHA256Hashes = getChunkSHA256Hashes(inputFile);
        return computeSHA256TreeHash(chunkSHA256Hashes);
    }

    /**
     * Computes an SHA256 checksum for each 1 MB chunk of the input file. This
     * includes the checksum for the last chunk, even if it's smaller than 1 MB.
     */
    public static byte[][] getChunkSHA256Hashes(File file) throws IOException,
            NoSuchAlgorithmException {

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        long numChunks = file.length() / ONE_MB;
        if (file.length() % ONE_MB > 0) {
            numChunks++;
        }

        if (numChunks == 0) {
            return new byte[][] { md.digest() };
        }

        byte[][] chunkSHA256Hashes = new byte[(int) numChunks][];
        FileInputStream fileStream = null;

        try {
            fileStream = new FileInputStream(file);
            byte[] buff = new byte[ONE_MB];

            int bytesRead;
            int idx = 0;

            while ((bytesRead = fileStream.read(buff, 0, ONE_MB)) > 0) {
                md.reset();
                md.update(buff, 0, bytesRead);
                chunkSHA256Hashes[idx++] = md.digest();
            }

            return chunkSHA256Hashes;

        } finally {
            if (fileStream != null) {
                try {
                    fileStream.close();
                } catch (IOException ioe) {
                    System.err.printf("Exception while closing %s.\n %s", file.getName(),
                            ioe.getMessage());
                }
            }
        }
    }

    /**
     * Computes the SHA-256 tree hash for the passed array of 1 MB chunk
     * checksums.
     */
    public static byte[] computeSHA256TreeHash(byte[][] chunkSHA256Hashes)
            throws NoSuchAlgorithmException {

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[][] prevLvlHashes = chunkSHA256Hashes;
        while (prevLvlHashes.length > 1) {
            int len = prevLvlHashes.length / 2;
            if (prevLvlHashes.length % 2 != 0) {
                len++;
            }

            byte[][] currLvlHashes = new byte[len][];
            int j = 0;
            for (int i = 0; i < prevLvlHashes.length; i = i + 2, j++) {

                // If there are at least two elements remaining.
                if (prevLvlHashes.length - i > 1) {

                    // Calculate a digest of the concatenated nodes.
                    md.reset();
                    md.update(prevLvlHashes[i]);
                    md.update(prevLvlHashes[i + 1]);
                    currLvlHashes[j] = md.digest();

                } else { // Take care of the remaining odd chunk
                    currLvlHashes[j] = prevLvlHashes[i];
                }
            }

            prevLvlHashes = currLvlHashes;
        }

        return prevLvlHashes[0];
    }

    /**
     * Returns the hexadecimal representation of the input byte array
     */
    public static String toHex(byte[] data) {
        StringBuilder sb = new StringBuilder(data.length * 2);
        for (byte datum : data) {
            String hex = Integer.toHexString(datum & 0xFF);

            if (hex.length() == 1) {
                // Append leading zero.
                sb.append("0");
            }
            sb.append(hex);
        }
        return sb.toString().toLowerCase();
    }
}
```
+  有关 API 的详细信息，请参阅 *AWS SDK for Java 2.x API 参考[UploadArchive](https://docs.aws.amazon.com/goto/SdkForJavaV2/glacier-2012-06-01/UploadArchive)*中的。

# 使用 Amazon Glacier 将档案上传到文件库 适用于 .NET 的 AWS SDK
<a name="getting-started-upload-archive-dotnet"></a>

以下 C\$1 代码示例使用的高级别 API 将示例档案上传 适用于 .NET 的 AWS SDK 到文件库。在代码示例中，请注意以下情况：

 
+ 该示例为指定的 Amazon Glacier 区域端点创建 `ArchiveTransferManager` 类的实例。
+ 该代码示例使用美国西部（俄勒冈州）区域（`us-west-2`）。
+ 该示例使用 `Upload` 类的 `ArchiveTransferManager` API 操作上传档案。对于小型档案，此操作会将档案直接上传到 Amazon Glacier。对于大型档案，此操作将使用 Amazon Glacier 的分段上传 API 操作将上传内容拆分为多个部分，以便在将数据流式传输到 Amazon Glacier 时出错的情况下更好地进行错误恢复。

有关如何运行以下示例的 step-by-step说明，请参阅[运行代码示例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)。您必须更新文件库名称和待上传档案文件名称旁显示的代码。

**注意**  
Amazon Glacier 在文件库中保留一份所有档案的清单。当您上传以下示例中的档案时，该档案直到文件库清单已更新后才会在管理控制台的文件库中显示。此更新通常每天进行一次。

**Example — 使用的高级别 API 上传档案 适用于 .NET 的 AWS SDK**  <a name="GS_ExampleUploadArchiveDotNet"></a>

```
using System;
using Amazon.Glacier;
using Amazon.Glacier.Transfer;
using Amazon.Runtime;

namespace glacier.amazon.com.rproxy.govskope.ca.docsamples
{
    class ArchiveUploadHighLevel_GettingStarted
    {
        static string vaultName = "examplevault";
        static string archiveToUpload = "*** Provide file name (with full path) to upload ***";

        public static void Main(string[] args)
        {
            try
            {
                var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);
                // Upload an archive.
                string archiveId = manager.Upload(vaultName, "getting started archive test", archiveToUpload).ArchiveId;
                Console.WriteLine("Copy and save the following Archive ID for the next step."); 
                Console.WriteLine("Archive ID: {0}", archiveId);
                Console.WriteLine("To continue, press Enter");
                Console.ReadKey();
            }
            catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }
            catch (AmazonServiceException e) { Console.WriteLine(e.Message); }
            catch (Exception e) { Console.WriteLine(e.Message); }
            Console.WriteLine("To continue, press Enter");
            Console.ReadKey();
        }
    }
}
```

# 步骤 4：在 Amazon Glacier 中从文件库下载档案
<a name="getting-started-download-archive"></a>

在此步骤中，您将下载之前在[步骤 3：在 Amazon Glacier 中将档案上传到文件库](getting-started-upload-archive.md)中上传的示例档案。

 

**重要**  
Amazon Glacier 确实提供了一个控制台。但是，任何存档操作（例如上传、下载或删除）都需要您使用 AWS Command Line Interface (CLI) 或编写代码。存档操作没有控制台支持。例如，要上传数据（例如照片、视频和其他文档），您必须使用 AWS CLI 或编写代码来发出请求，方法是直接使用 REST API 或使用 AWS SDKs。  
要安装 AWS CLI，请参阅[AWS Command Line Interface](https://aws.amazon.com/cli/)。有关将 Amazon Glacier 与配合使用的更多信息 AWS CLI，请参阅 [Amazon Glacier AWS CLI 参考](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)资料。有关使用将档案上传 AWS CLI 到 Amazon Glacier 的示例，请参阅将 [Amazon Glacier 与 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-glacier.html) 

通常，从 Amazon Glacier 检索数据是一个分为两个步骤的过程：

1. 启动检索任务。

1. 任务完成后，按字节下载数据。

要从 Amazon Glacier 检索档案，您首先要启动任务。任务完成后，您应下载数据。有关档案检索的更多信息，请参阅[检索 Amazon Glacier 档案](downloading-an-archive-two-steps.md)。

您请求的访问时间取决于所选的检索选项：加速、标准还是批量检索。对于除了最大型档案（250 MB\$1）之外的所有其他档案，使用加速检索访问的档案通常在 1 到 5 分钟内可用。使用标准检索来检索的档案通常在 3 到 5 小时内可用。批量检索通常在 5 到 12 小时内可用。有关各个检索选项的更多信息，请参阅 [Amazon Glacier 常见问题解答](https://aws.amazon.com/glacier/faqs/#Data-retrievals)。有关数据检索费用的更多信息，请参阅 [Amazon Glacier 定价页面](https://aws.amazon.com/s3/glacier/pricing/)。

以下主题中显示的代码示例会启动任务，等待任务完成，然后下载档案的数据。

**Topics**
+ [使用 Amazon Glacier 中的文件库下载档案 适用于 Java 的 AWS SDK](getting-started-download-archive-java.md)
+ [使用 Amazon Glacier 中的文件库下载档案 适用于 .NET 的 AWS SDK](getting-started-download-archive-dotnet.md)

# 使用 Amazon Glacier 中的文件库下载档案 适用于 Java 的 AWS SDK
<a name="getting-started-download-archive-java"></a>

以下 Java 代码示例使用的 适用于 Java 的 AWS SDK 高级别 API 下载您在上一步中上传的档案。在代码示例中，请注意以下情况：
+ 以下示例创建 `AmazonGlacierClient` 类的实例。
+ 该代码使用美国西部（俄勒冈州）区域（`us-west-2`）匹配您之前在[步骤 2：在 Amazon Glacier 中创建文件库](getting-started-create-vault.md)中创建文件库的位置。
+ 该示例使用了 `ArchiveTransferManager` 类的 `download` API 操作，该类属于 适用于 Java 的 AWS SDK高级 API。该示例将创建 Amazon Simple Notification Service（Amazon SNS）主题，以及该主题订阅的 Amazon Simple Queue Service（Amazon SQS）队列。如果您按照中的说明创建了 AWS Identity and Access Management (IAM) 管理员用户[步骤 1：开始使用 Amazon Glacier 之前](getting-started-before-you-begin.md)，则您的用户拥有创建和使用 Amazon SNS 主题和 Amazon SQS 队列所必需的 IAM 权限。

有关如何运行此示例的 step-by-step说明，请参阅[使用 Eclipse 运行 Amazon Glacier 的 Java 示例](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java)。您需要更新 [步骤 3：在 Amazon Glacier 中将档案上传到文件库](getting-started-upload-archive.md) 中已上传文件的档案 ID 旁显示的代码。

**Example — 使用下载档案 适用于 Java 的 AWS SDK**  <a name="GS_ExampleDownloadArchiveJava"></a>

```
import java.io.File;
import java.io.IOException;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.transfer.ArchiveTransferManager;
import com.amazonaws.services.sns.AmazonSNSClient;
import com.amazonaws.services.sqs.AmazonSQSClient;

public class AmazonGlacierDownloadArchive_GettingStarted {
    public static String vaultName = "examplevault";
    public static String archiveId = "*** provide archive ID ***";
    public static String downloadFilePath  = "*** provide location to download archive ***";
    
    public static AmazonGlacierClient glacierClient;
    public static AmazonSQSClient sqsClient;
    public static AmazonSNSClient snsClient;
    
    public static void main(String[] args) throws IOException {
        
        
    	ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();
    	
        glacierClient = new AmazonGlacierClient(credentials);        
        sqsClient = new AmazonSQSClient(credentials);
        snsClient = new AmazonSNSClient(credentials);
        
        glacierClient.setEndpoint("glacier.us-west-2.amazonaws.com");
        sqsClient.setEndpoint("sqs.us-west-2.amazonaws.com");
        snsClient.setEndpoint("sns.us-west-2.amazonaws.com");

        try {
            ArchiveTransferManager atm = new ArchiveTransferManager(glacierClient, sqsClient, snsClient);
            
            atm.download(vaultName, archiveId, new File(downloadFilePath));
            
        } catch (Exception e)
        {
            System.err.println(e);
        }
    }
}
```

# 使用 Amazon Glacier 中的文件库下载档案 适用于 .NET 的 AWS SDK
<a name="getting-started-download-archive-dotnet"></a>

以下 C\$1 代码示例使用的高级别 API 下载您之前在中上传的档案[使用 Amazon Glacier 将档案上传到文件库 适用于 .NET 的 AWS SDK](getting-started-upload-archive-dotnet.md)。 适用于 .NET 的 AWS SDK 在代码示例中，请注意以下情况：

 
+ 该示例为指定的 Amazon Glacier 区域端点创建 `ArchiveTransferManager` 类的实例。
+ 该代码示例使用美国西部（俄勒冈州）区域（`us-west-2`）匹配您之前在[步骤 2：在 Amazon Glacier 中创建文件库](getting-started-create-vault.md)中创建文件库的位置。
+ 该示例使用 `Download` 类的 `ArchiveTransferManager` API 操作下载档案。该示例将创建 Amazon Simple Notification Service（Amazon SNS）主题，以及该主题订阅的 Amazon Simple Queue Service（Amazon SQS）队列。如果您按照中的说明创建了 AWS Identity and Access Management (IAM) 管理员用户[步骤 1：开始使用 Amazon Glacier 之前](getting-started-before-you-begin.md)，则您的用户拥有创建和使用 Amazon SNS 主题和 Amazon SQS 队列所必需的 IAM 权限。
+ 此示例启动了档案检索任务，并对队列进行轮询以便找到可用档案。如果档案可用，则开始下载。有关检索时间的详细信息，请参阅[档案检索选项](downloading-an-archive-two-steps.md#api-downloading-an-archive-two-steps-retrieval-options)。

有关如何运行此示例的 step-by-step说明，请参阅[运行代码示例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)。您需要更新 [步骤 3：在 Amazon Glacier 中将档案上传到文件库](getting-started-upload-archive.md) 中已上传文件的档案 ID 旁显示的代码。

**Example — 使用的高级别 API 下载档案 适用于 .NET 的 AWS SDK**  <a name="GS_ExampleDownloadArchiveDotNet"></a>

```
using System;
using Amazon.Glacier;
using Amazon.Glacier.Transfer;
using Amazon.Runtime;

namespace glacier.amazon.com.rproxy.govskope.ca.docsamples
{
    class ArchiveDownloadHighLevel_GettingStarted
    {
        static string vaultName = "examplevault";
        static string archiveId = "*** Provide archive ID ***";
        static string downloadFilePath = "*** Provide the file name and path to where to store the download ***";

        public static void Main(string[] args)
        {
            try
            {
                var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);

                var options = new DownloadOptions();
                options.StreamTransferProgress += ArchiveDownloadHighLevel_GettingStarted.progress;
                // Download an archive.
                Console.WriteLine("Intiating the archive retrieval job and then polling SQS queue for the archive to be available.");
                Console.WriteLine("Once the archive is available, downloading will begin.");
                manager.Download(vaultName, archiveId, downloadFilePath, options);
                Console.WriteLine("To continue, press Enter");
                Console.ReadKey();
            }
            catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }
            catch (AmazonServiceException e) { Console.WriteLine(e.Message); }
            catch (Exception e) { Console.WriteLine(e.Message); }
            Console.WriteLine("To continue, press Enter");
            Console.ReadKey();
        }

        static int currentPercentage = -1;
        static void progress(object sender, StreamTransferProgressArgs args)
        {
            if (args.PercentDone != currentPercentage)
            {
                currentPercentage = args.PercentDone;
                Console.WriteLine("Downloaded {0}%", args.PercentDone);
            }
        }
    }
}
```

# 步骤 5：从 Amazon Glacier 中的文件库删除档案
<a name="getting-started-delete-archive"></a>

在此步骤中，您将删除在[步骤 3：在 Amazon Glacier 中将档案上传到文件库](getting-started-upload-archive.md)中上传的示例档案。

**重要**  
无法使用 Amazon Glacier 控制台删除档案。任何存档操作（例如上传、下载或删除）都需要您使用 AWS Command Line Interface (CLI) 或编写代码。要上传数据（例如照片、视频和其他文档），您必须使用 AWS CLI 或编写代码来发出请求，方法是直接使用 REST API 或使用 AWS SDKs。  
要安装 AWS CLI，请参阅[AWS Command Line Interface](https://aws.amazon.com/cli/)。有关将 Amazon Glacier 与配合使用的更多信息 AWS CLI，请参阅 [Amazon Glacier AWS CLI 参考](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)资料。有关使用将档案上传 AWS CLI 到 Amazon Glacier 的示例，请参阅将 [Amazon Glacier 与 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-glacier.html) 

通过以下任一操作 SDKs 或以下方法删除示例存档 AWS CLI：
+ [使用 Amazon Glacier 中的文件库中删除档案 适用于 Java 的 AWS SDK](getting-started-delete-archive-java.md)
+ [使用 Amazon Glacier 中的文件库中删除档案 适用于 .NET 的 AWS SDK](getting-started-delete-archive-dotnet.md)
+ [使用 Amazon Glacier 中的档案删除 AWS CLI](getting-started-delete-archive-cli.md)

## 相关部分
<a name="getting-started-delete-archive-related-sections"></a>

 
+ [步骤 3：在 Amazon Glacier 中将档案上传到文件库](getting-started-upload-archive.md)
+ [删除 Amazon Glacier 中的档案](deleting-an-archive.md)

# 使用 Amazon Glacier 中的文件库中删除档案 适用于 Java 的 AWS SDK
<a name="getting-started-delete-archive-java"></a>

以下代码示例使用 适用于 Java 的 AWS SDK 删除档案。在代码中，请注意以下情况：

 
+ `DeleteArchiveRequest` 数据元描述删除请求，包括档案所在的文件库名称和档案 ID。
+ `deleteArchive` API 操作向 Amazon Glacier 发送删除档案的请求。
+ 该示例使用美国西部（俄勒冈州）区域（`us-west-2`）。

有关如何运行此示例的 step-by-step说明，请参阅[使用 Eclipse 运行 Amazon Glacier 的 Java 示例](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java)。您需要更新 [步骤 3：在 Amazon Glacier 中将档案上传到文件库](getting-started-upload-archive.md) 中已上传文件的档案 ID 旁显示的代码。

**Example — 使用删除档案 适用于 Java 的 AWS SDK**  <a name="GS_ExampleDeleteArchiveJava"></a>

```
import java.io.IOException;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.model.DeleteArchiveRequest;

public class AmazonGlacierDeleteArchive_GettingStarted {

    public static String vaultName = "examplevault";
    public static String archiveId = "*** provide archive ID***";
    public static AmazonGlacierClient client;
    
    public static void main(String[] args) throws IOException {
        
    	
    	ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();

        client = new AmazonGlacierClient(credentials);
        client.setEndpoint("https://glacier.us-west-2.amazonaws.com/");        

        try {

            // Delete the archive.
            client.deleteArchive(new DeleteArchiveRequest()
                .withVaultName(vaultName)
                .withArchiveId(archiveId));
            
            System.out.println("Deleted archive successfully.");
            
        } catch (Exception e) {
            System.err.println("Archive not deleted.");
            System.err.println(e);
        }
    }
}
```

# 使用 Amazon Glacier 中的文件库中删除档案 适用于 .NET 的 AWS SDK
<a name="getting-started-delete-archive-dotnet"></a>

以下 C\$1 代码示例使用的 适用于 .NET 的 AWS SDK 高级别 API 删除您在上一步中上传的档案。在代码示例中，请注意以下情况：
+ 该示例为指定的 Amazon Glacier 区域端点创建 `ArchiveTransferManager` 类的实例。
+ 该代码示例使用美国西部（俄勒冈州）区域（`us-west-2`）。
+ 该示例使用 `ArchiveTransferManager` 类的 `Delete` API 操作，该类属于 适用于 .NET 的 AWS SDK的高级 API。

有关如何运行此示例的 step-by-step说明，请参阅[运行代码示例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)。您需要更新 [步骤 3：在 Amazon Glacier 中将档案上传到文件库](getting-started-upload-archive.md) 中已上传文件的档案 ID 旁显示的代码。

**Example — 使用的高级别 API 删除档案 适用于 .NET 的 AWS SDK**  <a name="GS_ExampleDeleteArchiveDotNet"></a>

```
using System;
using Amazon.Glacier;
using Amazon.Glacier.Transfer;
using Amazon.Runtime;

namespace glacier.amazon.com.rproxy.govskope.ca.docsamples
{
  class ArchiveDeleteHighLevel_GettingStarted
  {
    static string vaultName = "examplevault";
    static string archiveId = "*** Provide archive ID ***";

    public static void Main(string[] args)
    {
      try
      {
        var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);
        manager.DeleteArchive(vaultName, archiveId);
      }
      catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }
      catch (AmazonServiceException e) { Console.WriteLine(e.Message); }
      catch (Exception e) { Console.WriteLine(e.Message); }
      Console.WriteLine("To continue, press Enter");
      Console.ReadKey();
    }
  }
}
```

# 使用 Amazon Glacier 中的档案删除 AWS CLI
<a name="getting-started-delete-archive-cli"></a>

您可以使用 AWS Command Line Interface (AWS CLI) 删除 Amazon Glacier 中的档案。

**Topics**
+ [（先决条件）设置 AWS CLI](#Creating-Vaults-CLI-Setup)
+ [示例：使用删除档案 AWS CLI](#getting-started-Deleting-Archives-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
     ```

## 示例：使用删除档案 AWS CLI
<a name="getting-started-Deleting-Archives-CLI-Implementation"></a>

1. 使用 `initiate-job` 命令启动清单检索任务。有关 `initiate-job` 命令的更多信息，请参阅[启动任务](https://docs.aws.amazon.com/amazonglacier/latest/dev/api-initiate-job-post.html)。

   ```
   aws glacier initiate-job --vault-name awsexamplevault --account-id 111122223333 --job-parameters "{\"Type\": \"inventory-retrieval\"}"
   ```

    预期输出：

   ```
   {
       "location": "/111122223333/vaults/awsexamplevault/jobs/*** jobid ***", 
       "jobId": "*** jobid ***"
   }
   ```

1. 使用 `describe-job` 命令检查上一个检索任务的状态。有关 `describe-job` 命令的更多信息，请参阅[描述任务](https://docs.aws.amazon.com/amazonglacier/latest/dev/api-describe-job-get.html)。

   ```
   aws glacier describe-job --vault-name awsexamplevault --account-id 111122223333 --job-id *** jobid ***
   ```

    预期输出：

   ```
   {
       "InventoryRetrievalParameters": {
           "Format": "JSON"
       }, 
       "VaultARN": "*** vault arn ***", 
       "Completed": false, 
       "JobId": "*** jobid ***", 
       "Action": "InventoryRetrieval", 
       "CreationDate": "*** job creation date ***", 
       "StatusCode": "InProgress"
   }
   ```

1. 等待任务完成。

   您必须等到任务输出已作好供您下载的准备。如果您在文件库中设置了通知配置，或者在启动任务时指定了 Amazon Simple Notification Service（Amazon SNS）主题，则 Amazon Glacier 会在完成任务后向该主题发送消息。

   您可以设置文件库的特定事件的通知配置。有关更多信息，请参阅[在 Amazon Glacier 中配置文件库通知](configuring-notifications.md)。只要发生特定事件，Amazon Glacier 就会向指定的 Amazon SNS 主题发送消息。

1. 任务完成后，使用 `get-job-output` 命令将检索任务下载到文件 `output.json`。有关 `get-job-output` 命令的更多信息，请参阅[获取任务输出](https://docs.aws.amazon.com/amazonglacier/latest/dev/api-job-output-get.html)。

   ```
   aws glacier get-job-output --vault-name awsexamplevault --account-id 111122223333 --job-id *** jobid *** output.json
   ```

   此命令会生成一个包含以下字段的文件。

   ```
   {
   "VaultARN":"arn:aws:glacier:region:111122223333:vaults/awsexamplevault",
   "InventoryDate":""*** job completion date ***"",
   "ArchiveList":[{
   {"ArchiveId":""*** archiveid ***"",
   "ArchiveDescription":"*** archive description (if set) ***",
   "CreationDate":""*** archive creation date ***"",
   "Size":""*** archive size (in bytes) ***"",
   "SHA256TreeHash":"*** archive hash ***"
   }],
   "ArchiveId": 123456789
   
   }
   ```

1. 使用 `delete-archive` 命令从文件库中删除每个档案，直到不保留任何档案。

   ```
   aws glacier delete-archive --vault-name awsexamplevault --account-id 111122223333 --archive-id="*** archiveid ***"
   ```

 有关 `delete-archive` 命令的更多信息，请参阅[删除档案](https://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-delete.html)。

# 步骤 6：在 Amazon Glacier 中删除文件库
<a name="getting-started-delete-vault"></a>

文件库是用于存储档案的容器。要删除 Amazon Glacier 文件库，您必须首先删除文件库中截至 Amazon Glacier 计算的最后清单的所有现有档案。

您可以通过编程方式或使用 Amazon Glacier 控制台删除文件库。有关以编程方式删除文件库的信息，请参阅[在 Amazon Glacier 中删除文件库](deleting-vaults.md)。

**重要**  
如果您在最近 24 小时内将档案上传到文件库或从文件库中删除档案，则必须等到最后一次更新文件库清单以反映最新信息。Amazon Glacier 每 24 小时会定期为每个文件库准备一份清单。

**删除空文件库**

1. 登录 AWS 管理控制台 并在家中打开 Amazon Glacier [https://console.aws.amazon.com/glacier/主](https://console.aws.amazon.com/glacier/home)机。

1. 从 “**选择区域**” 菜单中， AWS 区域 为要删除的文件库选择。

   在此入门练习中，您的示例文件库位于美国西部（俄勒冈州）区域。

1. 选择要删除的空文件库旁边的选项按钮。如果文件库不为空，则必须先删除所有档案，然后才能删除文件库。有关更多信息，请参阅[删除 Amazon Glacier 中的档案](deleting-an-archive.md)。
**重要**  
删除文件库的操作无法撤消。

1. 选择**删除**。

1. 此时显示**删除文件库**对话框。选择**删除**。

**删除非空文件库**

1. 如果要删除非空文件库，则必须先删除所有现有档案，然后再删除文件库。为此，您可以编写代码，使用 REST API、、 适用于 .NET 的 AWS SDK 或，发出删除档案请求 AWS CLI。 适用于 Java 的 AWS SDK有关删除档案的信息，请参阅[步骤 5：从 Amazon Glacier 中的文件库删除档案](getting-started-delete-archive.md)。

1. 文件库为空后，按照上述步骤删除空文件库。

# 我从这里可以了解哪些内容？
<a name="getting-started-where-do-i-go-next"></a>

至此，您已完成了入门练习，您可以探索以下部分以了解有关 Amazon Glacier 的更多信息。

 
+ [在 Amazon Glacier 中处理文件库](working-with-vaults.md)
+ [在 Amazon Glacier 中处理档案](working-with-archives.md)