

 **此頁面僅適用於使用 Vaults 和 2012 年原始 REST API 的 Amazon Glacier 服務的現有客戶。**

如果您要尋找封存儲存解決方案，建議您在 Amazon Glacier Instant Retrieval、S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 中使用 Amazon Glacier 儲存類別。 Amazon S3 若要進一步了解這些儲存選項，請參閱 [Amazon Glacier 儲存類別](https://aws.amazon.com/s3/storage-classes/glacier/)。

Amazon Glacier （原始獨立保存庫型服務） 不再接受新客戶。Amazon Glacier 是一項獨立服務，具有自己的 APIs，可將資料存放在保存庫中，並與 Amazon S3 和 Amazon S3 Glacier 儲存類別不同。您現有的資料將在 Amazon Glacier 中無限期保持安全且可存取。不需要遷移。對於低成本、長期的封存儲存， AWS 建議使用 [Amazon S3 Glacier 儲存類別](https://aws.amazon.com/s3/storage-classes/glacier/)，透過 S3 儲存貯體型 APIs、完整 AWS 區域 可用性、降低成本 AWS 和服務整合，提供卓越的客戶體驗。如果您想要增強功能，請考慮使用我們的解決方案指南，將資料從 Amazon S3 Glacier 保存庫傳輸至 Amazon S3 Glacier 儲存類別，以遷移至 Amazon S3 Glacier 儲存類別。 [AWS Amazon Glacier Amazon S3 ](https://aws.amazon.com/solutions/guidance/data-transfer-from-amazon-s3-glacier-vaults-to-amazon-s3/)

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon Glacier 中使用保存庫
<a name="working-with-vaults"></a>

文件庫是儲存封存的一種容器。建立保存庫時，您可以指定保存庫名稱，以及要在 AWS 區域 其中建立保存庫的 。如需 Amazon Glacier AWS 區域 支援的 清單，請參閱《 *AWS 一般參考*》中的 [Amazon Glacier 端點和配額](https://docs.aws.amazon.com/general/latest/gr/glacier-service.html)。

您可以在保存庫中存放無限數量的封存。

 

**重要**  
Amazon Glacier 會提供主控台。不過，任何封存操作，例如上傳、下載或刪除，都需要您使用 AWS Command Line Interface (AWS CLI) 或寫入程式碼。沒有主控台支援封存操作。例如，若要上傳資料，例如相片、影片和其他文件，您必須直接使用 REST API AWS CLI 或使用 AWS SDKs，使用 或寫入程式碼來提出請求。  
若要安裝 AWS CLI，請參閱 [AWS Command Line Interface](https://aws.amazon.com/cli/)。如需搭配 使用 Amazon Glacier 的詳細資訊 AWS CLI，請參閱 [AWS CLI Amazon Glacier 的參考](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)。

**Topics**
+ [

## Amazon Glacier 中的保存庫操作
](#vault-operations-quick-intro)
+ [

# 在 Amazon Glacier 中建立保存庫
](creating-vaults.md)
+ [

# 在 Amazon Glacier 中擷取保存庫中繼資料
](retrieving-vault-info.md)
+ [

# 在 Amazon Glacier 中下載保存庫庫存
](vault-inventory.md)
+ [

# 在 Amazon Glacier 中設定保存庫通知
](configuring-notifications.md)
+ [

# 在 Amazon Glacier 中刪除保存庫
](deleting-vaults.md)
+ [

# 標記您的 Amazon Glacier 保存庫
](tagging-vaults.md)
+ [

# Amazon Glacier 保存庫鎖定
](vault-lock.md)

## Amazon Glacier 中的保存庫操作
<a name="vault-operations-quick-intro"></a>

Amazon Glacier 支援各種保存庫操作。保存庫作業專用於特定 AWS 區域。換句話說，當您建立保存庫時，會在特定 AWS 區域中建立保存庫。當您列出保存庫時，Amazon Glacier 會從 AWS 區域 您在請求中指定的 傳回保存庫清單。

### 建立和刪除文件庫
<a name="vault-operations-create-delete-quick-intro"></a>

每個 AWS 帳戶 最多可建立 1，000 個保存庫 AWS 區域。如需 Amazon Glacier AWS 區域 支援的 清單，請參閱《 *AWS 一般參考*》中的 [Amazon Glacier 端點和配額](https://docs.aws.amazon.com/general/latest/gr/glacier-service.html)。

只有在保存庫中截至 Amazon Glacier 計算的最後一個庫存沒有封存，以及自上次庫存以來沒有寫入保存庫時，您才能刪除保存庫。

 

**注意**  
Amazon Glacier 會每 24 小時定期為每個保存庫準備好庫存。由於庫存可能不會反映最新資訊，Amazon Glacier 會檢查自上次保存庫庫存以來是否有任何寫入操作，以確保保存庫確實是空的。

如需詳細資訊，請參閱[在 Amazon Glacier 中建立保存庫](creating-vaults.md)及[在 Amazon Glacier 中刪除保存庫](deleting-vaults.md)。

### 擷取保存庫中繼資料
<a name="vault-operations-retrieving-info-quick-intro"></a>

您可以擷取保存庫資訊，例如保存庫建立日期、保存庫中的封存數和保存庫中所有封存的總大小。Amazon Glacier 為您提供 API 呼叫，以擷取 AWS 區域 您帳戶中特定保存庫或所有保存庫的資訊。如需詳細資訊，請參閱[在 Amazon Glacier 中擷取保存庫中繼資料](retrieving-vault-info.md)。

### 下載保存庫庫存
<a name="vault-operations-retrieving-inventory-quick-intro"></a>

保存庫庫存**是指保存庫中的封存清單。對於清單中的每個封存，庫存提供封存資訊，例如封存 ID、建立日期和大小。Amazon Glacier 每天更新一次保存庫庫存，從第一個封存上傳到保存庫的那一天開始。文件庫清查都必須存在，您才能夠下載。

下載文件庫清查是一種非同步操作。您必須先起始任務以下載庫存。收到任務請求後，Amazon Glacier 會準備您的庫存以供下載。工作完成後，您即可下載庫存資料。

若由於工作的非同步本質，您可以使用 Amazon Simple Notification Service (Amazon SNS) 通知，以在工作完成時通知您。您可以為每個個別工作請求指定一個 Amazon SNS 主題，或者將保存庫設定為在特定保存庫事件發生時傳送通知。

Amazon Glacier 會每 24 小時定期為每個保存庫準備好庫存。如果從上次清查以來，沒有新增或刪除文件庫的存檔，則清查日期不會更新。

當您啟動保存庫庫存的任務時，Amazon Glacier 會傳回其產生的最後一個庫存，這是point-in-time快照，而不是即時資料。您可能沒有發現為每個存檔上傳擷取文件庫清查的好處。不過，假設您在用戶端維護資料庫，其中包含與您上傳至 Amazon Glacier 的封存相關聯的中繼資料。然後，您可能會發現保存庫庫存的好處，可以在資料庫中使用實際的保存庫庫存來調節資訊。

如需有關擷取庫存的詳細資訊，請參閱[在 Amazon Glacier 中下載保存庫庫存](vault-inventory.md)。

### 設定保存庫通知
<a name="vault-operations-configure-notifications-quick-intro"></a>

從 Amazon Glacier 擷取任何內容，例如從保存庫或保存庫庫存封存，都是兩個步驟。請先啟動工作。工作完成後，即可下載輸出。若要了解任務何時完成，您可以使用 Amazon Glacier 通知。Amazon Glacier 會將通知訊息傳送至您提供的 Amazon Simple Notification Service (Amazon SNS) 主題。

您可以設定保存庫通知，以及識別保存庫事件和事件發生時要通知的 Amazon SNS 主題。每當保存庫事件發生時，Amazon Glacier 都會傳送通知至指定的 Amazon SNS 主題。如需詳細資訊，請參閱[在 Amazon Glacier 中設定保存庫通知](configuring-notifications.md)。

# 在 Amazon Glacier 中建立保存庫
<a name="creating-vaults"></a>

建立保存庫可將保存庫新增到您帳戶中的一組保存庫中。每個 AWS 區域最多可 AWS 帳戶 建立 1，000 個保存庫。如需 Amazon Glacier (Amazon Glacier) 支援 AWS 的區域清單，請參閱《 *AWS 一般參考*》中的[區域和端點](https://docs.aws.amazon.com/general/latest/gr/rande.html#glacier_region)。

建立保存庫時，必須提供保存庫名稱。以下是保存庫命名要求：

 
+  名稱長度可介於 1 到 255 個字元之間。
+ 有效字元為 a-z、A-Z、0-9、'\$1' (底線)、'-' (連字號) 和 '.' (句號)。

保存庫名稱在帳戶和建立保存庫的 AWS 區域中必須是唯一的。也就是說，帳戶可以在不同的 AWS 區域中建立同名的保存庫，但不能在相同的 AWS 區域中建立。

**Topics**
+ [

# 使用 在 Amazon Glacier 中建立保存庫 適用於 Java 的 AWS SDK
](creating-vaults-sdk-java.md)
+ [

# 使用 在 Amazon Glacier 中建立保存庫 適用於 .NET 的 AWS SDK
](creating-vaults-dotnet-sdk.md)
+ [

# 使用 REST API 在 Amazon Glacier 中建立保存庫
](creating-vaults-rest-api.md)
+ [

# 使用 Amazon Glacier 主控台建立保存庫
](creating-vaults-console.md)
+ [

# 使用 在 Amazon Glacier 中建立保存庫 AWS Command Line Interface
](creating-vaults-cli.md)

# 使用 在 Amazon Glacier 中建立保存庫 適用於 Java 的 AWS SDK
<a name="creating-vaults-sdk-java"></a>

低階 API 提供所有保存庫操作的方法，包括建立和刪除保存庫、取得保存庫描述，以及取得在特定 中建立的保存庫清單 AWS 區域。以下是使用 適用於 Java 的 AWS SDK建立保存庫的步驟。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

   您需要指定要在 AWS 區域 其中建立保存庫的 。所有您使用此用戶端執行的作業均會套用到該 AWS 區域。

1. 您可以透過建立 `CreateVaultRequest` 類別的執行個體來提供請求資訊。

   Amazon Glacier (Amazon Glacier) 要求您提供保存庫名稱和帳戶 ID。如果您不提供帳戶 ID，則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需詳細資訊，請參閱[適用於 Java 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-java.md)。

1. 以參數形式提供請求物件，以便執行 `createVault` 方法。

   Amazon Glacier 傳回的回應可在 `CreateVaultResult` 物件中使用。

下列 Java 程式碼片段描述前述步驟。該程式碼片段會在 `us-west-2` 區域中建立文件庫。`Location` 列印的 是保存庫的相對 URI，其中包含您的帳戶 ID AWS 區域、 和保存庫名稱。

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

CreateVaultRequest request = new CreateVaultRequest()
    .withVaultName("*** provide vault name ***");
CreateVaultResult result = client.createVault(request);

System.out.println("Created vault successfully: " + result.getLocation());
```

**注意**  
如需基礎 REST API 的資訊，請參閱 [建立保存庫 (PUT 保存庫)](api-vault-put.md)。

## 範例：使用 建立保存庫 適用於 Java 的 AWS SDK
<a name="creating-vaults-sdk-java-example"></a>

下列 Java 程式碼範例會在 `us-west-2`區域中建立保存庫 （如需詳細資訊 AWS 區域，請參閱 [存取 Amazon Glacier](amazon-glacier-accessing.md))。此外，程式碼範例會擷取保存庫資訊、列出相同 中的所有保存庫 AWS 區域，然後刪除建立的保存庫。

如需如何執行下列範例的逐步說明，請參閱 [使用 Eclipse 執行 Amazon Glacier 的 Java 範例](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java)。

**Example**  

```
import java.io.IOException;
import java.util.List;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.model.CreateVaultRequest;
import com.amazonaws.services.glacier.model.CreateVaultResult;
import com.amazonaws.services.glacier.model.DeleteVaultRequest;
import com.amazonaws.services.glacier.model.DescribeVaultOutput;
import com.amazonaws.services.glacier.model.DescribeVaultRequest;
import com.amazonaws.services.glacier.model.DescribeVaultResult;
import com.amazonaws.services.glacier.model.ListVaultsRequest;
import com.amazonaws.services.glacier.model.ListVaultsResult;


public class AmazonGlacierVaultOperations {

    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/");
        
        String vaultName = "examplevaultfordelete";

        try {            
            createVault(client, vaultName);
            describeVault(client, vaultName); 
            listVaults(client);
            deleteVault(client, vaultName);      

        } catch (Exception e) {
            System.err.println("Vault operation failed." + e.getMessage());
        }
    }

    private static void createVault(AmazonGlacierClient client, String vaultName) {
        CreateVaultRequest createVaultRequest = new CreateVaultRequest()
            .withVaultName(vaultName);
        CreateVaultResult createVaultResult = client.createVault(createVaultRequest);

        System.out.println("Created vault successfully: " + createVaultResult.getLocation());
    }

    private static void describeVault(AmazonGlacierClient client, String vaultName) {
        DescribeVaultRequest describeVaultRequest = new DescribeVaultRequest()
            .withVaultName(vaultName);
        DescribeVaultResult describeVaultResult  = client.describeVault(describeVaultRequest);

        System.out.println("Describing the vault: " + vaultName);
        System.out.print(
                "CreationDate: " + describeVaultResult.getCreationDate() +
                "\nLastInventoryDate: " + describeVaultResult.getLastInventoryDate() +
                "\nNumberOfArchives: " + describeVaultResult.getNumberOfArchives() + 
                "\nSizeInBytes: " + describeVaultResult.getSizeInBytes() + 
                "\nVaultARN: " + describeVaultResult.getVaultARN() + 
                "\nVaultName: " + describeVaultResult.getVaultName());
    }

    private static void listVaults(AmazonGlacierClient client) {
        ListVaultsRequest listVaultsRequest = new ListVaultsRequest();
        ListVaultsResult listVaultsResult = client.listVaults(listVaultsRequest);

        List<DescribeVaultOutput> vaultList = listVaultsResult.getVaultList();
        System.out.println("\nDescribing all vaults (vault list):");
        for (DescribeVaultOutput vault : vaultList) {
            System.out.println(
                    "\nCreationDate: " + vault.getCreationDate() +
                    "\nLastInventoryDate: " + vault.getLastInventoryDate() +
                    "\nNumberOfArchives: " + vault.getNumberOfArchives() + 
                    "\nSizeInBytes: " + vault.getSizeInBytes() + 
                    "\nVaultARN: " + vault.getVaultARN() + 
                    "\nVaultName: " + vault.getVaultName()); 
        }
    }

    private static void deleteVault(AmazonGlacierClient client, String vaultName) {
        DeleteVaultRequest request = new DeleteVaultRequest()
            .withVaultName(vaultName);
        client.deleteVault(request);
        System.out.println("Deleted vault: " + vaultName);
    }

}
```

# 使用 在 Amazon Glacier 中建立保存庫 適用於 .NET 的 AWS SDK
<a name="creating-vaults-dotnet-sdk"></a>

適用於 .NET 的 Amazon 開發套件提供的[高階和低階 API](using-aws-sdk.md) 都提供了保存庫的建立方法。

**Topics**
+ [

## 使用 的高階 API 建立保存庫 適用於 .NET 的 AWS SDK
](#create-vault-dotnet-highlevel)
+ [

## 使用 的低階 API 建立保存庫 適用於 .NET 的 AWS SDK
](#create-vault-dotnet-lowlevel)

## 使用 的高階 API 建立保存庫 適用於 .NET 的 AWS SDK
<a name="create-vault-dotnet-highlevel"></a>

高階 API 的 `ArchiveTransferManager` 類別提供可用於在 AWS 區域中建立保存庫的 `CreateVault` 方法。

### 範例：使用 的高階 API 進行保存庫操作 適用於 .NET 的 AWS SDK
<a name="vault-operations-example-dotnet-highlevel"></a>

以下 C\$1 程式碼範例建立和刪除美國西部 (奧勒岡) 區域中的保存庫。如需您可以在 AWS 區域 其中建立保存庫的清單，請參閱 [存取 Amazon Glacier](amazon-glacier-accessing.md)。

如需如何執行下列範例的逐步說明，請參閱 [執行程式碼範例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)。您需要更新所示具有保管庫名稱的程式碼。

**Example**  

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

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class VaultCreateDescribeListVaultsDeleteHighLevel
  {
    static string vaultName = "*** Provide vault name ***";

    public static void Main(string[] args)
    {
      try
      {
          var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);
          manager.CreateVault(vaultName);
          Console.WriteLine("Vault created. To delete the vault, press Enter");
          Console.ReadKey();
          manager.DeleteVault(vaultName);
          Console.WriteLine("\nVault deleted. 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();
    }
  }
}
```

## 使用 的低階 API 建立保存庫 適用於 .NET 的 AWS SDK
<a name="create-vault-dotnet-lowlevel"></a>

低階 API 為所有保存庫操作提供方法，包括建立和刪除保存庫、取得保存庫描述，以及取得在特定 中建立的保存庫清單 AWS 區域。以下是使用 適用於 .NET 的 AWS SDK建立保存庫的步驟。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

   您需要指定要在 AWS 區域 其中建立保存庫的 。所有您使用此用戶端執行的作業均會套用到該 AWS 區域。

1. 您可以透過建立 `CreateVaultRequest` 類別的執行個體來提供請求資訊。

    Amazon Glacier (Amazon Glacier) 要求您提供保存庫名稱和帳戶 ID。如果您不提供帳戶 ID，則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需詳細資訊，請參閱[適用於 .NET 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-dot-net.md)。

1. 以參數形式提供請求物件，以便執行 `CreateVault` 方法。

   Amazon Glacier 傳回的回應可在 `CreateVaultResponse` 物件中使用。

### 範例：使用 的低階 API 的保存庫操作 適用於 .NET 的 AWS SDK
<a name="vault-operations-example-dotnet-lowlevel"></a>

下列 C\$1 範例描述前述步驟。此範例在美國西部 (奧勒岡) 區域建立保存庫。此外，程式碼範例會擷取保存庫資訊，列出相同 中的所有保存庫 AWS 區域，然後刪除建立的保存庫。`Location` 列印的 是保存庫的相對 URI，其中包含您的帳戶 ID AWS 區域、 和保存庫名稱。

**注意**  
如需基礎 REST API 的資訊，請參閱 [建立保存庫 (PUT 保存庫)](api-vault-put.md)。

如需如何執行下列範例的逐步說明，請參閱 [執行程式碼範例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)。您需要更新所示具有保管庫名稱的程式碼。

**Example**  

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

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class VaultCreateDescribeListVaultsDelete
  {
    static string vaultName = "*** Provide vault name ***";
    static AmazonGlacierClient client;

    public static void Main(string[] args)
    {
       try
      {
         using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2))
        {
          Console.WriteLine("Creating a vault.");
          CreateAVault();
          DescribeVault();
          GetVaultsList();
          Console.WriteLine("\nVault created. Now press Enter to delete the vault...");
          Console.ReadKey();
          DeleteVault();
        }
      }
      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 CreateAVault()
    {
      CreateVaultRequest request = new CreateVaultRequest()
      {
        VaultName = vaultName
      };
      CreateVaultResponse response = client.CreateVault(request);
      Console.WriteLine("Vault created: {0}\n", response.Location); 
    }

    static void DescribeVault()
    {
      DescribeVaultRequest describeVaultRequest = new DescribeVaultRequest()
      {
        VaultName = vaultName
      };
   
      DescribeVaultResponse describeVaultResponse = client.DescribeVault(describeVaultRequest);
      Console.WriteLine("\nVault description...");
      Console.WriteLine(
        "\nVaultName: " + describeVaultResponse.VaultName +
        "\nVaultARN: " + describeVaultResponse.VaultARN +
        "\nVaultCreationDate: " + describeVaultResponse.CreationDate +
        "\nNumberOfArchives: " + describeVaultResponse.NumberOfArchives +
        "\nSizeInBytes: " + describeVaultResponse.SizeInBytes +
        "\nLastInventoryDate: " + describeVaultResponse.LastInventoryDate 
        );
    }

    static void GetVaultsList()
    {
      string lastMarker = null;
      Console.WriteLine("\n List of vaults in your account in the specific region ...");
      do
      {
        ListVaultsRequest request = new ListVaultsRequest()
        {
          Marker = lastMarker
        };
        ListVaultsResponse response = client.ListVaults(request);
         
        foreach (DescribeVaultOutput output in response.VaultList)
        {
          Console.WriteLine("Vault Name: {0} \tCreation Date: {1} \t #of archives: {2}",
                            output.VaultName, output.CreationDate, output.NumberOfArchives); 
        }
        lastMarker = response.Marker;
      } while (lastMarker != null);
    }

    static void DeleteVault()
    {
      DeleteVaultRequest request = new DeleteVaultRequest()
      {
        VaultName = vaultName
      };
      DeleteVaultResponse response = client.DeleteVault(request);
    }
  }
}
```

# 使用 REST API 在 Amazon Glacier 中建立保存庫
<a name="creating-vaults-rest-api"></a>

若要使用 REST API 建立保存庫，請參閱 [建立保存庫 (PUT 保存庫)](api-vault-put.md)。

# 使用 Amazon Glacier 主控台建立保存庫
<a name="creating-vaults-console"></a>

若要使用 Amazon Glacier (Amazon Glacier) 主控台建立保存庫，請參閱*入門*教學[步驟 2：在 Amazon Glacier 中建立保存庫](getting-started-create-vault.md)中的 。

# 使用 在 Amazon Glacier 中建立保存庫 AWS Command Line Interface
<a name="creating-vaults-cli"></a>

請依照下列步驟，使用 () 在 AWS Command Line Interface Amazon Glacier (Amazon Glacier) 中建立保存庫AWS CLI。

**Topics**
+ [

## （先決條件） 設定 AWS CLI
](#Creating-Vaults-CLI-Setup)
+ [

## 範例：使用 建立保存庫 AWS CLI
](#Creating-Vaults-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 設定。這些命令不會明確提供登入資料，因此會使用預設描述檔的登入資料。
   + 嘗試使用幫助命令。

     ```
     aws help
     ```
   + 若要取得已設定帳戶上的 Amazon Glacier 保存庫清單，請使用 `list-vaults`命令。將 *123456789012* 取代為您的 AWS 帳戶 ID。

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 若要查看 目前的組態資料 AWS CLI，請使用 `aws configure list`命令。

     ```
     aws configure list
     ```

## 範例：使用 建立保存庫 AWS CLI
<a name="Creating-Vaults-CLI-Implementation"></a>

1. 使用 `create-vault` 命令，在帳戶 *111122223333* 下建立一個名為 *awsexamplevault* 的保管庫。

   ```
   aws glacier create-vault --vault-name awsexamplevault --account-id 111122223333
   ```

   預期的輸出結果：

   ```
   {
       "location": "/111122223333/vaults/awsexamplevault"
   }
   ```

1. 使用 `describe-vault` 指令驗證建立。

   ```
   aws glacier describe-vault --vault-name awsexamplevault --account-id 111122223333
   ```

# 在 Amazon Glacier 中擷取保存庫中繼資料
<a name="retrieving-vault-info"></a>

您可以擷取保存庫資訊，例如保存庫建立日期、保存庫中的封存數和保存庫中所有封存的總大小。Amazon Glacier (Amazon Glacier) 為您提供 API 呼叫，以擷取您帳戶中特定 AWS 區域中特定保存庫或所有保存庫的資訊。

如果您擷取保存庫清單，Amazon Glacier 會傳回依保存庫名稱的 ASCII 值排序的清單。該清單最多可包含 1,000 個保存庫。您應該一直檢查標記的回應以在此繼續列表；如果沒有更多項目，標記欄位為 `null`。您可以選擇限制 回應中傳回的保存庫數量。如果回應中的保存庫比所傳回的更多，則會對結果進行分頁。您需要傳送其他請求，以擷取下一組保存庫。

**Topics**
+ [

# 使用 在 Amazon Glacier 中擷取保存庫中繼資料 適用於 Java 的 AWS SDK
](retrieving-vault-info-sdk-java.md)
+ [

# 使用 在 Amazon Glacier 中擷取保存庫中繼資料 適用於 .NET 的 AWS SDK
](retrieving-vault-info-sdk-dotnet.md)
+ [

# 使用 REST API 擷取保存庫中繼資料
](listing-vaults-rest-api.md)
+ [

# 使用 在 Amazon Glacier 中擷取保存庫中繼資料 AWS Command Line Interface
](retrieving-vault-info-cli.md)

# 使用 在 Amazon Glacier 中擷取保存庫中繼資料 適用於 Java 的 AWS SDK
<a name="retrieving-vault-info-sdk-java"></a>

**Topics**
+ [

## 擷取保存庫的保存庫中繼資料
](#retrieve-vault-info-sdk-java-lowlevel-one-vault)
+ [

## 擷取區域中所有保存庫的保存庫中繼資料
](#retrieve-vault-info-sdk-java-lowlevel-all-vaults)
+ [

## 範例：使用適用於 Java 的 Amazon 開發套件擷取保存庫中繼資料
](#retrieving-vault-info-sdk-java-example)

## 擷取保存庫的保存庫中繼資料
<a name="retrieve-vault-info-sdk-java-lowlevel-one-vault"></a>

您可以擷取特定保存庫或特定 AWS 區域中所有保存庫的中繼資料。以下的步驟說明如何使用適用於 Java 的 Amazon 開發套件的低階 API，為特定保存庫擷取保存庫中繼資料。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

   您需要指定保存庫所在的 AWS 區域。您使用此用戶端執行的所有操作都會套用到該 AWS 區域。

1. 您可以透過建立 `DescribeVaultRequest` 類別的執行個體來提供請求資訊。

   Amazon Glacier (Amazon Glacier) 要求您提供保存庫名稱和帳戶 ID。如果您不提供帳戶 ID，則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需詳細資訊，請參閱[適用於 Java 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-java.md)。

1. 以參數形式提供請求物件，以便執行 `describeVault` 方法。

   Amazon Glacier 傳回的保存庫中繼資料資訊可在 `DescribeVaultResult` 物件中使用。

下列 Java 程式碼片段描述前述步驟。

```
DescribeVaultRequest request = new DescribeVaultRequest()
	.withVaultName("*** provide vault name***");

DescribeVaultResult result = client.describeVault(request);

System.out.print(
        "\nCreationDate: " + result.getCreationDate() +
        "\nLastInventoryDate: " + result.getLastInventoryDate() +
        "\nNumberOfArchives: " + result.getNumberOfArchives() + 
        "\nSizeInBytes: " + result.getSizeInBytes() + 
        "\nVaultARN: " + result.getVaultARN() + 
        "\nVaultName: " + result.getVaultName());
```

 

**注意**  
如需基礎 REST API 的資訊，請參閱 [描述保存庫 (GET 保存庫)](api-vault-get.md)。

## 擷取區域中所有保存庫的保存庫中繼資料
<a name="retrieve-vault-info-sdk-java-lowlevel-all-vaults"></a>

您也可以使用 `listVaults`方法來擷取特定 AWS 區域中所有保存庫的中繼資料。

以下 Java 程式碼片段擷取 `us-west-2` 區域中的文件庫清單。請求會限制回應中傳回的保存庫數量為 5 個。程式碼片段接著會進行一系列`listVaults`呼叫，從 AWS 區域擷取整個保存庫清單。

 

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

String marker = null;
do {            
    ListVaultsRequest request = new ListVaultsRequest()
        .withLimit("5")
        .withMarker(marker);
    ListVaultsResult listVaultsResult = client.listVaults(request);
    
    List<DescribeVaultOutput> vaultList = listVaultsResult.getVaultList();
    marker = listVaultsResult.getMarker();
    for (DescribeVaultOutput vault : vaultList) {
        System.out.println(
                "\nCreationDate: " + vault.getCreationDate() +
                "\nLastInventoryDate: " + vault.getLastInventoryDate() +
                "\nNumberOfArchives: " + vault.getNumberOfArchives() + 
                "\nSizeInBytes: " + vault.getSizeInBytes() + 
                "\nVaultARN: " + vault.getVaultARN() + 
                "\nVaultName: " + vault.getVaultName()); 
    }
} while (marker != null);
```

在上述程式碼區段中，如果您未在請求中指定 `Limit`值，Amazon Glacier 會傳回最多 10 個保存庫，如 Amazon Glacier API 所設定。如果要列出更多的文件庫，則回應 `marker` 欄位包含文件庫 Amazon Resource Name (ARN)，以便以新的請求繼續列出，否則 `marker` 欄位為 null。

請注意，清單中為每個保存庫傳回的資訊與透過呼叫特定保存庫的 `describeVault` 方法所獲得的資訊相同。

 

**注意**  
`listVaults` 方法呼叫底層 REST API (請參閱 [「列出保存庫」(GET 保存庫)](api-vaults-get.md))。

## 範例：使用適用於 Java 的 Amazon 開發套件擷取保存庫中繼資料
<a name="retrieving-vault-info-sdk-java-example"></a>

如需運作中程式碼範例，請參閱「[範例：使用 建立保存庫 適用於 Java 的 AWS SDK](creating-vaults-sdk-java.md#creating-vaults-sdk-java-example)」。Java 程式碼範例建立文件庫和擷取文件庫中繼資料。

# 使用 在 Amazon Glacier 中擷取保存庫中繼資料 適用於 .NET 的 AWS SDK
<a name="retrieving-vault-info-sdk-dotnet"></a>

**Topics**
+ [

## 擷取保存庫的保存庫中繼資料
](#retrieve-vault-info-sdk-dotnet-lowlevel-one-vault)
+ [

## 擷取區域中所有保存庫的保存庫中繼資料
](#retrieve-vault-info-sdk-dotnet-lowlevel-all-vaults)
+ [

## 範例：使用 的低階 API 擷取保存庫中繼資料 適用於 .NET 的 AWS SDK
](#creating-vaults-sdk-dotnet-example)

## 擷取保存庫的保存庫中繼資料
<a name="retrieve-vault-info-sdk-dotnet-lowlevel-one-vault"></a>

您可以擷取特定保存庫或特定 AWS 區域中所有保存庫的中繼資料。以下是使用 適用於 .NET 的 AWS SDK的低階 API 為特定保存庫擷取保存庫中繼資料的步驟。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

   您需要指定保存庫所在的 AWS 區域。您使用此用戶端執行的所有操作都會套用到該 AWS 區域。

1. 您可以透過建立 `DescribeVaultRequest` 類別的執行個體來提供請求資訊。

   Amazon Glacier (Amazon Glacier) 要求您提供保存庫名稱和帳戶 ID。如果您不提供帳戶 ID，則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需詳細資訊，請參閱[適用於 .NET 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-dot-net.md)。

1. 以參數形式提供請求物件，以便執行 `DescribeVault` 方法。

   Amazon Glacier 傳回的保存庫中繼資料資訊可在 `DescribeVaultResult` 物件中使用。

下列 C\$1 程式碼片段描述前述步驟。程式碼片段擷取美國西部 (奧勒岡) 區域中現有保存庫的中繼資料資訊。

```
AmazonGlacierClient client;
client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2);

DescribeVaultRequest describeVaultRequest = new DescribeVaultRequest()
{
  VaultName = "*** Provide vault name ***"
};  
DescribeVaultResponse describeVaultResponse = client.DescribeVault(describeVaultRequest);
Console.WriteLine("\nVault description...");
Console.WriteLine(
   "\nVaultName: " + describeVaultResponse.VaultName +
   "\nVaultARN: " + describeVaultResponse.VaultARN +
   "\nVaultCreationDate: " + describeVaultResponse.CreationDate +
   "\nNumberOfArchives: " + describeVaultResponse.NumberOfArchives +
   "\nSizeInBytes: " + describeVaultResponse.SizeInBytes +
   "\nLastInventoryDate: " + describeVaultResponse.LastInventoryDate 
   );
```

 

**注意**  
如需基礎 REST API 的資訊，請參閱 [描述保存庫 (GET 保存庫)](api-vault-get.md)。

## 擷取區域中所有保存庫的保存庫中繼資料
<a name="retrieve-vault-info-sdk-dotnet-lowlevel-all-vaults"></a>

您也可以使用 `ListVaults`方法來擷取特定 AWS 區域中所有保存庫的中繼資料。

以下 C\$1 程式碼片段擷取美國西部 (奧勒岡) 區域中的保存庫清單。請求會限制回應中傳回的保存庫數量為 5 個。程式碼片段接著會進行一系列`ListVaults`呼叫，從 AWS 區域擷取整個保存庫清單。

 

```
AmazonGlacierClient client;
client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2);
string lastMarker = null;
Console.WriteLine("\n List of vaults in your account in the specific AWS Region ...");
do
{
  ListVaultsRequest request = new ListVaultsRequest()
  {
    Limit = 5,
    Marker = lastMarker
  };
  ListVaultsResponse response = client.ListVaults(request);
   
  foreach (DescribeVaultOutput output in response.VaultList)
  {
    Console.WriteLine("Vault Name: {0} \tCreation Date: {1} \t #of archives: {2}",
                      output.VaultName, output.CreationDate, output.NumberOfArchives); 
  }
  lastMarker = response.Marker;
} while (lastMarker != null);
```

在上述程式碼區段中，如果您未在請求中指定 `Limit`值，Amazon Glacier 會傳回最多 10 個保存庫，如 Amazon Glacier API 所設定。

請注意，清單中為每個保存庫傳回的資訊與透過呼叫特定保存庫的 `DescribeVault` 方法所獲得的資訊相同。

 

**注意**  
`ListVaults` 方法呼叫底層 REST API (請參閱 [「列出保存庫」(GET 保存庫)](api-vaults-get.md))。

## 範例：使用 的低階 API 擷取保存庫中繼資料 適用於 .NET 的 AWS SDK
<a name="creating-vaults-sdk-dotnet-example"></a>

如需運作中程式碼範例，請參閱「[範例：使用 的低階 API 的保存庫操作 適用於 .NET 的 AWS SDK](creating-vaults-dotnet-sdk.md#vault-operations-example-dotnet-lowlevel)」。C\$1 程式碼範例建立保存庫和擷取保存庫中繼資料。

# 使用 REST API 擷取保存庫中繼資料
<a name="listing-vaults-rest-api"></a>

若要使用 REST API 列出保存庫的更多資訊，請參閱 [「列出保存庫」(GET 保存庫)](api-vaults-get.md)。若要描述一個保存庫的詳細資訊，請參閱 [描述保存庫 (GET 保存庫)](api-vault-get.md)。

# 使用 在 Amazon Glacier 中擷取保存庫中繼資料 AWS Command Line Interface
<a name="retrieving-vault-info-cli"></a>

此範例說明如何使用 AWS Command Line Interface () 擷取 Amazon Glacier (Amazon Glacier) 中的保存庫資訊和中繼資料AWS CLI。

**Topics**
+ [

## （先決條件） 設定 AWS CLI
](#Creating-Vaults-CLI-Setup)
+ [

## 範例：使用 擷取保存庫中繼資料 AWS CLI
](#Retrieving-Vault-Metadata-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 設定。這些命令不會明確提供登入資料，因此會使用預設描述檔的登入資料。
   + 嘗試使用幫助命令。

     ```
     aws help
     ```
   + 若要取得已設定帳戶上的 Amazon Glacier 保存庫清單，請使用 `list-vaults`命令。將 *123456789012* 取代為您的 AWS 帳戶 ID。

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 若要查看 目前的組態資料 AWS CLI，請使用 `aws configure list`命令。

     ```
     aws configure list
     ```

## 範例：使用 擷取保存庫中繼資料 AWS CLI
<a name="Retrieving-Vault-Metadata-CLI-Implementation"></a>
+ 使用 `describe-vault` 命令，在帳戶 *111122223333* 下描述一個名為 *awsexamplevault* 的保存庫。

  ```
  aws glacier describe-vault --vault-name awsexamplevault --account-id 111122223333
  ```

# 在 Amazon Glacier 中下載保存庫庫存
<a name="vault-inventory"></a>

將第一個封存上傳至保存庫後，Amazon Glacier (Amazon Glacier) 會自動建立保存庫庫存，然後大約每天更新一次。Amazon Glacier 建立第一個庫存後，通常需要半天到一天的時間才能擷取該庫存。您可以使用下列兩個步驟從 Amazon Glacier 擷取保存庫庫存：

 

1. 使用 [啟動任務 (POST 任務)](api-initiate-job-post.md) 操作啟動庫存擷取任務。
**重要**  
資料擷取政策可能導致啟動擷取作業請求失敗，並出現 `PolicyEnforcedException` 例外狀況。如需有關資料擷取政策的詳細資訊，請參閱 [Amazon Glacier 資料擷取政策](data-retrieval-policy.md)。如需 `PolicyEnforcedException` 例外狀況的詳細資訊，請參閱 [錯誤回應](api-error-responses.md)。

1. 任務完成後，使用 [「取得任務輸出」 (GET 輸出)](api-job-output-get.md) 操作下載位元組。

例如，擷取存檔或文件庫清查要求您先啟動擷取作業。以非同步方式執行工作請求。當您起始檢索任務時，Amazon Glacier 會建立任務，並在回應中傳回任務 ID。當 Amazon Glacier 完成工作時，您可以取得工作輸出、封存位元組或保存庫庫存資料。

必須完成任務，才能取得其輸出。若要判斷任務的狀態，您有下列選項：

 
+ **等待任務完成通知**—您可以指定 Amazon Simple Notification Service (Amazon SNS) 主題，Amazon Glacier 可以在任務完成後發佈通知。您可以使用以下方法指定此 Amazon SNS 主題：
  + 為每個工作指定 Amazon SNS 主題。

    啟動工作時，需選擇指定 Amazon SNS 主題。
  + 在文件庫上設定通知組態。

    您可以為保存庫中的特定事件設定通知設定 (請參閱 [在 Amazon Glacier 中設定保存庫通知](configuring-notifications.md))。只要發生特定事件，Amazon Glacier 就會傳送訊息至指定的 SNS 主題。

  如果您在保存庫上設定了通知組態，且在啟動任務時也指定了 Amazon SNS 主題，Amazon Glacier 會將任務完成訊息傳送至這兩個主題。

  您可以將 SNS 主題設定為透過電子郵件通知您，或者將訊息儲存在應用程式可以輪詢的 Amazon Simple Queue Service (Amazon SQS) 中。當訊息出現在佇列中時，您可以檢查任務是否順利完成，然後下載任務的輸出。
+ **明確請求任務資訊**—Amazon Glacier 也提供描述任務操作 ([描述任務 (GET JobID)](api-describe-job-get.md))，可讓您輪詢任務資訊。您可以定期發送此請求以獲取任務資訊。但是，使用 Amazon SNS 通知是建議的選項。

 

**注意**  
您透過 SNS 通知取得的資訊，與您呼叫描述任務所取得的資訊相同。

**Topics**
+ [

## 關於庫存
](#vault-inventory-about)
+ [

# 使用 在 Amazon Glacier 中下載保存庫庫存 適用於 Java 的 AWS SDK
](retrieving-vault-inventory-java.md)
+ [

# 使用 在 Amazon Glacier 中下載保存庫庫存 適用於 .NET 的 AWS SDK
](retrieving-vault-inventory-sdk-dotnet.md)
+ [

# 使用 REST API下載文件庫清查
](retrieving-vault-inventory-rest-api.md)
+ [

# 使用 在 Amazon Glacier 中下載保存庫庫存 AWS Command Line Interface
](retrieving-vault-inventory-cli.md)

## 關於庫存
<a name="vault-inventory-about"></a>

Amazon Glacier 每天至少更新一次保存庫庫存，從您第一次將封存上傳至保存庫的那一天開始。如果從上次清查以來，沒有新增或刪除文件庫的存檔，則清查日期不會更新。當您啟動保存庫庫存的任務時，Amazon Glacier 會傳回其產生的最後一個庫存，這是point-in-time快照，而不是即時資料。請注意，Amazon Glacier 為保存庫建立第一個庫存後，通常需要半天到最多一天的時間，才能擷取該庫存。

 您可能沒有發現為每個存檔上傳擷取文件庫清查的好處。不過，假設您在用戶端維護資料庫，關聯您上傳至 Amazon Glacier 之封存的相關中繼資料。然後，您可能會發現文件庫清查的好處，可以視需要在資料庫中使用實際的文件庫清查來調節資訊。您可以透過篩選存檔建立日期或設定配額來限制擷取到的清查項目數量。如需有關限制庫存擷取的詳細資訊，請參閱 [庫存擷取範圍](api-initiate-job-post.md#api-initiate-job-post-vault-inventory-list-filtering)。

您可以以逗號分隔值 (CSV) 或 JSON 兩種格式傳回庫存。您可以選擇指定啟動庫存任務時的格式。預設格式是 JSON。如需有關庫存任務輸出中傳回的資料欄位的詳細資訊，請參閱[回應內文](api-job-output-get.md#api-job-output-get-responses-elements)取得任務輸出 API* 的 *。

# 使用 在 Amazon Glacier 中下載保存庫庫存 適用於 Java 的 AWS SDK
<a name="retrieving-vault-inventory-java"></a>

以下是使用 適用於 Java 的 AWS SDK低階 API 來擷取保存庫庫存的步驟。高階的 API 不支援擷取保存庫庫存。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

    您需要指定保存庫所在的 AWS 區域。您使用此用戶端執行的所有操作都會套用到該 AWS 區域。

1.  透過執行 `initiateJob` 方法來起始庫存擷取任務。

   透過提供 `initiateJob` 物件中的工作資訊來執行 `InitiateJobRequest`。
**注意**  
請注意，如果保存庫庫存尚未完成，便會傳回錯誤。Amazon Glacier (Amazon Glacier) 每 24 小時定期為每個保存庫準備清查。

   Amazon Glacier 傳回任務 ID 以回應。該回應在 `InitiateJobResult` 類別的執行個體中可用。

    

   ```
   InitiateJobRequest initJobRequest = new InitiateJobRequest()
       .withVaultName("*** provide vault name ***")
       .withJobParameters(
               new JobParameters()
                   .withType("inventory-retrieval")
                   .withSNSTopic("*** provide SNS topic ARN ****")
         );
   
   InitiateJobResult initJobResult = client.initiateJob(initJobRequest);
   String jobId = initJobResult.getJobId();
   ```

1. 等候 工作完成。

   您必須等到任務輸出準備好供您下載。如果您已在保存庫上設定通知組態，或在啟動任務時指定 Amazon Simple Notification Service (Amazon SNS) 主題，Amazon Glacier 會在完成任務後傳送訊息至主題。

   您也可以呼叫 `describeJob`方法來輪詢 Amazon Glacier，以判斷任務完成狀態。不過，使用 Amazon SNS 主題進行通知是建議的方法。下一節中提供的程式碼範例使用 Amazon SNS for Amazon Glacier 來發佈訊息。

    

1. 透過執行 `getJobOutput` 方法下載工作輸出 (保存庫庫存資料)。

   您透過建立 `GetJobOutputRequest` 類別的執行個體來提供帳戶 ID、任務 ID 和文件庫名稱。如果您不提供帳戶 ID，則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需詳細資訊，請參閱[適用於 Java 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-java.md)。

   Amazon Glacier 傳回的輸出可在 `GetJobOutputResult` 物件中使用。

    

   ```
   GetJobOutputRequest jobOutputRequest = new GetJobOutputRequest()
           .withVaultName("*** provide vault name ***")
           .withJobId("*** provide job ID ***");
   GetJobOutputResult jobOutputResult = client.getJobOutput(jobOutputRequest);
   // jobOutputResult.getBody(); provides the output stream.
   ```

 

**注意**  
如需與任務相關的底層 REST API 的資訊，請參閱 [任務操作](job-operations.md)。

## 範例：使用適用於 Java 的 Amazon 開發套件擷取保存庫庫存
<a name="retrieving-vault-inventory-java-example"></a>

以下 Java 程式碼範例將擷取指定文件庫的文件庫清查。

範例會執行下列任務：
+ 建立 Amazon Simple Notification Service (Amazon SNS) 主題。

  Amazon Glacier 會在完成任務後傳送通知至此主題。
+ 建立 Amazon Simple Queue Service (Amazon SQS) 佇列。

  此範例將政策連接至佇列，以使 Amazon SNS 主題能夠發佈訊息到佇列。
+ 起始任務以下載指定的封存。

  在任務請求中，指定已建立的 Amazon SNS 主題，以便 Amazon Glacier 在完成任務後可以將通知發佈至主題。
+ 檢查 Amazon SQS 佇列中是否有包含工作 ID 的訊息。

  如果有訊息，剖析 JSON 並檢查任務是否順利完成。如果是，請下載封存。
+ 透過刪除 Amazon SNS 主題和其建立的 Amazon SQS 佇列來清除。

```
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.policy.Policy;
import com.amazonaws.auth.policy.Principal;
import com.amazonaws.auth.policy.Resource;
import com.amazonaws.auth.policy.Statement;
import com.amazonaws.auth.policy.Statement.Effect;
import com.amazonaws.auth.policy.actions.SQSActions;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.model.GetJobOutputRequest;
import com.amazonaws.services.glacier.model.GetJobOutputResult;
import com.amazonaws.services.glacier.model.InitiateJobRequest;
import com.amazonaws.services.glacier.model.InitiateJobResult;
import com.amazonaws.services.glacier.model.JobParameters;
import com.amazonaws.services.sns.AmazonSNSClient;
import com.amazonaws.services.sns.model.CreateTopicRequest;
import com.amazonaws.services.sns.model.CreateTopicResult;
import com.amazonaws.services.sns.model.DeleteTopicRequest;
import com.amazonaws.services.sns.model.SubscribeRequest;
import com.amazonaws.services.sns.model.SubscribeResult;
import com.amazonaws.services.sns.model.UnsubscribeRequest;
import com.amazonaws.services.sqs.AmazonSQSClient;
import com.amazonaws.services.sqs.model.CreateQueueRequest;
import com.amazonaws.services.sqs.model.CreateQueueResult;
import com.amazonaws.services.sqs.model.DeleteQueueRequest;
import com.amazonaws.services.sqs.model.GetQueueAttributesRequest;
import com.amazonaws.services.sqs.model.GetQueueAttributesResult;
import com.amazonaws.services.sqs.model.Message;
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;


public class AmazonGlacierDownloadInventoryWithSQSPolling {

    public static String vaultName = "*** provide vault name ***";
    public static String snsTopicName = "*** provide topic name ***";
    public static String sqsQueueName = "*** provide queue name ***";
    public static String sqsQueueARN;
    public static String sqsQueueURL;
    public static String snsTopicARN;
    public static String snsSubscriptionARN;
    public static String fileName = "*** provide file name ***";
    public static String region = "*** region ***";
    public static long sleepTime = 600; 
    public static AmazonGlacierClient client;
    public static AmazonSQSClient sqsClient;
    public static AmazonSNSClient snsClient;
    
    public static void main(String[] args) throws IOException {
        
    	ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();

        client = new AmazonGlacierClient(credentials);
        client.setEndpoint("https://glacier." + region + ".amazonaws.com");
        sqsClient = new AmazonSQSClient(credentials);
        sqsClient.setEndpoint("https://sqs." + region + ".amazonaws.com");
        snsClient = new AmazonSNSClient(credentials);
        snsClient.setEndpoint("https://sns." + region + ".amazonaws.com");
        
        try {
            setupSQS();
            
            setupSNS();

            String jobId = initiateJobRequest();
            System.out.println("Jobid = " + jobId);
            
            Boolean success = waitForJobToComplete(jobId, sqsQueueURL);
            if (!success) { throw new Exception("Job did not complete successfully."); }
            
            downloadJobOutput(jobId);
            
            cleanUp();
            
        } catch (Exception e) {
            System.err.println("Inventory retrieval failed.");
            System.err.println(e);
        }   
    }

    private static void setupSQS() {
        CreateQueueRequest request = new CreateQueueRequest()
            .withQueueName(sqsQueueName);
        CreateQueueResult result = sqsClient.createQueue(request);  
        sqsQueueURL = result.getQueueUrl();
                
        GetQueueAttributesRequest qRequest = new GetQueueAttributesRequest()
            .withQueueUrl(sqsQueueURL)
            .withAttributeNames("QueueArn");
        
        GetQueueAttributesResult qResult = sqsClient.getQueueAttributes(qRequest);
        sqsQueueARN = qResult.getAttributes().get("QueueArn");
        
        Policy sqsPolicy = 
            new Policy().withStatements(
                    new Statement(Effect.Allow)
                    .withPrincipals(Principal.AllUsers)
                    .withActions(SQSActions.SendMessage)
                    .withResources(new Resource(sqsQueueARN)));
        Map<String, String> queueAttributes = new HashMap<String, String>();
        queueAttributes.put("Policy", sqsPolicy.toJson());
        sqsClient.setQueueAttributes(new SetQueueAttributesRequest(sqsQueueURL, queueAttributes)); 

    }
    private static void setupSNS() {
        CreateTopicRequest request = new CreateTopicRequest()
            .withName(snsTopicName);
        CreateTopicResult result = snsClient.createTopic(request);
        snsTopicARN = result.getTopicArn();

        SubscribeRequest request2 = new SubscribeRequest()
            .withTopicArn(snsTopicARN)
            .withEndpoint(sqsQueueARN)
            .withProtocol("sqs");
        SubscribeResult result2 = snsClient.subscribe(request2);
                
        snsSubscriptionARN = result2.getSubscriptionArn();
    }
    private static String initiateJobRequest() {
        
        JobParameters jobParameters = new JobParameters()
            .withType("inventory-retrieval")
            .withSNSTopic(snsTopicARN);
        
        InitiateJobRequest request = new InitiateJobRequest()
            .withVaultName(vaultName)
            .withJobParameters(jobParameters);
        
        InitiateJobResult response = client.initiateJob(request);
        
        return response.getJobId();
    }
    
    private static Boolean waitForJobToComplete(String jobId, String sqsQueueUrl) throws InterruptedException, JsonParseException, IOException {
        
        Boolean messageFound = false;
        Boolean jobSuccessful = false;
        ObjectMapper mapper = new ObjectMapper();
        JsonFactory factory = mapper.getFactory();
        
        while (!messageFound) {
            List<Message> msgs = sqsClient.receiveMessage(
               new ReceiveMessageRequest(sqsQueueUrl).withMaxNumberOfMessages(10)).getMessages();

            if (msgs.size() > 0) {
                for (Message m : msgs) {
                    JsonParser jpMessage = factory.createJsonParser(m.getBody());
                    JsonNode jobMessageNode = mapper.readTree(jpMessage);
                    String jobMessage = jobMessageNode.get("Message").textValue();
                    
                    JsonParser jpDesc = factory.createJsonParser(jobMessage);
                    JsonNode jobDescNode = mapper.readTree(jpDesc);
                    String retrievedJobId = jobDescNode.get("JobId").textValue();
                    String statusCode = jobDescNode.get("StatusCode").textValue();
                    if (retrievedJobId.equals(jobId)) {
                        messageFound = true;
                        if (statusCode.equals("Succeeded")) {
                            jobSuccessful = true;
                        }
                    }
                }
                
            } else {
              Thread.sleep(sleepTime * 1000); 
            }
          }
        return (messageFound && jobSuccessful);
    }
    
    private static void downloadJobOutput(String jobId) throws IOException {
        
        GetJobOutputRequest getJobOutputRequest = new GetJobOutputRequest()
            .withVaultName(vaultName)
            .withJobId(jobId);
        GetJobOutputResult getJobOutputResult = client.getJobOutput(getJobOutputRequest);
    
        FileWriter fstream = new FileWriter(fileName);
        BufferedWriter out = new BufferedWriter(fstream);
        BufferedReader in = new BufferedReader(new InputStreamReader(getJobOutputResult.getBody()));            
        String inputLine;
        try {
            while ((inputLine = in.readLine()) != null) {
                out.write(inputLine);
            }
        }catch(IOException e) {
            throw new AmazonClientException("Unable to save archive", e);
        }finally{
            try {in.close();}  catch (Exception e) {}
            try {out.close();}  catch (Exception e) {}             
        }
        System.out.println("Retrieved inventory to " + fileName);
    }
    
    private static void cleanUp() {
        snsClient.unsubscribe(new UnsubscribeRequest(snsSubscriptionARN));
        snsClient.deleteTopic(new DeleteTopicRequest(snsTopicARN));
        sqsClient.deleteQueue(new DeleteQueueRequest(sqsQueueURL));
    }
}
```

# 使用 在 Amazon Glacier 中下載保存庫庫存 適用於 .NET 的 AWS SDK
<a name="retrieving-vault-inventory-sdk-dotnet"></a>

以下是使用 適用於 .NET 的 AWS SDK低階 API 來擷取保存庫庫存的步驟。高階的 API 不支援擷取保存庫庫存。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

   您需要指定保存庫所在的 AWS 區域。您使用此用戶端執行的所有操作都會套用到該 AWS 區域。

1. 透過執行 `InitiateJob` 方法來起始庫存擷取任務。

   您可以在 `InitiateJobRequest` 物件中提供工作資訊。Amazon Glacier (Amazon Glacier) 會傳回任務 ID 以回應。該回應在 `InitiateJobResponse` 類別的執行個體中可用。

    

   ```
   AmazonGlacierClient client;
   client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2);
   
   InitiateJobRequest initJobRequest = new InitiateJobRequest()
   {
     VaultName = vaultName,
     JobParameters = new JobParameters()
     {
       Type = "inventory-retrieval",
       SNSTopic = "*** Provide Amazon SNS topic arn ***",
     }
   };
   InitiateJobResponse initJobResponse = client.InitiateJob(initJobRequest);
   string jobId = initJobResponse.JobId;
   ```

1. 等候 工作完成。

   您必須等到任務輸出準備好供您下載。如果您已在識別 Amazon Simple Notification Service (Amazon SNS) 主題的保存庫上設定通知組態，或在啟動任務時指定 Amazon SNS 主題，Amazon Glacier 會在任務完成後傳送訊息至該主題。下一節中提供的程式碼範例使用 Amazon SNS for Amazon Glacier 來發佈訊息。

   您也可以呼叫 `DescribeJob`方法來輪詢 Amazon Glacier，以判斷任務完成狀態。雖然，使用 Amazon SNS 主題進行通知是建議的方法。

1. 透過執行 `GetJobOutput` 方法下載工作輸出 (保存庫庫存資料)。

   透過建立 `GetJobOutputRequest` 類別的執行個體來提供帳戶 ID、保存庫名稱和工作 ID 資訊。如果您不提供帳戶 ID，則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需詳細資訊，請參閱[適用於 .NET 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-dot-net.md)。

   Amazon Glacier 傳回的輸出可在 `GetJobOutputResponse` 物件中使用。

    

   ```
   GetJobOutputRequest getJobOutputRequest = new GetJobOutputRequest()
   {
     JobId = jobId,
     VaultName = vaultName
   };
   						       
   GetJobOutputResponse getJobOutputResponse = client.GetJobOutput(getJobOutputRequest); 
   using (Stream webStream = getJobOutputResponse.Body)
   {
      using (Stream fileToSave = File.OpenWrite(fileName))
      {
        CopyStream(webStream, fileToSave);
      }
   }
   ```

    
**注意**  
如需與任務相關的底層 REST API 的資訊，請參閱 [任務操作](job-operations.md)。

## 範例：使用 的低階 API 擷取保存庫庫存 適用於 .NET 的 AWS SDK
<a name="creating-vaults-sdk-dotnet-example-inventory"></a>

以下 C\$1 程式碼範例將擷取指定保存庫的保存庫庫存。

範例會執行下列任務：

 
+ 設定 Amazon SNS 主題。

  Amazon Glacier 會在完成任務後傳送通知至此主題。
+ 設定 Amazon SQS 佇列。

  此範例將政策連接至佇列，以使 Amazon SNS 主題能夠發佈訊息。
+ 啟動任務以下載指定的封存。

  在任務請求中，範例會指定 Amazon SNS 主題，以便 Amazon Glacier 在完成任務後傳送訊息。
+ 定期檢查 Amazon SQS 佇列中的訊息。

  如果有訊息，剖析 JSON 並檢查任務是否順利完成。如果是，請下載封存。該代碼範例使用 JSON.NET 程式庫 (請參閱 [JSON.NET](http://json.codeplex.com/)) 來剖析 JSON。
+ 透過刪除 Amazon SNS 主題和其建立的 Amazon SQS 佇列來清除。

**Example**  

```
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using Amazon.Glacier;
using Amazon.Glacier.Model;
using Amazon.Glacier.Transfer;
using Amazon.Runtime;
using Amazon.SimpleNotificationService;
using Amazon.SimpleNotificationService.Model;
using Amazon.SQS;
using Amazon.SQS.Model;
using Newtonsoft.Json;

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class VaultInventoryJobLowLevelUsingSNSSQS
  {
    static string topicArn;
    static string queueUrl;
    static string queueArn;
    static string vaultName = "*** Provide vault name ***";
    static string fileName  = "*** Provide file name and path where to store inventory ***";
    static AmazonSimpleNotificationServiceClient snsClient;
    static AmazonSQSClient sqsClient;
    const string SQS_POLICY =
        "{" +
        "    \"Version\" : \"2012-10-17\",&TCX5-2025-waiver;" +
        "    \"Statement\" : [" +
        "        {" +
        "            \"Sid\" : \"sns-rule\"," +
        "            \"Effect\" : \"Allow\"," +
        "            \"Principal\" : {\"AWS\" : \"arn:aws:iam::123456789012:root\" }," +
        "            \"Action\"    : \"sqs:SendMessage\"," +
        "            \"Resource\"  : \"{QuernArn}\"," +
        "            \"Condition\" : {" +
        "                \"ArnLike\" : {" +
        "                    \"aws:SourceArn\" : \"{TopicArn}\"" +
        "                }" +
        "            }" +
        "        }" +
        "    ]" +
        "}";

    public static void Main(string[] args)
    {
      AmazonGlacierClient client;
      try
      {
        using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2))
        {
            Console.WriteLine("Setup SNS topic and SQS queue."); 
            SetupTopicAndQueue();
            Console.WriteLine("To continue, press Enter"); Console.ReadKey();
            
            Console.WriteLine("Retrieve Inventory List");
            GetVaultInventory(client);
        }
        Console.WriteLine("Operations successful.");
        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); }
      finally
      {        
       // Delete SNS topic and SQS queue.
       snsClient.DeleteTopic(new DeleteTopicRequest() { TopicArn = topicArn });
       sqsClient.DeleteQueue(new DeleteQueueRequest() { QueueUrl = queueUrl });
      }
    }

    static void SetupTopicAndQueue()
    {
      long ticks = DateTime.Now.Ticks;
      
      // Setup SNS topic.
      snsClient = new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.USWest2);
      sqsClient = new AmazonSQSClient(Amazon.RegionEndpoint.USWest2);

      topicArn = snsClient.CreateTopic(new CreateTopicRequest { Name = "GlacierDownload-" + ticks }).TopicArn;
      Console.Write("topicArn: "); Console.WriteLine(topicArn);
 
      CreateQueueRequest createQueueRequest =  new CreateQueueRequest();
      createQueueRequest.QueueName = "GlacierDownload-" + ticks;
      CreateQueueResponse createQueueResponse = sqsClient.CreateQueue(createQueueRequest);
      queueUrl = createQueueResponse.QueueUrl;
      Console.Write("QueueURL: "); Console.WriteLine(queueUrl);

      GetQueueAttributesRequest getQueueAttributesRequest = new GetQueueAttributesRequest();
      getQueueAttributesRequest.AttributeNames = new List<string> { "QueueArn" };
      getQueueAttributesRequest.QueueUrl = queueUrl;
      GetQueueAttributesResponse response = sqsClient.GetQueueAttributes(getQueueAttributesRequest);
      queueArn = response.QueueARN;
      Console.Write("QueueArn: ");Console.WriteLine(queueArn);

      // Setup the Amazon SNS topic to publish to the SQS queue.
      snsClient.Subscribe(new SubscribeRequest()
      {
        Protocol = "sqs",
        Endpoint = queueArn,
        TopicArn = topicArn
      });

      // Add the policy to the queue so SNS can send messages to the queue.
      var policy = SQS_POLICY.Replace("{TopicArn}", topicArn).Replace("{QuernArn}", queueArn);
     
      sqsClient.SetQueueAttributes(new SetQueueAttributesRequest()
      {
          QueueUrl = queueUrl,
          Attributes = new Dictionary<string, string>
          {
              { QueueAttributeName.Policy, policy }
          }
      });

    }
 
    static void GetVaultInventory(AmazonGlacierClient client)
    {
      // Initiate job.
      InitiateJobRequest initJobRequest = new InitiateJobRequest()
      {
        VaultName = vaultName,
        JobParameters = new JobParameters()
        {
          Type = "inventory-retrieval",
          Description = "This job is to download a vault inventory.",
          SNSTopic = topicArn,
        }
      };
   
      InitiateJobResponse initJobResponse = client.InitiateJob(initJobRequest);
      string jobId = initJobResponse.JobId;

      // Check queue for a message and if job completed successfully, download inventory.
      ProcessQueue(jobId, client);    
    }

    private static void ProcessQueue(string jobId, AmazonGlacierClient client)
    {
      ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest() { QueueUrl = queueUrl, MaxNumberOfMessages = 1 };
      bool jobDone = false;
      while (!jobDone)
      {
        Console.WriteLine("Poll SQS queue"); 
        ReceiveMessageResponse receiveMessageResponse = sqsClient.ReceiveMessage(receiveMessageRequest);
        if (receiveMessageResponse.Messages.Count == 0)
        {
          Thread.Sleep(10000 * 60);
          continue;
        }
        Console.WriteLine("Got message");
        Message message = receiveMessageResponse.Messages[0];
        Dictionary<string, string> outerLayer = JsonConvert.DeserializeObject<Dictionary<string, string>>(message.Body);
        Dictionary<string, object> fields = JsonConvert.DeserializeObject<Dictionary<string, object>>(outerLayer["Message"]);
        string statusCode = fields["StatusCode"] as string;

        if (string.Equals(statusCode, GlacierUtils.JOB_STATUS_SUCCEEDED, StringComparison.InvariantCultureIgnoreCase))
        {
          Console.WriteLine("Downloading job output");
          DownloadOutput(jobId, client); // Save job output to the specified file location.
        }
        else if (string.Equals(statusCode, GlacierUtils.JOB_STATUS_FAILED, StringComparison.InvariantCultureIgnoreCase))
          Console.WriteLine("Job failed... cannot download the inventory.");

        jobDone = true;
        sqsClient.DeleteMessage(new DeleteMessageRequest() { QueueUrl = queueUrl, ReceiptHandle = message.ReceiptHandle });
      }
    }

    private static void DownloadOutput(string jobId, AmazonGlacierClient client)
    {
      GetJobOutputRequest getJobOutputRequest = new GetJobOutputRequest()
      {      
        JobId = jobId,
        VaultName = vaultName
      };
      
      GetJobOutputResponse getJobOutputResponse = client.GetJobOutput(getJobOutputRequest); 
      using (Stream webStream = getJobOutputResponse.Body)
      {
        using (Stream fileToSave = File.OpenWrite(fileName))
        {
          CopyStream(webStream, fileToSave);
        }
      }
    }

    public static void CopyStream(Stream input, Stream output)
    {
      byte[] buffer = new byte[65536];
      int length;
      while ((length = input.Read(buffer, 0, buffer.Length)) > 0)
      {
        output.Write(buffer, 0, length);
      }
    }
  }
}
```

# 使用 REST API下載文件庫清查
<a name="retrieving-vault-inventory-rest-api"></a>

**使用 REST API下載文件庫清查**

下載文件庫清查程序包含兩個步驟。

1. 啟動 `inventory-retrieval` 類型的任務。如需詳細資訊，請參閱[啟動任務 (POST 任務)](api-initiate-job-post.md)。

1. 任務完成後，下載庫存資料。如需詳細資訊，請參閱[「取得任務輸出」 (GET 輸出)](api-job-output-get.md)。

# 使用 在 Amazon Glacier 中下載保存庫庫存 AWS Command Line Interface
<a name="retrieving-vault-inventory-cli"></a>

請依照下列步驟，使用 AWS Command Line Interface () 在 Amazon Glacier (Amazon Glacier) 中下載保存庫庫存AWS CLI。

**Topics**
+ [

## （先決條件） 設定 AWS CLI
](#Creating-Vaults-CLI-Setup)
+ [

## 範例：使用 下載保存庫庫存 AWS CLI
](#Retrieving-Vault-Inventory-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 設定。這些命令不會明確提供登入資料，因此會使用預設描述檔的登入資料。
   + 嘗試使用幫助命令。

     ```
     aws help
     ```
   + 若要取得已設定帳戶上的 Amazon Glacier 保存庫清單，請使用 `list-vaults`命令。將 *123456789012* 取代為您的 AWS 帳戶 ID。

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 若要查看 目前的組態資料 AWS CLI，請使用 `aws configure list`命令。

     ```
     aws configure list
     ```

## 範例：使用 下載保存庫庫存 AWS CLI
<a name="Retrieving-Vault-Inventory-CLI-Implementation"></a>

1. 使用 `initiate-job` 命令啟動清查擷取任務。

   ```
   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` 命令檢查先前擷取任務的狀態。

   ```
   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 Glacier 完成任務後至少 24 小時內，任務 ID 不會過期。如果您已在保存庫上設定通知組態，或在啟動任務時指定 Amazon Simple Notification Service (Amazon SNS) 主題，Amazon Glacier 會在完成任務後傳送訊息至主題。

   您可以為文件庫中的特定事件設定通知組態。如需詳細資訊，請參閱[在 Amazon Glacier 中設定保存庫通知](configuring-notifications.md)。Amazon Glacier 會在發生特定事件時傳送訊息至指定的 SNS 主題。

1. 完成時，請使用 `get-job-output` 命令將擷取任務下載至檔案 `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":
   ...
   ]}
   ```

# 在 Amazon Glacier 中設定保存庫通知
<a name="configuring-notifications"></a>

從 Amazon Glacier 擷取任何內容，例如從保存庫或保存庫庫存封存，都是兩個步驟。

1. 啟動擷取任務。

1. 工作完成後，下載工作輸出。

可以在保存庫中設定通知設定，以便在工作完成後，將訊息傳送到 Amazon Simple Notification Service (Amazon SNS) 主題。

**Topics**
+ [

## 在 Amazon Glacier 中設定保存庫通知：一般概念
](#configuring-notifications.general)
+ [

# 使用 在 Amazon Glacier 中設定保存庫通知 適用於 Java 的 AWS SDK
](configuring-notifications-sdk-java.md)
+ [

# 使用 在 Amazon Glacier 中設定保存庫通知 適用於 .NET 的 AWS SDK
](configuring-notifications-sdk-dotnet.md)
+ [

# 使用 REST API 在 Amazon Glacier 中設定保存庫通知
](configuring-notifications-rest-api.md)
+ [

# 使用 Amazon Glacier 主控台設定保存庫通知
](configuring-notifications-console.md)
+ [

# 使用 設定保存庫通知 AWS Command Line Interface
](configuring-notifications-cli.md)

## 在 Amazon Glacier 中設定保存庫通知：一般概念
<a name="configuring-notifications.general"></a>

Amazon Glacier 擷取任務請求會以非同步方式執行。您必須等到 Amazon Glacier 完成任務，才能取得其輸出。您可以定期輪詢 Amazon Glacier 以判斷任務狀態，但這不是最佳方法。Amazon Glacier 也支援通知。工作完成後，該工作就可將訊息張貼到 Amazon Simple Notification Service (Amazon SNS) 主題。使用此功能需要您在保存庫上設定通知設定。在組態中，您可以識別一或多個事件，以及您希望 Amazon Glacier 在事件發生時傳送訊息的 Amazon SNS 主題。 Amazon Glacier 

Amazon Glacier 會定義與任務完成 (`ArchiveRetrievalCompleted`、`InventoryRetrievalCompleted`) 特別相關的事件，您可以將這些事件新增至保存庫的通知組態。特定任務完成後，Amazon Glacier 會將通知訊息發佈至 SNS 主題。

 通知組態是 JSON 文件，如以下範例所示。

```
{    
   "SNSTopic": "arn:aws:sns:us-west-2:012345678901:mytopic",    
   "Events": ["ArchiveRetrievalCompleted", "InventoryRetrievalCompleted"] 
}
```

請注意，您只能為保存庫設定一個 Amazon SNS 主題。

 

**注意**  
將通知組態新增至保存庫會導致 Amazon Glacier 每次發生通知組態中指定的事件時傳送通知。您還可以選擇在每個工作啟動請求中指定 Amazon SNS 主題。如果您在保存庫上新增通知組態，並在啟動任務請求中指定 Amazon SNS 主題，Amazon Glacier 會傳送這兩個通知。

Amazon Glacier 傳送的任務完成訊息包含諸如任務類型 (`InventoryRetrieval`、`ArchiveRetrieval`)、任務完成狀態、SNS 主題名稱、任務狀態碼和保存庫 ARN 等資訊。以下是 Amazon Glacier 在完成`InventoryRetrieval`任務後傳送至 SNS 主題的範例通知。

```
{
 "Action": "InventoryRetrieval",
 "ArchiveId": null,
 "ArchiveSizeInBytes": null,
 "Completed": true,
 "CompletionDate": "2012-06-12T22:20:40.790Z",
 "CreationDate": "2012-06-12T22:20:36.814Z",
 "InventorySizeInBytes":11693,
 "JobDescription": "my retrieval job",
 "JobId":"HkF9p6o7yjhFx-K3CGl6fuSm6VzW9T7esGQfco8nUXVYwS0jlb5gq1JZ55yHgt5vP54ZShjoQzQVVh7vEXAMPLEjobID",
 "SHA256TreeHash":null,
 "SNSTopic": "arn:aws:sns:us-west-2:012345678901:mytopic",
 "StatusCode":"Succeeded",
 "StatusMessage": "Succeeded",
 "VaultARN": "arn:aws:glacier:us-west-2:012345678901:vaults/examplevault"
}
```

如果 `Completed` 欄位為 true，您還必須檢查 `StatusCode` 來確認任務順利完成還是失敗。

**注意**  
請注意，Amazon SNS 主題必須允許保存庫發布通知。在預設情況下，只有 Amazon SNS 主題擁有者可以向該主題發布訊息。不過，如果 Amazon SNS 主題和保存庫是由不同的 擁有 AWS 帳戶，則您必須設定 Amazon SNS 主題以接受保存庫中的發佈。您可以在 Amazon SNS 主控台設定 Amazon SNS 主題政策。

如需 Amazon SNS 的詳細資訊，請參閱 [Amazon SNS 入門](https://docs.aws.amazon.com/sns/latest/gsg/Welcome.html)。

# 使用 在 Amazon Glacier 中設定保存庫通知 適用於 Java 的 AWS SDK
<a name="configuring-notifications-sdk-java"></a>

以下是使用 適用於 Java 的 AWS SDK低階 API 設定保存庫通知的步驟。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

   您需要指定保存庫所在的 AWS 區域。您使用此用戶端執行的所有操作都會套用到該 AWS 區域。

1. 您可以透過建立 `SetVaultNotificationsRequest` 類別的執行個體，來提供通知組態資訊。

   您需要提供保存庫名稱、通知組態資訊和帳戶 ID。在指定通知設定時，您提供現有 Amazon SNS 主題的 Amazon Resource Name (ARN) 和要進行通知的一或多個事件。如需支援的事件清單，請參閱[設定保存庫通知組態 (PUT 通知的組態)](api-vault-notifications-put.md))。

1. 以參數形式提供請求物件，以便執行 `setVaultNotifications` 方法。

下列 Java 程式碼片段描述前述步驟。程式碼片段在文件庫上設定通知組態。當`ArchiveRetrievalCompleted`事件發生或`InventoryRetrievalCompleted`事件發生時，組態會要求 Amazon Glacier (Amazon Glacier) 傳送通知至指定的 Amazon SNS 主題。

 

```
SetVaultNotificationsRequest request = new SetVaultNotificationsRequest()
        .withAccountId("-")
        .withVaultName("*** provide vault name ***")
        .withVaultNotificationConfig(
                new VaultNotificationConfig()
                .withSNSTopic("*** provide SNS topic ARN ***")
                .withEvents("ArchiveRetrievalCompleted", "InventoryRetrievalCompleted")
         );
client.setVaultNotifications(request);
```

 

**注意**  
如需基礎 REST API 的資訊，請參閱 [保存庫作業](vault-operations.md)。

## 範例：使用 在保存庫上設定通知組態 適用於 Java 的 AWS SDK
<a name="configuring-notifications-sdk-java-example"></a>

以下 Java 程式碼範例設定文件庫的通知組態，刪除組態，然後復原組態。如需如何執行下列範例的逐步說明，請參閱 [適用於 Java 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-java.md)。

**Example**  

```
import java.io.IOException;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.model.DeleteVaultNotificationsRequest;
import com.amazonaws.services.glacier.model.GetVaultNotificationsRequest;
import com.amazonaws.services.glacier.model.GetVaultNotificationsResult;
import com.amazonaws.services.glacier.model.SetVaultNotificationsRequest;
import com.amazonaws.services.glacier.model.VaultNotificationConfig;


public class AmazonGlacierVaultNotifications {

    public static AmazonGlacierClient client;
    public static String vaultName = "*** provide vault name ****";
    public static String snsTopicARN = "*** provide sns topic ARN ***";

    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 {

            System.out.println("Adding notification configuration to the vault.");
            setVaultNotifications();
            getVaultNotifications();
            deleteVaultNotifications();
            
        } catch (Exception e) {
            System.err.println("Vault operations failed." + e.getMessage());
        }
    }

    private static void setVaultNotifications() {
        VaultNotificationConfig config = new VaultNotificationConfig()
            .withSNSTopic(snsTopicARN)
            .withEvents("ArchiveRetrievalCompleted", "InventoryRetrievalCompleted");
        
        SetVaultNotificationsRequest request = new SetVaultNotificationsRequest()
                .withVaultName(vaultName)
                .withVaultNotificationConfig(config);
                                
        client.setVaultNotifications(request);
        System.out.println("Notification configured for vault: " + vaultName);
    }

    private static void getVaultNotifications() {
        VaultNotificationConfig notificationConfig = null;
        GetVaultNotificationsRequest request = new GetVaultNotificationsRequest()
                .withVaultName(vaultName);
        GetVaultNotificationsResult result = client.getVaultNotifications(request);
        notificationConfig = result.getVaultNotificationConfig();

        System.out.println("Notifications configuration for vault: "
                + vaultName);
        System.out.println("Topic: " + notificationConfig.getSNSTopic());
        System.out.println("Events: " + notificationConfig.getEvents());
    }

    private static void deleteVaultNotifications() {
            DeleteVaultNotificationsRequest request = new DeleteVaultNotificationsRequest()
                .withVaultName(vaultName);
            client.deleteVaultNotifications(request);
            System.out.println("Notifications configuration deleted for vault: " + vaultName);
    }
}
```

# 使用 在 Amazon Glacier 中設定保存庫通知 適用於 .NET 的 AWS SDK
<a name="configuring-notifications-sdk-dotnet"></a>

以下是使用 適用於 .NET 的 AWS SDK低階 API 設定保存庫通知的步驟。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

   您需要指定保存庫所在的 AWS 區域。您使用此用戶端執行的所有操作都會套用到該 AWS 區域。

1. 您可以透過建立 `SetVaultNotificationsRequest` 類別的執行個體，來提供通知組態資訊。

   您需要提供保存庫名稱、通知組態資訊和帳戶 ID。如果您不提供帳戶 ID，則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需詳細資訊，請參閱[適用於 .NET 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-dot-net.md)。

   在指定通知設定時，您提供現有 Amazon SNS 主題的 Amazon Resource Name (ARN) 和要進行通知的一或多個事件。如需支援的事件清單，請參閱[設定保存庫通知組態 (PUT 通知的組態)](api-vault-notifications-put.md))。

1. 以參數形式提供請求物件，以便執行 `SetVaultNotifications` 方法。

1. 在設定有關保存庫的通知組態之後，您可以透過呼叫 `GetVaultNotifications` 方法擷取組態資訊，以及透過呼叫用戶端所提供的 `DeleteVaultNotifications` 方法將其移除。

## 範例：使用 在保存庫上設定通知組態 適用於 .NET 的 AWS SDK
<a name="creating-vaults-sdk-dotnet-example-notification"></a>

下列 C\$1 程式碼範例描述前述步驟。此範例在美國西部 (奧勒岡) 區域設定有關保存庫 (「`examplevault`」) 的通知設定、擷取設定，然後將其刪除。當`ArchiveRetrievalCompleted`事件發生或`InventoryRetrievalCompleted`事件發生時，組態會要求 Amazon Glacier (Amazon Glacier) 傳送通知至指定的 Amazon SNS 主題。

**注意**  
如需基礎 REST API 的資訊，請參閱 [保存庫作業](vault-operations.md)。

如需執行下列範例的逐步說明，請參閱「[執行程式碼範例](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet)」。您需要如所示更新程式碼，並提供現有的保存庫名稱和 Amazon SNS 主題。

**Example**  

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

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class VaultNotificationSetGetDelete
  {
    static string vaultName   = "examplevault";
    static string snsTopicARN = "*** Provide Amazon SNS topic ARN ***";

    static IAmazonGlacier client;

    public static void Main(string[] args)
    {
      try
      {
        using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2))
        {
          Console.WriteLine("Adding notification configuration to the vault.");
          SetVaultNotificationConfig();
          GetVaultNotificationConfig();
          Console.WriteLine("To delete vault notification configuration, press Enter");
          Console.ReadKey();
          DeleteVaultNotificationConfig();
        }
      }
      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 SetVaultNotificationConfig()
    {

      SetVaultNotificationsRequest request = new SetVaultNotificationsRequest()
      {     
        VaultName = vaultName,
        VaultNotificationConfig = new VaultNotificationConfig()
        {
          Events   = new List<string>() { "ArchiveRetrievalCompleted", "InventoryRetrievalCompleted" },
          SNSTopic = snsTopicARN
        }
      };
      SetVaultNotificationsResponse response = client.SetVaultNotifications(request);
    }

    static void GetVaultNotificationConfig()
    {
      GetVaultNotificationsRequest request = new GetVaultNotificationsRequest()
      {
        VaultName = vaultName,
        AccountId = "-"
      };
      GetVaultNotificationsResponse response = client.GetVaultNotifications(request);
      Console.WriteLine("SNS Topic ARN: {0}", response.VaultNotificationConfig.SNSTopic);
      foreach (string s in response.VaultNotificationConfig.Events)
        Console.WriteLine("Event : {0}", s);
    }

    static void DeleteVaultNotificationConfig()
    {
      DeleteVaultNotificationsRequest request = new DeleteVaultNotificationsRequest()
      {  
        VaultName = vaultName
      };
      DeleteVaultNotificationsResponse response = client.DeleteVaultNotifications(request);
    }
  }
}
```

# 使用 REST API 在 Amazon Glacier 中設定保存庫通知
<a name="configuring-notifications-rest-api"></a>

若要使用 REST API 設定文件庫通知，請參閱 [設定保存庫通知組態 (PUT 通知的組態)](api-vault-notifications-put.md)。此外，您還可以取得文件庫通知 ([取得文件庫通知 (GET 通知的組態)](api-vault-notifications-get.md)) 和刪除文件庫通知 ([刪除保存庫通知 (DELETE 通知的組態)](api-vault-notifications-delete.md))。

# 使用 Amazon Glacier 主控台設定保存庫通知
<a name="configuring-notifications-console"></a>

本節說明如何使用 Amazon Glacier 主控台設定保存庫通知。設定通知時，您可以指定工作完成事件，其會將通知傳送至 Amazon Simple Notification Service (Amazon SNS) 主題。除了設定保存庫通知外，您也可以指定在啟動工作時發布通知的主題。如果將保存件庫設為通知特定事件，並且在工作啟動請求中設定通知，則會傳送兩個通知。

**要設定文件庫通知**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/glacier/home](https://console.aws.amazon.com/glacier/home)：// 開啟 Amazon Glacier 主控台。

1. 在左側導覽窗格中，選擇**保存庫**。

1. 在**保存庫**清單中，選擇保存庫。

1. 在**通知**區段中，選擇**編輯**。

1. 在**事件通知**頁面，選擇**開啟通知**。

1. 在**通知**區段中，選擇下列其中一個 Amazon Simple Notification Service (Amazon SNS) 選項，然後按照對應的步驟進行作業：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/amazonglacier/latest/dev/configuring-notifications-console.html)

1. 在**事件**下，選取您要傳送通知的一或兩個事件：
   + 若要僅在封存擷取工作完成時傳送通知，請選取**封存擷取工作完成**。
   + 若要僅在保存庫庫存工作完成時傳送通知，請選取**保存庫庫存擷取工作完成**。

# 使用 設定保存庫通知 AWS Command Line Interface
<a name="configuring-notifications-cli"></a>

本節說明如何使用 AWS Command Line Interface設定保存庫通知。設定通知時，您要指定工作完成事件，其會觸發對 Amazon Simple Notification Service (Amazon SNS) 主題的通知。除了設定文件庫通知外，您也可以指定在啟動作業時發佈通知的主題。如果您的文件庫設定為通知特定事件，並且在作業啟動請求中指定通知，則會發送兩個通知。

請遵循下列步驟，使用 AWS CLI設定保存庫通知。

**Topics**
+ [

## （先決條件） 設定 AWS CLI
](#Creating-Vaults-CLI-Setup)
+ [

## 範例：使用 設定保存庫通知 AWS CLI
](#Configure-Vault-Notifications-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 設定。這些命令不會明確提供登入資料，因此會使用預設描述檔的登入資料。
   + 嘗試使用幫助命令。

     ```
     aws help
     ```
   + 若要取得已設定帳戶上的 Amazon Glacier 保存庫清單，請使用 `list-vaults`命令。將 *123456789012* 取代為您的 AWS 帳戶 ID。

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 若要查看 目前的組態資料 AWS CLI，請使用 `aws configure list`命令。

     ```
     aws configure list
     ```

## 範例：使用 設定保存庫通知 AWS CLI
<a name="Configure-Vault-Notifications-CLI-Implementation"></a>

1. 使用 `set-vault-notifications` 命令，設定保存庫發生特定事件時將傳送的通知。根據預設，您不會收到任何通知。

   ```
   aws glacier set-vault-notifications --vault-name examplevault --account-id 111122223333 --vault-notification-config file://notificationconfig.json
   ```

1.  通知組態是 JSON 文件，如以下範例所示。

   ```
   {    
      "SNSTopic": "arn:aws:sns:us-west-2:012345678901:mytopic",    
      "Events": ["ArchiveRetrievalCompleted", "InventoryRetrievalCompleted"] 
   }
   ```

   如需針對 Amazon Glacier 使用 Amazon SNS 主題的詳細資訊，請參閱在 [Amazon Glacier 中設定保存庫通知：一般概念](configuring-notifications.html#configuring-notifications.general) Amazon Glacier 

   如需 Amazon SNS 的詳細資訊，請參閱 [Amazon SNS 入門](https://docs.aws.amazon.com/sns/latest/gsg/Welcome.html)。

# 在 Amazon Glacier 中刪除保存庫
<a name="deleting-vaults"></a>

Amazon Glacier (Amazon Glacier) 只有在保存庫中截至其計算的最後一個庫存沒有封存，且自上次清查以來沒有寫入保存庫時，才會刪除保存庫。如需刪除封存的資訊，請參閱 [在 Amazon Glacier 中刪除封存](deleting-an-archive.md)。如需下載文件庫清查的詳細資訊，請參閱[在 Amazon Glacier 中下載保存庫庫存](vault-inventory.md)。

 

**注意**  
Amazon Glacier 會每 24 小時定期為每個保存庫準備好庫存。由於庫存可能不會反映最新資訊，Amazon Glacier 會檢查自上次保存庫庫存以來是否有任何寫入操作，以確保保存庫確實是空的。

**注意**  
如需自動刪除保存庫封存，請參閱 [Amazon S3 Glacier 中的自動刪除保存庫封存](https://aws.amazon.com/solutions/guidance/automated-deletion-of-vault-archives-in-amazon-s3-glacier/)。

**Topics**
+ [

# 使用 在 Amazon Glacier 中刪除保存庫 適用於 Java 的 AWS SDK
](deleting-vaults-sdk-java.md)
+ [

# 使用 在 Amazon Glacier 中刪除保存庫 適用於 .NET 的 AWS SDK
](deleting-vaults-sdk-dotnet.md)
+ [

# 使用 REST API 在 Amazon Glacier 中刪除保存庫
](deleting-vault-rest-api.md)
+ [

# 使用 Amazon Glacier 主控台刪除空保存庫
](deleting-vaults-console.md)
+ [

# 使用 在 Amazon Glacier 中刪除保存庫 AWS Command Line Interface
](deleting-vaults-cli.md)

# 使用 在 Amazon Glacier 中刪除保存庫 適用於 Java 的 AWS SDK
<a name="deleting-vaults-sdk-java"></a>

以下是使用 適用於 Java 的 AWS SDK低階 API 來刪除文件庫的步驟。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

   您需要指定從中刪除保存庫 AWS 的區域。您使用此用戶端執行的所有操作都會套用到該 AWS 區域。

1. 您可以透過建立 `DeleteVaultRequest` 類別的執行個體來提供請求資訊。

   您需要提供保存庫名稱和帳戶 ID。如果您不提供帳戶 ID，則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需詳細資訊，請參閱[適用於 Java 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-java.md)。

1. 以參數形式提供請求物件，以便執行 `deleteVault` 方法。

   Amazon Glacier (Amazon Glacier) 只會在保存庫為空時刪除保存庫。如需詳細資訊，請參閱[刪除文件庫 (DELETE 文件庫)](api-vault-delete.md)。

下列 Java 程式碼片段描述前述步驟。

 

```
try {
    DeleteVaultRequest request = new DeleteVaultRequest()
        .withVaultName("*** provide vault name ***");

    client.deleteVault(request);
    System.out.println("Deleted vault: " + vaultName);
} catch (Exception e) {
    System.err.println(e.getMessage());
}
```

**注意**  
如需基礎 REST API 的資訊，請參閱 [刪除文件庫 (DELETE 文件庫)](api-vault-delete.md)。

## 範例：使用 刪除保存庫 適用於 Java 的 AWS SDK
<a name="deleting-vaults-sdk-java-example"></a>

如需運作中程式碼範例，請參閱「[範例：使用 建立保存庫 適用於 Java 的 AWS SDK](creating-vaults-sdk-java.md#creating-vaults-sdk-java-example)」。Java 程式碼範例顯示基本文件庫操作，包括建立和刪除文件庫。

# 使用 在 Amazon Glacier 中刪除保存庫 適用於 .NET 的 AWS SDK
<a name="deleting-vaults-sdk-dotnet"></a>

適用於 .NET 的 Amazon 開發套件提供的[高階和低階 API](using-aws-sdk.md) 都提供了建立保存庫的方法。

**Topics**
+ [

## 使用 的高階 API 刪除保存庫 適用於 .NET 的 AWS SDK
](#deleting-vault-sdk-dotnet-high-level)
+ [

## 使用 的低階 API 刪除保存庫 適用於 .NET 的 AWS SDK
](#deleting-vault-sdk-dotnet-low-level)

## 使用 的高階 API 刪除保存庫 適用於 .NET 的 AWS SDK
<a name="deleting-vault-sdk-dotnet-high-level"></a>

高階 API 的 `ArchiveTransferManager` 類別提供可用來刪除保存庫的 `DeleteVault` 方法。

### 範例：使用 的高階 API 刪除保存庫 適用於 .NET 的 AWS SDK
<a name="deleting-vaults-sdk-dotnet-high-level-example"></a>

如需運作中程式碼範例，請參閱「[範例：使用 的高階 API 進行保存庫操作 適用於 .NET 的 AWS SDK](creating-vaults-dotnet-sdk.md#vault-operations-example-dotnet-highlevel)」。C\$1 程式碼範例顯示基本保存庫作業，包括建立和刪除保存庫。

## 使用 的低階 API 刪除保存庫 適用於 .NET 的 AWS SDK
<a name="deleting-vault-sdk-dotnet-low-level"></a>

以下是使用 適用於 .NET 的 AWS SDK刪除保存庫的步驟。

 

1. 建立 `AmazonGlacierClient` 類別的執行個體 (用戶端)。

   您需要指定從中刪除保存庫 AWS 的區域。您使用此用戶端執行的所有操作都適用於該 AWS 區域。

1. 您可以透過建立 `DeleteVaultRequest` 類別的執行個體來提供請求資訊。

   您需要提供保存庫名稱和帳戶 ID。如果您不提供帳戶 ID，則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需詳細資訊，請參閱[適用於 .NET 的 AWS SDK 搭配 Amazon Glacier 使用](using-aws-sdk-for-dot-net.md)。

1. 以參數形式提供請求物件，以便執行 `DeleteVault` 方法。

   Amazon Glacier (Amazon Glacier) 只會在保存庫為空時刪除保存庫。如需詳細資訊，請參閱[刪除文件庫 (DELETE 文件庫)](api-vault-delete.md)。

下列 C\$1 程式碼片段描述前述步驟。程式碼片段會擷取預設 AWS 區域中保存庫的中繼資料資訊。

```
AmazonGlacier client;
client = new AmazonGlacierClient(Amazon.RegionEndpoint.USEast1);

DeleteVaultRequest request = new DeleteVaultRequest()
{
  VaultName = "*** provide vault name ***"
};

DeleteVaultResponse response = client.DeleteVault(request);
```

**注意**  
如需基礎 REST API 的資訊，請參閱 [刪除文件庫 (DELETE 文件庫)](api-vault-delete.md)。

### 範例：使用 的低階 API 刪除保存庫 適用於 .NET 的 AWS SDK
<a name="creating-vaults-sdk-dotnet-low-level-example"></a>

如需運作中程式碼範例，請參閱「[範例：使用 的低階 API 的保存庫操作 適用於 .NET 的 AWS SDK](creating-vaults-dotnet-sdk.md#vault-operations-example-dotnet-lowlevel)」。C\$1 程式碼範例顯示基本保存庫作業，包括建立和刪除保存庫。

# 使用 REST API 在 Amazon Glacier 中刪除保存庫
<a name="deleting-vault-rest-api"></a>

若要使用 REST API 刪除文件庫，請參閱 [刪除文件庫 (DELETE 文件庫)](api-vault-delete.md)。

# 使用 Amazon Glacier 主控台刪除空保存庫
<a name="deleting-vaults-console"></a>

**注意**  
若要刪除保存庫，您必須先刪除該保存庫內所有現有的封存。您可以使用 REST API、、 或 AWS Command Line Interface () 撰寫程式碼來提出刪除封存請求 適用於 Java 的 AWS SDK， 適用於 .NET 的 AWS SDK藉此執行此操作AWS CLI。如需刪除封存的資訊，請參閱 [步驟 5：從 Amazon Glacier 中的保存庫刪除封存](getting-started-delete-archive.md)。

保存庫清空後，您就可以使用下列步驟將其刪除。

**使用 Amazon Glacier 主控台刪除空保存庫**

1. 登入 AWS 管理主控台 ，並在 Amazon Glacier 主控台開啟 [Amazon Glacier 主控台](https://console.aws.amazon.com/glacier/home)。

1. 在**選取區域**下，選擇保存庫所在的 AWS 區域 。

1. 在左側導覽窗格中，選擇**保存庫**。

1. 在**保存庫**清單中，選取要刪除之保存庫名稱旁的選項，然後選擇頁面頂端的**刪除**。

1. 在**刪除保存庫**對話方塊中，透過選擇**刪除**來確認您要刪除保存庫。
**重要**  
刪除保存庫無法復原。

1. 若要確認您是否已刪除保存庫，請開啟**保存庫**清單，然後輸入您已刪除的保存庫名稱。如果找不到保存庫，就表示已成功刪除。

# 使用 在 Amazon Glacier 中刪除保存庫 AWS Command Line Interface
<a name="deleting-vaults-cli"></a>

您可以使用 () AWS Command Line Interface 刪除 Amazon Glacier (Amazon Glacier) 中的空和非空保存庫AWS CLI。

**Topics**
+ [

## （先決條件） 設定 AWS CLI
](#Creating-Vaults-CLI-Setup)
+ [

## 範例：使用 刪除空保存庫 AWS CLI
](#Deleting-Empty-Vaults-CLI-Implementation)
+ [

## 範例：使用 刪除非空保存庫 AWS CLI
](#Deleting-A-Nonempty-Vaults-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 設定。這些命令不會明確提供登入資料，因此會使用預設描述檔的登入資料。
   + 嘗試使用幫助命令。

     ```
     aws help
     ```
   + 若要取得已設定帳戶上的 Amazon Glacier 保存庫清單，請使用 `list-vaults`命令。將 *123456789012* 取代為您的 AWS 帳戶 ID。

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 若要查看 目前的組態資料 AWS CLI，請使用 `aws configure list`命令。

     ```
     aws configure list
     ```

## 範例：使用 刪除空保存庫 AWS CLI
<a name="Deleting-Empty-Vaults-CLI-Implementation"></a>
+ 使用 `delete-vault` 指令刪除不包含存檔的文件庫。
  + 

    ```
    aws glacier delete-vault --vault-name awsexamplevault --account-id 111122223333
    ```

## 範例：使用 刪除非空保存庫 AWS CLI
<a name="Deleting-A-Nonempty-Vaults-CLI-Implementation"></a>

Amazon Glacier 只有在保存庫中截至其計算的最後一個庫存沒有封存，且自上次清查以來沒有寫入保存庫時，才會刪除保存庫。刪除非空的文件庫有三個步驟：從文件庫的清查報告擷取存檔 ID、刪除每個存檔，然後刪除文件庫。

1. 使用 `initiate-job` 命令啟動清查擷取任務。

   ```
   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` 命令檢查先前擷取任務的狀態。

   ```
   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. 完成時，請使用 `get-job-output` 命令將擷取任務下載至檔案 `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 ***"
   ```
**注意**  
如果您的封存 ID 以連字號或其他特殊字元開頭，您必須以引號括住封存 ID，才能執行此命令。

1. 使用 `initiate-job` 命令來啟動新的清查擷取任務。

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

1. 完成後，請使用 `delete-vault` 命令刪除沒有存檔的文件庫。

   ```
   aws glacier delete-vault --vault-name awsexamplevault --account-id 111122223333
   ```

# 標記您的 Amazon Glacier 保存庫
<a name="tagging-vaults"></a>

您可以將自己的中繼資料以標籤形式指派給 Amazon Glacier 保存庫。*標籤*是您為文件庫定義的金鑰值對。如需有關標籤的基本資訊，包括標籤的限制，請參閱 [標記 Amazon Glacier 資源](tagging.md)。

下列主題說明如何新增、列出和移除文件庫的標籤。

**Topics**
+ [

## 使用 Amazon Glacier 主控台標記保存庫
](#tagging-console)
+ [

## 使用 標記保存庫 AWS CLI
](#tagging-cli)
+ [

## 使用 Amazon Glacier API 標記保存庫
](#tagging-api)
+ [

## 相關章節
](#related-sections-tagging-vaults)

## 使用 Amazon Glacier 主控台標記保存庫
<a name="tagging-console"></a>

您可以使用 Amazon Glacier 主控台新增、列出和移除標籤，如下列程序所述。

**查看文件庫的標籤**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/glacier/home](https://console.aws.amazon.com/glacier/home)：// 開啟 Amazon Glacier 主控台。

1. 在**選取區域**下， AWS 區域 從區域選取器中選取 。

1. 在左側導覽窗格中，選擇**保存庫**。

1. 在**保存庫**清單中，選擇保存庫。

1. 選擇**保存庫屬性**索引標籤。捲動至**標籤**區段以檢視與保存庫相關聯的標籤。

**若要新增標籤到文件庫**

您最多可以將 50 個標籤與保存庫建立關聯。與保存庫相關聯的標籤，必須具備唯一的標籤索引鍵。

如需標籤限制的詳細資訊，請參閱[標記 Amazon Glacier 資源](https://docs.aws.amazon.com/amazonglacier/latest/dev/tagging.html)。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/glacier/home](https://console.aws.amazon.com/glacier/home)：// 開啟 Amazon Glacier 主控台。

1. 在**選取區域**下， AWS 區域 從區域選取器中選取 。

1. 在左側導覽窗格中，選擇**保存庫**。

1. 在**保存庫**清單中，選擇要新增標籤的保存庫名稱。

1. 選擇**保存庫屬性**索引標籤。

1. 在 **Tags (標籤)** 區段中，選擇 **Add (新增)**。**Add tags (新增標籤)** 頁面隨即出現。

1. 在**新增標籤**頁面上，在**索引鍵**欄位內指定標籤索引鍵，(選用) 在**值**欄位內指定標籤值。

1. 選擇**儲存變更**。

**編輯標籤**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/glacier/home](https://console.aws.amazon.com/glacier/home)：// 開啟 Amazon Glacier 主控台。

1. 在**選取區域**下， AWS 區域 從區域選取器中選取 。

1. 在左側導覽窗格中，選擇**保存庫**。

1. 在**保存庫**清單中，選擇保存庫名稱。

1. 選擇**保存庫屬性**索引標籤，然後向下捲動至**標籤**區段。

1. 在**標籤**下，選取要變更之標籤旁邊的核取方塊，然後選擇**編輯**。即會出現**編輯標籤**頁面。

1. 更新**索引鍵**欄位中的標籤索引鍵，並選擇性地更新**值**欄位中的標籤值。

1. 選擇**儲存變更**。

**若要從文件庫中移除標籤**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/glacier/home](https://console.aws.amazon.com/glacier/home) 開啟 Amazon Glacier 主控台。

1. 在**選取區域**下， AWS 區域 從區域選取器中選取 。

1. 在左側導覽窗格中，選擇**保存庫**。

1. 在**保存庫**清單中，選擇要從中移除標籤的保存庫名稱。

1. 選擇**保存庫屬性**索引標籤。向下捲動至**標籤**區段。

1. 在**標籤**下，選取要移除之標籤旁邊的核取方塊，然後選擇**刪除**。

1. **刪除標籤**對話方塊隨即開啟。如要確認刪除所選標籤，請選擇**刪除**。

## 使用 標記保存庫 AWS CLI
<a name="tagging-cli"></a>

請依照下列步驟，使用 AWS Command Line Interface () 新增、列出或移除標籤AWS CLI。

每個標籤皆包含鍵與值。每個保存庫最多可擁有 50 個標籤。

1. 若要將標籤新增至保存庫，請使用 `add-tags-to-vault` 命令。

   ```
   aws glacier add-tags-to-vault --vault-name examplevault --account-id 111122223333 --tags id=1234,date=2020
   ```

    若要取得此保存庫作業的更多資訊，請參閱[將標籤新增至保存庫](https://docs.aws.amazon.com/amazonglacier/latest/dev/api-AddTagsToVault.html)。

1. 若要列出連接至保存庫的所有標籤，請使用 `list-tags-for-vault` 命令。

   ```
   aws glacier list-tags-for-vault --vault-name examplevault --account-id 111122223333
   ```

    若要取得此保存庫作業的更多資訊，請參閱[列出保存庫的標籤](https://docs.aws.amazon.com/amazonglacier/latest/dev/api-ListTagsForVault.html)。

1. 若要從連接至保存庫的一組標籤移除一或多個標籤，請使用 `remove-tags-from-vault` 命令。

   ```
   aws glacier remove-tags-from-vault --vault-name examplevault --account-id 111122223333 --tag-keys date
   ```

   若要取得此保存庫作業的更多資訊，請參閱[將標籤從保存庫中移除](https://docs.aws.amazon.com/amazonglacier/latest/dev/api-RemoveTagsFromVault.html)。

## 使用 Amazon Glacier API 標記保存庫
<a name="tagging-api"></a>

您可以使用 Amazon Glacier API 新增、列出和移除標籤。如需範例，請參閱下列文件：

 [新增標籤至保存庫 (POST 標籤新增)](api-AddTagsToVault.md)   
新增或更新所指定文件庫的標籤。

 [列出文件庫的標籤 (GET 標籤)](api-ListTagsForVault.md)   
列出所指定文件庫的標籤。

 [從保存庫移除標籤 (POST tags remove)](api-RemoveTagsFromVault.md)   
從指定的文件庫中移除標籤。

## 相關章節
<a name="related-sections-tagging-vaults"></a>

 
+ [標記 Amazon Glacier 資源](tagging.md)

# Amazon Glacier 保存庫鎖定
<a name="vault-lock"></a>

下列主題說明如何在 Amazon Glacier 中鎖定保存庫，以及如何使用保存庫鎖定政策。

**Topics**
+ [

## 文件庫鎖定概觀
](#vault-lock-overview)
+ [

# 使用 Amazon Glacier API 鎖定保存庫
](vault-lock-how-to-api.md)
+ [

# 使用 鎖定保存庫 AWS Command Line Interface
](vault-lock-how-to-cli.md)
+ [

# 使用 Amazon Glacier 主控台鎖定保存庫
](vault-lock-walkthrough.md)

## 文件庫鎖定概觀
<a name="vault-lock-overview"></a>

Amazon Glacier Vault Lock 可協助您使用保存庫鎖定政策，輕鬆部署和強制執行個別 Amazon Glacier 保存庫的合規控制。您可以在保存庫鎖定政策中指定控制功能，例如「單寫多讀」(WORM)，並鎖定該政策以防未來進行編輯。

**重要**  
鎖定保存庫鎖定政策後，將無法再變更或刪除該政策。

Amazon Glacier 會強制執行保存庫鎖定政策中設定的控制項，以協助達成您的合規目標。例如，您可以使用保存庫鎖定政策強制執行資料保留。您可以使用 AWS Identity and Access Management (IAM) 政策語言，在保存庫鎖定政策中部署各種合規控制。如需保存庫鎖定政策的詳細資訊，請參閱[保存庫鎖定政策](vault-lock-policy.md)。

保存庫鎖定政策不同於保存庫存取政策。兩個政策都可管理文件庫的存取控制。不過，保存庫鎖定政策是可鎖定的，以防止未來進行變更，為合規控制提供強而有力的執行力。您可以使用保存庫鎖定政策定期部署法規和合規性控制，這通常需要對資料的存取進行緊密的控制。

**重要**  
我們建議您先建立保存庫、完成保存庫鎖定政策，然後將封存上傳至保存庫，以便將政策套用至其中。

相對的，您使用文件庫存取政策來對不是與何規性相關、暫時和需要頻繁修改，施行存取控制。您可以將保存庫鎖定和保存庫存取政策一起搭配使用。例如，您可以在保存庫鎖定政策 (拒絕刪除) 中實作以時間為基礎的資料保留規則，以及在保存庫存取政策中授予讀取權限給指定的第三方或您的業務合作夥伴 (允許讀取)。

鎖定文件庫需要採取兩個步驟：

1. 透過將保存庫鎖定政策連接至保存庫來啟動鎖定，這會將鎖定設定為進行中的狀態，並傳回鎖定 ID。政策處於進行中狀態時，您有 24 小時可在鎖定 ID 過期之前驗證保存庫鎖定政策。若要防止保存庫結束進行中狀態，您必須在這 24 小時內完成保存庫鎖定程序。否則，保存庫鎖定政策將遭到刪除。

1. 使用鎖定 ID 來完成鎖定程序。如果保存庫鎖定政策運作未如預期，您可以停止鎖定程序並從頭重新開始。如需如何使用 Amazon Glacier API 鎖定保存庫的詳細資訊，請參閱 [使用 Amazon Glacier API 鎖定保存庫](vault-lock-how-to-api.md)。

# 使用 Amazon Glacier API 鎖定保存庫
<a name="vault-lock-how-to-api"></a>

若要使用 Amazon Glacier API 鎖定保存庫，您必須先[啟動保存庫鎖定 (POST 鎖定政策)](api-InitiateVaultLock.md)使用指定要部署之控制項的保存庫鎖定政策來呼叫 。`Initiate Vault Lock` 作業會將政策連接至保存庫，將保存庫鎖定轉為進行中狀態，並傳回唯一的鎖定 ID。保存庫鎖定進入進行中狀態後，您有 24 小時可透過使用 [完成保存庫鎖定 (POST lockId)](api-CompleteVaultLock.md) 呼叫傳回的鎖定 ID 呼叫 `Initiate Vault Lock` 來完成鎖定。

**重要**  
我們建議您先建立保存庫、完成保存庫鎖定政策，然後將封存上傳至保存庫，以便將政策套用至其中。
在保存庫鎖定政策遭鎖定之後，再也無法變更或刪除該政策。

如果您未在進入進行中狀態後的 24 小時內完成保存庫鎖定程序，保存庫會自動結束進行中狀態，並且保存庫鎖定政策會遭到移除。您可以再次呼叫 `Initiate Vault Lock` 安裝新的保存庫鎖定政策，並轉換到進行中狀態。

進行中狀態提供機會讓您在鎖定前測試保存庫鎖定政策。保存庫鎖定政策在進行中狀態會充分發揮作用，宛如保存庫已經鎖定，不過您也可以透過呼叫 [「中止保存庫鎖定」(DELETE 鎖定政策)](api-AbortVaultLock.md) 來移除政策。若要調整政策，您可以依需要多次重複 `Abort Vault Lock`/`Initiate Vault Lock` 組合，來驗證保存庫鎖定政策變更。

在您驗證保存庫鎖定政策後，您可以使用最近的鎖定 ID 呼叫 [完成保存庫鎖定 (POST lockId)](api-CompleteVaultLock.md)，來完成保存庫鎖定程序。保存庫會轉換到鎖定狀態，其中保存庫鎖定政策將不可變更，並且無法再透過呼叫 `Abort Vault Lock` 移除。

## 相關章節
<a name="related-sections-vault-lock-how-to-api"></a>

 
+ [保存庫鎖定政策](vault-lock-policy.md)
+ [「中止保存庫鎖定」(DELETE 鎖定政策)](api-AbortVaultLock.md)
+ [完成保存庫鎖定 (POST lockId)](api-CompleteVaultLock.md)
+ [取得保存庫鎖定 (GET 鎖定政策)](api-GetVaultLock.md)
+ [啟動保存庫鎖定 (POST 鎖定政策)](api-InitiateVaultLock.md)

# 使用 鎖定保存庫 AWS Command Line Interface
<a name="vault-lock-how-to-cli"></a>

您可以使用 鎖定保存庫 AWS Command Line Interface。這會在指定的保存庫上安裝保存庫鎖定政策，並傳回鎖定 ID。您必須在 24 小時內完成保存庫鎖定程序，否則會將保存庫鎖定政策從保存庫中移除。

## （先決條件） 設定 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 設定。這些命令不會明確提供登入資料，因此會使用預設描述檔的登入資料。
   + 嘗試使用幫助命令。

     ```
     aws help
     ```
   + 若要取得已設定帳戶上的 Amazon Glacier 保存庫清單，請使用 `list-vaults`命令。將 *123456789012* 取代為您的 AWS 帳戶 ID。

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 若要查看 目前的組態資料 AWS CLI，請使用 `aws configure list`命令。

     ```
     aws configure list
     ```

1. 使用 `initiate-vault-lock` 安裝保存庫鎖定政策，並將保存庫鎖定的鎖定狀態設為 `InProgress`。

   ```
   aws glacier initiate-vault-lock --vault-name examplevault --account-id 111122223333 --policy file://lockconfig.json
   ```

1. 通知設定是 JSON 文件，如以下範例所示。在使用此命令之前，請將 *VAULT\$1ARN* 和 *Principal* 替換為適合您使用案例的值。

   若要尋找要鎖定的保存庫 ARN，您可以使用 `list-vaults` 命令。

   ```
   {"Policy":"{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Sid\":\"Define-vault-lock\",\"Effect\":\"Deny\",\"Principal\":{\"AWS\":\"arn:aws:iam::111122223333:root\"},\"Action\":\"glacier:DeleteArchive\",\"Resource\":\"VAULT_ARN\",\"Condition\":{\"NumericLessThanEquals\":{\"glacier:ArchiveAgeinDays\":\"365\"}}}]}"}
   ```

1. 啟動保存庫鎖定之後，您應該會看到傳回的 `lockId`。

   ```
   {
       "lockId": "LOCK_ID"
   }
   ```

若要完成保存庫鎖定，您必須在 24 小時內執行 `complete-vault-lock`，否則會將保存庫鎖定政策從保存庫中移除。

```
aws glacier complete-vault-lock --vault-name examplevault --account-id 111122223333 --lock-id LOCK_ID
```

## 相關章節
<a name="related-sections-vault-lock-how-to-cli"></a>
+ 在AWS CLI 命令參考**中的 [initiate-vault-lock](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-vault-lock.html)
+ 在AWS CLI 命令參考**中的 [list-vaults](https://docs.aws.amazon.com/cli/latest/reference/glacier/list-vaults.html)
+ 在AWS CLI 命令參考**中的 [complete-vault-lock](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-vault-lock.html)
+ [保存庫鎖定政策](vault-lock-policy.md)
+ [「中止保存庫鎖定」(DELETE 鎖定政策)](api-AbortVaultLock.md)
+ [完成保存庫鎖定 (POST lockId)](api-CompleteVaultLock.md)
+ [取得保存庫鎖定 (GET 鎖定政策)](api-GetVaultLock.md)
+ [啟動保存庫鎖定 (POST 鎖定政策)](api-InitiateVaultLock.md)

# 使用 Amazon Glacier 主控台鎖定保存庫
<a name="vault-lock-walkthrough"></a>

Amazon Glacier Vault Lock 可協助您使用保存庫鎖定政策，輕鬆部署和強制執行個別 Amazon Glacier 保存庫的合規控制。如需 Amazon Glacier 保存庫鎖定的詳細資訊，請參閱 [Amazon Glacier 存取控制與保存庫鎖定政策](https://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock-policy.html)。

**重要**  
我們建議您先建立保存庫、完成保存庫鎖定政策，然後將封存上傳至保存庫，以便將政策套用至其中。
在保存庫鎖定政策遭鎖定之後，再也無法變更或刪除該政策。

**使用 Amazon Glacier 主控台啟動保存庫上的保存庫鎖定政策**

您透過將保存庫鎖定政策連接至保存庫來啟動鎖定，這會將鎖定設為進行中的狀態，並傳回鎖定 ID。政策處於進行中狀態時，您有 24 小時可在鎖定 ID 過期之前驗證保存庫鎖定政策。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/glacier/home](https://console.aws.amazon.com/glacier/home)：// 開啟 Amazon Glacier 主控台。

1. 在**選取區域**下， AWS 區域 從區域選取器中選取 。

1. 在左側導覽窗格中，選擇**保存庫**。

1. 在**保存庫**頁面上，選擇**建立保存庫**。

1. 建立新的保存庫。
**重要**  
我們建議您先建立保存庫、完成保存庫鎖定政策，然後將封存上傳至保存庫，以便將政策套用至其中。

1.  從**保存庫**清單中選擇新的保存庫。

1.  選擇**保存庫政策**索引標籤。

1. 在**保存庫鎖定政策**區段中，選擇**啟動保存庫鎖定政策**。

1. 在**啟動保存庫鎖定政策**頁面上，在標準文字方塊中，以文字格式指定保存庫鎖定政策中的記錄保留控制項。
**注意**  
您可以在保存庫鎖定政策中以文字格式指定記錄保留控制，並透過呼叫 `Initiate Vault Lock` API 操作或透過 Amazon Glacier 主控台中的互動式 UI 啟動保存庫鎖定。如需有關格式化保存庫鎖定政策的資訊，請參閱 [Amazon Glacier 保存庫鎖定政策範例](https://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock-policy.html#vault-lock-policy-example-deny-delete-archive-age)。

1. 選擇**儲存變更**。

1. 在**記錄保存庫鎖定 ID** 對話方塊中，複製**鎖定 ID** 並將其儲存在安全的位置。
**重要**  
啟動保存庫鎖定政策後，您有 24 小時的時間驗證政策並完成鎖定程序。若要完成鎖定程序，您必須提供鎖定 ID。如果未在 24 小時內提供，鎖定 ID 就會過期，而且進行中的政策也會遭到刪除。

1. 將鎖定 ID 儲存在安全的地方後，選擇**關閉**。

1. 在接下來的 24 小時內測試保存庫鎖定政策。如果政策如預期運作，請選擇**完成保存庫鎖定政策**。

1. 在**完成保存庫鎖定**對話方塊中，選取該核取方塊以確認保存庫鎖定政策程序的完成是不可還原的。

1. 在文字方塊中輸入您提供的**鎖定 ID**。

1. 選擇**完成保存庫鎖定**。