

 **此页面仅适用于使用文件库和 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="deleting-an-archive"></a>

无法使用 Amazon Glacier（Amazon Glacier）管理控制台删除档案。要删除档案，必须使用 AWS Command Line Interface (CLI) 或编写代码，直接使用 REST API 或使用 适用于 Java 的 AWS SDK 和.NET 包装器库发出删除请求。以下主题说明了如何使用 适用于 Java 的 AWS SDK 和.NET 包装器库、REST API 和。 AWS CLI

**Topics**
+ [使用适用于 Java 的 AWS SDK 在 Amazon Glacier 中删除档案](deleting-an-archive-using-java.md)
+ [使用 Amazon Glacier 删除档案 适用于 .NET 的 AWS SDK](deleting-an-archive-using-dot-net.md)
+ [使用 REST API 删除 Amazon Glacier 档案](deleting-an-archive-using-rest.md)
+ [使用 Amazon Glacier 删除档案 AWS Command Line Interface](deleting-an-archive-using-cli.md)

您可以从文件库一次删除一个档案。要删除档案，您必须在删除请求中提供档案 ID。您可以通过下载包含下载档案的文件库的文件库清单来获取档案 ID。有关下载文件库清单的更多信息，请参阅[在 Amazon Glacier 中下载文件库清单](vault-inventory.md)。

在删除档案后，您仍可能成功请求启动对已删除档案的检索任务，但档案检索任务会失败。

在您删除档案时，对相应档案 ID 正在进行的档案检索可能成功，也可能不成功，具体取决于下面的场景：

 
+ 如果 Amazon Glacier 收到删除档案请求时，档案检索任务正在积极地为下载准备数据，则档案检索操作可能会失败。
+ 如果 Amazon Glacier 收到删除档案请求时，档案检索任务已成功地为下载准备好档案，则您将能够下载输出。

有关档案检索的更多信息，请参阅[在 Amazon Glacier 中下载档案](downloading-an-archive.md)。

此操作是幂等的。删除已删除的档案不会导致错误。

删除档案后，如果您立即下载文件库清单，则它可能会在列表中包括已删除的档案，因为 Amazon Glacier 每天大约只准备一次文件库清单。

**注意**  
有关自动删除文件库档案的信息，请参阅[在 Amazon S3 Glacier 中自动删除文件库档案](https://aws.amazon.com/solutions/guidance/automated-deletion-of-vault-archives-in-amazon-s3-glacier/)。

# 使用适用于 Java 的 AWS SDK 在 Amazon Glacier 中删除档案
<a name="deleting-an-archive-using-java"></a>

以下是使用适用于 Java 的 AWS SDK 低级 API 删除档案的步骤。

 

1. 创建 `AmazonGlacierClient` 类（客户端）的实例。

   您需要指定存储您要删除的档案的 AWS 区域。您使用此客户端执行的所有操作都会应用到该 AWS 区域。

1. 通过创建一个 `DeleteArchiveRequest` 类的实例提供请求信息。

   您需要提供档案 ID、文件库名称和您的账户 ID。如果您不提供账户 ID，则系统会使用与您提供来对请求签名的证书相关联的账户 ID。有关更多信息，请参阅[适用于 Java 的 AWS SDK 与 Amazon Glacier 搭配使用](using-aws-sdk-for-java.md)。

1. 以参数形式提供请求对象，运行 `deleteArchive` 方法。

以下 Java 代码段说明了前面的步骤。

```
AmazonGlacierClient client;

DeleteArchiveRequest request = new DeleteArchiveRequest()
    .withVaultName("*** provide a vault name ***")
    .withArchiveId("*** provide an archive ID ***");

client.deleteArchive(request);
```

 

**注意**  
有关底层 REST API 的信息，请参阅[删除档案（DELETE archive）](api-archive-delete.md)。

## 示例：使用适用于 Java 的 AWS SDK 删除存档
<a name="deleting-an-archive-using-java-example"></a>

以下 Java 代码示例使用适用于 Java 的 AWS SDK 删除档案。有关如何运行以下示例的分步说明，请参阅[使用 Eclipse 运行 Amazon Glacier 的 Java 示例](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java)。您需要更新文件库名称和待删除档案 ID 旁显示的代码。

**Example**  

```
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 ArchiveDelete {

    public static String vaultName = "*** provide vault name ****";
    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-east-1.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="deleting-an-archive-using-dot-net"></a>

适用于.NET 的 Amazon SDK APIs 提供的[高级版本和低级](using-aws-sdk.md)版本都提供了一种删除档案的方法。

**Topics**
+ [使用的高级别 API 删除档案 适用于 .NET 的 AWS SDK](#delete-archive-using-dot-net-high-level)
+ [使用低级 API 删除档案 适用于 .NET 的 AWS SDK](#delete-archive-using-dot-net-low-level)

## 使用的高级别 API 删除档案 适用于 .NET 的 AWS SDK
<a name="delete-archive-using-dot-net-high-level"></a>

该高级 API 的 `ArchiveTransferManager` 类提供了您可以用来删除档案的 `DeleteArchive` 方法。

### 示例：使用的高级别 API 删除档案 适用于 .NET 的 AWS SDK
<a name="delete-archive-dot-net-high-level-example"></a>

以下 C\$1 代码示例使用的高级别 API 适用于 .NET 的 AWS SDK 来删除档案。有关如何运行此示例的 step-by-step说明，请参阅[运行代码示例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)。您需要更新待删除档案 ID 旁显示的代码。

**Example**  

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

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class ArchiveDeleteHighLevel
  {
    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);
        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();
    }
  }
}
```

## 使用低级 API 删除档案 适用于 .NET 的 AWS SDK
<a name="delete-archive-using-dot-net-low-level"></a>

以下是使用 适用于 .NET 的 AWS SDK删除档案的步骤。

 

1. 创建 `AmazonGlacierClient` 类（客户端）的实例。

   您需要指定存储要删除的档案的 AWS 区域。您使用此客户端执行的所有操作都适用于该 AWS 区域。

1. 通过创建一个 `DeleteArchiveRequest` 类的实例提供请求信息。

   您需要提供档案 ID、文件库名称和您的账户 ID。如果您不提供账户 ID，则系统会使用与您提供来对请求签名的证书相关联的账户 ID。有关更多信息，请参阅[AWS SDKs 与 Amazon Glacier 搭配使用](using-aws-sdk.md)。

1. 以参数形式提供请求对象，运行 `DeleteArchive` 方法。

### 示例：使用的低级 API 删除档案 适用于 .NET 的 AWS SDK
<a name="delete-archive-dot-net-low-level-example"></a>

以下 C\$1 示例说明了前面的步骤。该示例使用的低级 API 适用于 .NET 的 AWS SDK 来删除档案。

**注意**  
有关底层 REST API 的信息，请参阅[删除档案（DELETE archive）](api-archive-delete.md)。

 有关如何运行此示例的 step-by-step说明，请参阅[运行代码示例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)。您需要更新待删除档案 ID 旁显示的代码。

**Example**  

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

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

    public static void Main(string[] args)
    {
      AmazonGlacierClient client;
      try
      {
        using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2))
        {
          Console.WriteLine("Deleting the archive");
          DeleteAnArchive(client);
        }
        Console.WriteLine("Operations successful. 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 void DeleteAnArchive(AmazonGlacierClient client)
    {
      DeleteArchiveRequest request = new DeleteArchiveRequest()
      {
        VaultName = vaultName,
        ArchiveId = archiveId
      };
      DeleteArchiveResponse response = client.DeleteArchive(request);
    }
  }
}
```

# 使用 REST API 删除 Amazon Glacier 档案
<a name="deleting-an-archive-using-rest"></a>

您可以使用删除档案 API 来删除档案。
+ 有关删除档案 API 的更多信息，请参阅[删除档案（DELETE archive）](api-archive-delete.md)。
+ 有关使用 REST API 的信息，请参阅 [Amazon Glacier 的 API 参考](amazon-glacier-api.md)。

# 使用 Amazon Glacier 删除档案 AWS Command Line Interface
<a name="deleting-an-archive-using-cli"></a>

您可以使用 () 删除亚马逊 Glacier（亚马逊 Glacier AWS CLI）中的档案。 AWS Command Line Interface 

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

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-job.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-job.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. 使用 [https://docs.aws.amazon.com/cli/latest/reference/glacier/describe-job.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/describe-job.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 就会向指定的 SNS 主题发送消息。

1. 完成后，使用 [https://docs.aws.amazon.com/cli/latest/reference/glacier/get-job-output.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/get-job-output.html) 命令将检索任务下载到文件 `output.json`。

   ```
   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":
   ...
   ]}
   ```

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

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