

 **이 페이지는 볼트와 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는 데이터를 볼트에 저장하고 Amazon S3 및 Amazon S3 Glacier 스토리지 클래스와 구별되는 자체 API를 갖춘 독립 실행형 서비스입니다. 기존 데이터는 Amazon Glacier에서 무기한으로 안전하게 보관되며 액세스 가능합니다. 마이그레이션은 필요하지 않습니다. 저비용 장기 아카이브 스토리지의 경우는 [S3 버킷 기반 API, 전체 가용성, 저렴한 비용 및 서비스 통합을 통해 우수한 고객 경험을 제공하는 Amazon S3 Glacier 스토리지 클래스](https://aws.amazon.com/s3/storage-classes/glacier/)를 AWS 권장합니다. S3 APIs AWS 리전 AWS 향상된 기능을 원하는 경우 [Amazon Glacier 볼트에서 Amazon S3 Glacier 스토리지 클래스로 데이터를 전송하기 위한AWS 솔루션 지침](https://aws.amazon.com/solutions/guidance/data-transfer-from-amazon-s3-glacier-vaults-to-amazon-s3/)을 사용하여 Amazon S3 Glacier 스토리지 클래스로 마이그레이션하는 것이 좋습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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)를 사용하거나 코드를 작성해야 합니다. 콘솔은 아카이브 작업을 지원하지 않습니다. 예를 들어 사진, 동영상 및 기타 문서 같은 데이터를 업로드하려면 반드시 AWS CLI를 사용하거나, 요청 코드를 작성해야 하는데, 요청 코드는 REST API를 직접 사용하거나 AWS SDK를 사용해서 작성할 수 있습니다.  
AWS CLI를 설치하려면 [AWS Command Line Interface](https://aws.amazon.com/cli/) 섹션을 참조하세요. Amazon Glacier를 AWS CLI와 함께 사용하는 방법에 대한 자세한 내용은 [Amazon Glacier에 대한 AWS CLI 참조](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)를 참조하세요. AWS CLI를 사용하여 Amazon Glacier에 아카이브를 업로드하는 방법의 예는 [AWS Command Line Interface와 함께 Amazon Glacier 사용](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 계정은 AWS 리전당 최대 1,000개의 볼트를 생성할 수 있습니다. 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는 계정 내 원하는 AWS 리전에서 특정 볼트나 모든 볼트에 대해 이 정보를 검색할 수 있도록 API 직접 호출을 제공합니다. 자세한 내용은 [Amazon Glacier에서 볼트 메타데이터 검색](retrieving-vault-info.md) 섹션을 참조하세요.

### 볼트 인벤토리 다운로드
<a name="vault-operations-retrieving-inventory-quick-intro"></a>

*볼트 인벤토리*란 볼트에 저장된 아카이브 목록을 말합니다. 목록에 있는 각 아카이브에 대해 인벤토리는 아카이브 ID, 생성 날짜, 크기와 같은 아카이브 정보를 제공합니다. Amazon Glacier는 아카이브가 볼트에 처음 업데이트된 날짜부터 하루에 한 번씩 볼트 인벤토리를 업데이트합니다. 다운로드하기 위해서는 볼트 인벤토리가 있어야 합니다.

볼트 인벤토리 다운로드는 비동기식 작업입니다. 따라서 먼저 인벤토리 다운로드 작업을 시작해야 합니다. 작업 요청이 수신되면 Amazon Glacier는 인벤토리를 다운로드할 수 있도록 준비합니다. 작업이 완료되면 인벤토리 데이터를 다운로드할 수 있습니다.

작업이 비동기식으로 이루어지기 때문에 Amazon Simple Notification Service(SNS) 알림을 사용하여 작업이 완료되면 알 수 있습니다. 각 작업 요청마다 Amazon SNS 토픽을 지정하거나 특정 볼트 이벤트가 발생할 경우 알림 메시지를 전송하도록 볼트를 구성할 수 있습니다.

Amazon Glacier는 각 볼트마다 24시간을 주기로 인벤토리를 준비합니다. 마지막 인벤토리 이후 볼트에 대한 아카이브 추가 또는 삭제가 없는 경우에는 인벤토리 데이터가 업데이트되지 않습니다.

볼트 인벤토리 작업이 시작되면 Amazon Glacier가 마지막으로 작성된 인벤토리, 즉 실시간 데이터가 아닌 특정 시점 스냅샷을 반환합니다. 아카이브를 업로드할 때마다 볼트 인벤토리를 가져오는 것이 불필요하다고 생각할 수도 있습니다. 하지만 Amazon Glacier에 업로드하는 아카이브와 연결된 메타데이터를 포함하는 클라이언트 측에서 데이터베이스를 관리한다고 가정해 봅시다. 이 경우, 사용자는 볼트 인벤토리가 사용자의 데이터베이스 정보와 실제 볼트 인벤토리를 서로 조정하는 데 얼마나 유용한지 알게 될 것입니다.

볼트 인벤토리 가져오기에 대한 자세한 내용은 [Amazon Glacier에서 볼트 인벤토리 다운로드](vault-inventory.md) 섹션을 참조하세요.

### 볼트 알림 구성
<a name="vault-operations-configure-notifications-quick-intro"></a>

볼트 또는 볼트 인벤토리의 아카이브를 검색하는 등 Amazon Glacier에서 무언가를 검색하는 작업은 2단계로 구성됩니다. 먼저 작업을 시작합니다. 작업이 완료되면 작업 출력을 다운로드할 수 있습니다. 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\$1255자입니다.
+ 유효한 문자는 a\$1z, A\$1Z, 0\$19, ‘\$1’(밑줄), ‘-’(하이픈), ‘.’(마침표)입니다.

볼트 이름은 볼트를 생성하는 계정 및 AWS 리전에서 고유해야 합니다. 즉, 한 계정에서 서로 다른 AWS 리전에 동일한 이름의 볼트를 만들 수 있지만, 동일한 AWS 리전에서는 만들 수 없습니다.

**Topics**
+ [Amazon Glacier에서 AWS SDK for Java를 사용하여 볼트 생성](creating-vaults-sdk-java.md)
+ [를 사용하여 Amazon Glacier에서 볼트 생성 AWS SDK for .NET](creating-vaults-dotnet-sdk.md)
+ [Amazon Glacier에서 REST API를 사용하여 볼트 생성](creating-vaults-rest-api.md)
+ [Amazon Glacier 콘솔을 사용하여 볼트 생성](creating-vaults-console.md)
+ [Amazon Glacier에서 AWS Command Line Interface를 사용하여 볼트 생성](creating-vaults-cli.md)

# Amazon Glacier에서 AWS SDK for Java를 사용하여 볼트 생성
<a name="creating-vaults-sdk-java"></a>

로우레벨 API는 볼트를 생성 및 삭제하거나, 볼트 설명을 가져오거나, 특정 AWS 리전에서 생성된 볼트 목록을 가져오는 등 모든 볼트 작업에 사용할 수 있는 메서드를 제공합니다. 다음은 AWS SDK for Java를 사용하여 볼트를 생성하는 단계입니다.

 

1. `AmazonGlacierClient` 클래스(클라이언트)의 인스턴스를 만듭니다.

   볼트 생성을 원하는 AWS 리전을 지정합니다. 이 클라이언트를 사용하여 실행하는 모든 작업이 해당 AWS 리전에 적용됩니다.

1. `CreateVaultRequest` 클래스 인스턴스를 생성하여 요청 정보를 입력합니다.

   Amazon Glacier(Amazon Glacier)는 볼트 이름과 사용자의 계정 ID를 요구합니다. 계정 ID를 입력하지 않는 경우에는 요청 서명을 위해 입력하는 자격 증명과 연결되어 있는 계정 ID를 사용합니다. 자세한 내용은 [Amazon Glacier AWS SDK for Java 에서 사용](using-aws-sdk-for-java.md) 섹션을 참조하세요.

1. 요청 객체를 파라미터로 입력하여 `createVault` 메서드를 실행합니다.

   Amazon Glacier가 반환하는 응답은 `CreateVaultResult` 객체에서 사용할 수 있습니다.

다음은 위에서 설명한 단계를 나타내는 Java 코드 조각입니다. 이 조각을 실행하면 `us-west-2` 리전에 볼트가 생성됩니다. 여기에서 출력되는 `Location`은 계정 ID, AWS 리전 및 볼트 이름이 포함된 볼트의 상대적 URI입니다.

```
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 vault)](api-vault-put.md) 섹션을 참조하세요.

## 예제: AWS SDK for Java를 사용하여 볼트 생성
<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에서 볼트 생성 AWS SDK for .NET
<a name="creating-vaults-dotnet-sdk"></a>

Amazon SDK에서 .NET용으로 제공하는 [하이레벨 및 로우레벨 API](using-aws-sdk.md)는 모두 볼트를 생성하는 메서드를 제공합니다.

**Topics**
+ [의 상위 수준 API를 사용하여 볼트 생성 AWS SDK for .NET](#create-vault-dotnet-highlevel)
+ [의 하위 수준 API를 사용하여 볼트 생성 AWS SDK for .NET](#create-vault-dotnet-lowlevel)

## 의 상위 수준 API를 사용하여 볼트 생성 AWS SDK for .NET
<a name="create-vault-dotnet-highlevel"></a>

하이레벨 API의 `ArchiveTransferManager` 클래스는 AWS 리전에 볼트를 생성하는 데 사용할 수 있는 `CreateVault` 방법을 제공합니다.

### 예:의 상위 수준 API를 사용한 볼트 작업 AWS SDK for .NET
<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.ca.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를 사용하여 볼트 생성 AWS SDK for .NET
<a name="create-vault-dotnet-lowlevel"></a>

하위 수준 API는 볼트 생성 및 삭제, 볼트 설명 가져오기, 특정에서 생성된 볼트 목록 가져오기 등 모든 볼트 작업에 대한 메서드를 제공합니다 AWS 리전. 다음은 AWS SDK for .NET를 사용하여 볼트를 생성하는 단계입니다.

 

1. `AmazonGlacierClient` 클래스(클라이언트)의 인스턴스를 만듭니다.

   볼트를 AWS 리전 생성할를 지정해야 합니다. 이 클라이언트를 사용하여 실행하는 모든 작업이 해당 AWS 리전에 적용됩니다.

1. `CreateVaultRequest` 클래스 인스턴스를 생성하여 요청 정보를 입력합니다.

    Amazon Glacier(Amazon Glacier)는 볼트 이름과 사용자의 계정 ID를 요구합니다. 계정 ID를 입력하지 않는 경우에는 요청 서명을 위해 입력하는 자격 증명과 연결되어 있는 계정 ID로 간주합니다. 자세한 내용은 [Amazon Glacier와 함께 AWS SDK for .NET 사용](using-aws-sdk-for-dot-net.md) 단원을 참조하십시오.

1. 요청 객체를 파라미터로 입력하여 `CreateVault` 메서드를 실행합니다.

   Amazon Glacier가 반환하는 응답은 `CreateVaultResponse` 객체에서 사용할 수 있습니다.

### 예:의 하위 수준 API를 사용한 볼트 작업 AWS SDK for .NET
<a name="vault-operations-example-dotnet-lowlevel"></a>

다음은 앞선 단계를 설명하는 C\$1 예제입니다. 이 예시는 미국 서부(오레곤)에 볼트를 생성합니다. 또한 코드 예제는 볼트 정보를 검색 AWS 리전하고 동일한의 모든 볼트를 나열한 다음 생성된 볼트를 삭제합니다. `Location` 인쇄된는 계정 ID AWS 리전, 및 볼트 이름이 포함된 볼트의 상대적 URI입니다.

**참고**  
기본 REST API에 대한 자세한 내용은 [볼트 만들기(PUT vault)](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.ca.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);
    }
  }
}
```

# Amazon Glacier에서 REST API를 사용하여 볼트 생성
<a name="creating-vaults-rest-api"></a>

REST API를 사용하여 볼트를 생성하려면 [볼트 만들기(PUT vault)](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(AWS CLI)를 사용하여 Amazon Glacier(Amazon Glacier)에 볼트를 생성합니다.

**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 설정을 확인합니다. 이러한 명령은 명시적으로 자격 증명을 제공하지 않으므로 기본 프로파일의 자격 증명이 사용됩니다.
   + help 명령을 사용해 보십시오.

     ```
     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)는 특정 볼트 또는 계정의 특정 AWS 리전에 있는 모든 볼트에 대해이 정보를 검색할 수 있는 API 호출을 제공합니다.

볼트 목록을 검색하는 경우 Amazon Glacier가 볼트 이름의 ASCII 값을 기준으로 정렬된 목록을 반환합니다. 목록에 포함되는 볼트 수는 최대 1,000개입니다. 응답은 항상 확인하여 목록을 계속 이어가는 마커가 있는지 살펴야 합니다. 항목이 더 이상 없는 경우에는 marker 필드가 `null` 값을 갖습니다. 응답으로 반환되는 볼트 수는 옵션으로 제한할 수 있습니다. 응답으로 반환할 볼트가 더 있는 경우에는 결과에 페이지가 매겨집니다. 이후 다음 볼트를 가져오려면 요청을 추가로 전송해야 합니다.

**Topics**
+ [를 사용하여 Amazon Glacier에서 볼트 메타데이터 검색 AWS SDK for Java](retrieving-vault-info-sdk-java.md)
+ [를 사용하여 Amazon Glacier에서 볼트 메타데이터 검색 AWS SDK for .NET](retrieving-vault-info-sdk-dotnet.md)
+ [REST API를 사용하여 볼트 메타데이터 검색](listing-vaults-rest-api.md)
+ [AWS Command Line Interface를 사용하여 Amazon Glacier에서 볼트 메타데이터 검색](retrieving-vault-info-cli.md)

# 를 사용하여 Amazon Glacier에서 볼트 메타데이터 검색 AWS SDK for Java
<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)
+ [예제: Amazon SDK for Java를 사용하여 볼트 메타데이터 검색](#retrieving-vault-info-sdk-java-example)

## 볼트 메타데이터 검색
<a name="retrieve-vault-info-sdk-java-lowlevel-one-vault"></a>

특정 볼트 또는 특정 AWS 리전의 모든 볼트에 대한 메타데이터를 검색할 수 있습니다. 다음은 Amazon SDK for Java의 로우레벨 API를 사용해 특정 볼트용 볼트 메타데이터를 검색하는 단계입니다.

 

1. `AmazonGlacierClient` 클래스(클라이언트)의 인스턴스를 만듭니다.

   볼트가 있는 AWS 리전을 지정해야 합니다. 이 클라이언트를 사용하여 수행하는 모든 작업은 해당 AWS 리전에 적용됩니다.

1. `DescribeVaultRequest` 클래스 인스턴스를 생성하여 요청 정보를 입력합니다.

   Amazon Glacier(Amazon Glacier)는 볼트 이름과 사용자의 계정 ID를 요구합니다. 계정 ID를 입력하지 않는 경우에는 요청 서명을 위해 입력하는 자격 증명과 연결되어 있는 계정 ID로 간주합니다. 자세한 내용은 [Amazon Glacier AWS SDK for Java 에서 사용](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 vault)](api-vault-get.md) 섹션을 참조하세요.

## 리전에 속하는 모든 볼트의 메타데이터 검색
<a name="retrieve-vault-info-sdk-java-lowlevel-all-vaults"></a>

`listVaults` 메서드를 사용하여 특정 AWS 리전의 모든 볼트에 대한 메타데이터를 검색할 수도 있습니다.

다음은 `us-west-2` 리전에 속하는 볼트 목록을 가져오는 Java 코드 조각입니다. 요청에 따라 응답으로 반환되는 볼트 수는 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가 Amazon Glacier API의 설정에 따라 최대 10개까지 볼트를 반환합니다. 목록을 조회할 볼트가 더 있는 경우에는 응답 본문의 `marker` 필드에 새로운 요청과 함께 목록이 계속되는 지점에 볼트의 Amazon 리소스 이름(ARN)이 추가됩니다. 그렇지 않으면 `marker` 필드는 null 값을 갖습니다.

참고로 목록의 각 볼트마다 반환되는 정보는 특정 볼트에서 `describeVault` 메서드를 호출하여 가져오는 정보와 동일합니다.

 

**참고**  
`listVaults` 메서드는 기본 REST API를 호출합니다([볼트 목록 조회(GET vaults)](api-vaults-get.md) 참조).

## 예제: Amazon SDK for Java를 사용하여 볼트 메타데이터 검색
<a name="retrieving-vault-info-sdk-java-example"></a>

유효 코드 예제를 보려면 [예제: AWS SDK for Java를 사용하여 볼트 생성](creating-vaults-sdk-java.md#creating-vaults-sdk-java-example) 섹션을 참조하세요. Java 코드 예제는 볼트를 생성한 후 볼트 메타데이터를 가져옵니다.

# 를 사용하여 Amazon Glacier에서 볼트 메타데이터 검색 AWS SDK for .NET
<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를 사용하여 볼트 메타데이터 검색 AWS SDK for .NET](#creating-vaults-sdk-dotnet-example)

## 볼트 메타데이터 검색
<a name="retrieve-vault-info-sdk-dotnet-lowlevel-one-vault"></a>

특정 볼트 또는 특정 AWS 리전의 모든 볼트에 대한 메타데이터를 검색할 수 있습니다. 다음은 AWS SDK for .NET의 로우레벨 API를 사용해 특정 볼트의 메타데이터를 가져오는 단계입니다.

 

1. `AmazonGlacierClient` 클래스(클라이언트)의 인스턴스를 만듭니다.

   볼트가 있는 AWS 리전을 지정해야 합니다. 이 클라이언트를 사용하여 수행하는 모든 작업은 해당 AWS 리전에 적용됩니다.

1. `DescribeVaultRequest` 클래스 인스턴스를 생성하여 요청 정보를 입력합니다.

   Amazon Glacier(Amazon Glacier)는 볼트 이름과 사용자의 계정 ID를 요구합니다. 계정 ID를 입력하지 않는 경우에는 요청 서명을 위해 입력하는 자격 증명과 연결되어 있는 계정 ID로 간주합니다. 자세한 내용은 [Amazon Glacier와 함께 AWS SDK for .NET 사용](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 vault)](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가 Amazon Glacier API의 설정에 따라 최대 10개까지 볼트를 반환합니다.

참고로 목록의 각 볼트마다 반환되는 정보는 특정 볼트에서 `DescribeVault` 메서드를 호출하여 가져오는 정보와 동일합니다.

 

**참고**  
`ListVaults` 메서드는 기본 REST API를 호출합니다([볼트 목록 조회(GET vaults)](api-vaults-get.md) 참조).

## 예:의 하위 수준 API를 사용하여 볼트 메타데이터 검색 AWS SDK for .NET
<a name="creating-vaults-sdk-dotnet-example"></a>

유효 코드 예제를 보려면 [예:의 하위 수준 API를 사용한 볼트 작업 AWS SDK for .NET](creating-vaults-dotnet-sdk.md#vault-operations-example-dotnet-lowlevel) 섹션을 참조하세요. C\$1 코드 예제는 볼트를 생성한 후 볼트 메타데이터를 가져옵니다.

# REST API를 사용하여 볼트 메타데이터 검색
<a name="listing-vaults-rest-api"></a>

REST API를 사용하여 볼트 목록을 조회하려면 [볼트 목록 조회(GET vaults)](api-vaults-get.md) 섹션을 참조하세요. 하나의 볼트에 대해 설명하려면 [볼트 설명(GET vault)](api-vault-get.md) 섹션을 참조하세요.

# AWS Command Line Interface를 사용하여 Amazon Glacier에서 볼트 메타데이터 검색
<a name="retrieving-vault-info-cli"></a>

이 예시에서는 AWS Command Line Interface(AWS CLI)를 사용하여 Amazon Glacier(Amazon Glacier)에서 볼트 정보 및 메타데이터를 검색하는 방법을 보여줍니다.

**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 설정을 확인합니다. 이러한 명령은 명시적으로 자격 증명을 제공하지 않으므로 기본 프로파일의 자격 증명이 사용됩니다.
   + help 명령을 사용해 보십시오.

     ```
     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에서 볼트 인벤토리를 가져오려면 다음 2단계 프로세스를 따릅니다.

 

1. [작업 시작(POST jobs)](api-initiate-job-post.md) 작업을 사용하여 인벤토리 가져오기 작업을 시작합니다.
**중요**  
데이터 가져오기 정책은 `PolicyEnforcedException` 예외에 따라 가져오기 작업 시작 요청이 오류로 중단되는 원인이 될 수 있습니다. 데이터 가져오기 정책에 대한 자세한 내용은 [Amazon Glacier 데이터 검색 정책](data-retrieval-policy.md) 섹션을 참조하세요. `PolicyEnforcedException` 예외에 대한 자세한 내용은 [오류 응답](api-error-responses.md) 섹션을 참조하세요.

1. 작업이 완료된 후 [작업 출력 가져오기(GET output)](api-job-output-get.md) 작업을 사용하여 바이트를 다운로드합니다.

예를 들어 아카이브 또는 볼트 인벤토리를 가져오려면 가져오기 작업을 먼저 시작해야 합니다. 이때 작업 요청은 비동기식으로 실행됩니다. 검색 작업을 시작하면 Amazon Glacier가 작업을 생성한 후 응답으로 작업 ID를 반환합니다. Amazon Glacier가 가져오기 작업을 마치면 사용자는 작업 출력, 아카이브 바이트 또는 볼트 인벤토리 데이터를 다운로드할 수 있습니다.

작업 출력을 가져오려면 먼저 작업을 완료해야 합니다. 작업 상태는 다음 옵션을 사용해 확인할 수 있습니다.

 
+ **작업 완료 알림 대기**: 작업이 완료되면 Amazon Glacier가 알림 메시지를 게시할 수 있도록 Amazon Simple Notification Service(Amazon SNS) 토픽을 지정할 수 있습니다. 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에서 볼트 인벤토리 다운로드 AWS SDK for Java](retrieving-vault-inventory-java.md)
+ [를 사용하여 Amazon Glacier에서 볼트 인벤토리 다운로드 AWS SDK for .NET](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는 마지막으로 생성한 인벤토리, 즉 실시간 데이터가 아닌 특정 시점 스냅샷을 반환합니다. Amazon Glacier가 첫 번째 볼트 인벤토리를 생성한 후 해당 인벤토리를 가져올 수 있을 때까지 일반적으로 반나절에서 하루가 걸립니다.

 아카이브를 업로드할 때마다 볼트 인벤토리를 가져오는 것이 불필요하다고 생각할 수도 있습니다. 그러나 Amazon Glacier에 업로드하는 아카이브에 대한 메타데이터를 연결하여 클라이언트 측에서 데이터베이스를 관리한다고 가정해보겠습니다. 볼트 인벤토리가 필요에 따라 데이터베이스 정보와 실제 볼트 인벤토리를 서로 조정하는 데 얼마나 유용한지 알게 될 것입니다. 아카이브 생성 날짜를 기준으로 필터링하거나 할당량을 설정하여 가져오는 인벤토리 항목 수를 제한할 수 있습니다. 인벤토리 가져오기 제한에 대한 자세한 내용은 [범위가 지정된 인벤토리 가져오기](api-initiate-job-post.md#api-initiate-job-post-vault-inventory-list-filtering) 섹션을 참조하세요.

인벤토리는 쉼표로 분리된 값(CSV) 또는 JSON의 두 가지 형식으로 반환될 수 있습니다. 이 형식은 인벤토리 작업을 시작할 때 옵션으로 지정할 수 있습니다. 기본 형식은 JSON입니다. 인벤토리 작업 출력에서 반환되는 데이터 필드에 대한 자세한 내용은 **Get Job Output API의 [응답 본문](api-job-output-get.md#api-job-output-get-responses-elements) 섹션을 참조하세요.

# 를 사용하여 Amazon Glacier에서 볼트 인벤토리 다운로드 AWS SDK for Java
<a name="retrieving-vault-inventory-java"></a>

다음은 AWS SDK for Java의 로우레벨 API를 사용해 볼트 인벤토리를 가져오는 단계입니다. 하이레벨 API는 볼트 인벤토리를 가져오도록 지원하지 않습니다.

 

1. `AmazonGlacierClient` 클래스(클라이언트)의 인스턴스를 만듭니다.

    볼트가 있는 AWS 리전을 지정해야 합니다. 이 클라이언트를 사용하여 수행하는 모든 작업은 해당 AWS 리전에 적용됩니다.

1.  `initiateJob` 메서드를 실행하여 인벤토리 가져오기 작업을 시작합니다.

   `InitiateJobRequest` 객체에 작업 정보를 제공하여 `initiateJob`을 실행합니다.
**참고**  
볼트의 인벤토리가 완료되지 않은 경우 오류가 반환된다는 점에 유의하세요. 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 Glacier가 메시지를 게시할 수 있도록 Amazon SNS를 사용합니다.

    

1. `getJobOutput` 메서드를 실행하여 작업 출력(볼트 인벤토리 데이터)을 다운로드합니다.

   `GetJobOutputRequest` 클래스 인스턴스를 생성하여 계정 ID, 작업 ID 및 볼트 이름을 입력합니다. 계정 ID를 입력하지 않는 경우에는 요청 서명을 위해 입력하는 자격 증명과 연결되어 있는 계정 ID를 사용합니다. 자세한 내용은 [Amazon Glacier AWS SDK for Java 에서 사용](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) 섹션을 참조하세요.

## 예: Amazon SDK for Java를 사용하여 볼트 인벤토리 검색
<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 Glacier가 작업 완료 후 알림 메시지를 해당 토픽에 게시할 수 있도록 생성된 Amazon SNS 토픽이 지정됩니다.
+ 작업 ID가 포함된 메시지가 있는지 Amazon SQS 대기열을 확인합니다.

  메시지가 있으면 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에서 볼트 인벤토리 다운로드 AWS SDK for .NET
<a name="retrieving-vault-inventory-sdk-dotnet"></a>

다음은 AWS SDK for .NET의 로우레벨 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 Glacier가 메시지를 게시할 수 있도록 Amazon SNS를 사용합니다.

   `DescribeJob` 메서드를 직접 호출하여 Amazon Glacier를 폴링함으로써 작업 완료 상태를 확인하는 방법도 있습니다. 그러나 Amazon SNS 토픽의 알림을 사용해 식별하는 방법을 권장합니다.

1. `GetJobOutput` 메서드를 실행하여 작업 출력(볼트 인벤토리 데이터)을 다운로드합니다.

   `GetJobOutputRequest` 클래스 인스턴스를 생성하여 계정 ID, 볼트 이름 및 작업 ID 정보를 입력합니다. 계정 ID를 입력하지 않는 경우에는 요청 서명을 위해 입력하는 자격 증명과 연결되어 있는 계정 ID로 간주합니다. 자세한 내용은 [Amazon Glacier와 함께 AWS SDK for .NET 사용](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를 사용하여 볼트 인벤토리 검색 AWS SDK for .NET
<a name="creating-vaults-sdk-dotnet-example-inventory"></a>

다음은 볼트를 지정하여 볼트 인벤토리를 가져오는 C\$1 코드 예제입니다.

이 예에서는 다음과 같은 작업을 수행합니다.

 
+ Amazon SNS 토픽을 설정합니다.

  Amazon Glacier는 작업 완료 후 해당 토픽에 알림을 전송합니다.
+ Amazon SQS 대기열을 생성합니다.

  아래 예시는 Amazon SNS 토픽이 메시지를 게시할 수 있도록 여기에서 해당 대기열에 정책을 연결합니다.
+ 지정된 아카이브의 다운로드 작업을 시작합니다.

  아래 예시는 Amazon Glacier가 작업 완료 후 메시지를 전송할 수 있도록 작업 요청에서 Amazon SNS 토픽을 지정합니다.
+ 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.ca.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를 사용하여 볼트 인벤토리를 다운로드하려면**

볼트 인벤토리 다운로드는 2단계 프로세스입니다.

1. `inventory-retrieval` 유형의 작업을 시작합니다. 자세한 내용은 [작업 시작(POST jobs)](api-initiate-job-post.md) 단원을 참조하십시오.

1. 작업이 완료되면 인벤토리 데이터를 다운로드합니다. 자세한 내용은 [작업 출력 가져오기(GET output)](api-job-output-get.md) 단원을 참조하십시오.

# 를 사용하여 Amazon Glacier에서 볼트 인벤토리 다운로드 AWS Command Line Interface
<a name="retrieving-vault-inventory-cli"></a>

다음 단계에 따라 AWS Command Line Interface (AWS CLI)를 사용하여 Amazon Glacier(Amazon Glacier)의 볼트 인벤토리를 다운로드합니다.

**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 설정을 확인합니다. 이러한 명령은 명시적으로 자격 증명을 제공하지 않으므로 기본 프로파일의 자격 증명이 사용됩니다.
   + help 명령을 사용해 보십시오.

     ```
     aws help
     ```
   + 구성된 계정의 Amazon Glacier 볼트 목록을 가져오려면 `list-vaults` 명령을 사용합니다. *123456789012*을 AWS 계정 ID로 바꿉니다.

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 에 대한 현재 구성 데이터를 보려면 `aws configure list` 명령을 AWS CLI사용합니다.

     ```
     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.  작업이 완료될 때까지 기다립니다.

   작업 출력을 다운로드할 수 있을 때까지 기다려야 합니다. 작업 ID는 Amazon Glacier가 작업을 완료한 후 최소 24시간 동안 만료되지 않습니다. 볼트에서 알림 구성을 설정하거나 작업을 시작할 때 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에서 무언가를 검색하는 작업은 2단계로 구성됩니다.

1. 검색 작업을 시작합니다.

1. 작업이 완료되면 작업 출력을 다운로드합니다.

작업 완료 시 메시지가 Amazon Simple Notification Service(Amazon SNS)의 토픽에 전송되도록 볼트의 알림 구성을 설정할 수 있습니다.

**Topics**
+ [Amazon Glacier의 볼트 알림 구성: 일반적인 개념](#configuring-notifications.general)
+ [를 사용하여 Amazon Glacier에서 볼트 알림 구성 AWS SDK for Java](configuring-notifications-sdk-java.md)
+ [를 사용하여 Amazon Glacier에서 볼트 알림 구성 AWS SDK for .NET](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는 특히 볼트의 알림 구성에 추가할 수 있는 작업 완료(`ArchiveRetrievalCompleted`, `InventoryRetrievalCompleted`)와 관련된 이벤트를 정의합니다. 특정 작업이 완료되면 Amazon Glacier가 알림 메시지를 SNS 토픽에 게시합니다.

 알림 구성은 다음 예제와 같이 JSON 문서입니다.

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

단, 각 볼트에 대해 1개의 Amazon SNS 토픽만 구성할 수 있습니다.

 

**참고**  
알림 구성을 볼트에 추가하면 알림 구성에서 지정한 이벤트가 발생할 때마다 Amazon Glacier가 알림 메시지를 전송합니다. 또한 작업 시작을 요청할 때마다 옵션으로 Amazon SNS 토픽을 지정할 수 있습니다. 볼트에서 알림 구성을 설정하고, 작업 시작을 요청할 때 Amazon SNS 토픽까지 지정하는 경우에는 Amazon Glacier는 두 알림 메시지를 모두 전송합니다.

Amazon Glacier가 전송하는 작업 완료 메시지에는 작업 유형(`InventoryRetrieval`, `ArchiveRetrieval`), 작업 완료 상태, SNS 토픽 이름, 작업 상태 코드, 볼트 ARN이 포함됩니다. 다음은 `InventoryRetrieval` 작업 완료 후 Amazon Glacier가 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에서 볼트 알림 구성 AWS SDK for Java
<a name="configuring-notifications-sdk-java"></a>

다음은 AWS SDK for Java의 로우레벨 API를 사용해 볼트 알림을 구성하는 단계입니다.

 

1. `AmazonGlacierClient` 클래스(클라이언트)의 인스턴스를 만듭니다.

   볼트가 있는 AWS 리전을 지정해야 합니다. 이 클라이언트를 사용하여 수행하는 모든 작업은 해당 AWS 리전에 적용됩니다.

1. `SetVaultNotificationsRequest` 클래스 인스턴스를 생성하여 알림 구성 정보를 입력합니다.

   볼트 이름과 알림 구성 정보, 그리고 계정 ID를 입력해야 합니다. 알림 구성을 지정할 때 기존 Amazon SNS 토픽의 Amazon 리소스 이름(ARN)과 알림 메시지를 원하는 한 개 이상의 이벤트를 입력합니다. 지원되는 이벤트 목록은 [볼트 알림 구성 설정(PUT notification-configuration)](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) 섹션을 참조하세요.

## 예:를 사용하여 볼트에서 알림 구성 설정 AWS SDK for Java
<a name="configuring-notifications-sdk-java-example"></a>

다음은 볼트의 알림 구성을 설정했다가 삭제한 후 다시 복원하는 Java 코드 예제입니다. 다음 예제의 실행을 위한 단계별 지침은 [Amazon Glacier AWS SDK for Java 에서 사용](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에서 볼트 알림 구성 AWS SDK for .NET
<a name="configuring-notifications-sdk-dotnet"></a>

다음은 AWS SDK for .NET의 로우레벨 API를 사용해 볼트 알림을 구성하는 단계입니다.

 

1. `AmazonGlacierClient` 클래스(클라이언트)의 인스턴스를 만듭니다.

   볼트가 있는 AWS 리전을 지정해야 합니다. 이 클라이언트를 사용하여 수행하는 모든 작업은 해당 AWS 리전에 적용됩니다.

1. `SetVaultNotificationsRequest` 클래스 인스턴스를 생성하여 알림 구성 정보를 입력합니다.

   볼트 이름과 알림 구성 정보, 그리고 계정 ID를 입력해야 합니다. 계정 ID를 입력하지 않는 경우에는 요청 서명을 위해 입력하는 자격 증명과 연결되어 있는 계정 ID로 간주합니다. 자세한 내용은 [Amazon Glacier와 함께 AWS SDK for .NET 사용](using-aws-sdk-for-dot-net.md) 단원을 참조하십시오.

   알림 구성을 지정할 때, 기존 Amazon SNS 토픽의 Amazon 리소스 이름(ARN)과 알림 메시지 수신을 원하는 한 개 이상의 이벤트를 입력합니다. 지원되는 이벤트 목록은 [볼트 알림 구성 설정(PUT notification-configuration)](api-vault-notifications-put.md) 섹션을 참조하세요.

1. 요청 객체를 파라미터로 입력하여 `SetVaultNotifications` 메서드를 실행합니다.

1. 볼트 알림 구성을 설정한 후에는 `GetVaultNotifications` 메서드를 호출하여 구성 정보를 가져오거나, 혹은 클라이언트에서 제공하는 `DeleteVaultNotifications` 메서드를 호출하여 제거할 수 있습니다.

## 예:를 사용하여 볼트에서 알림 구성 설정 AWS SDK for .NET
<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.ca.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 notification-configuration)](api-vault-notifications-put.md) 섹션을 참조하세요. 그 밖에 볼트 알림을 가져오거나([볼트 알림 가져오기(GET notification-configuration)](api-vault-notifications-get.md)), 혹은 볼트 알림을 삭제할 수도 있습니다([볼트 알림 삭제(DELETE notification-configuration)](api-vault-notifications-delete.md)).

# Amazon Glacier 콘솔을 사용하여 볼트 알림 구성
<a name="configuring-notifications-console"></a>

이 섹션에서는 Amazon Glacier 콘솔을 사용하여 볼트 알림을 구성하는 방법을 설명합니다. 알림을 구성할 때, Amazon Simple Notification Service(Amazon SNS) 토픽에 알림을 보내는 작업 완료 이벤트를 지정합니다. 볼트 알림을 구성하는 것 외에도 작업을 시작할 때 알림 메시지를 게시할 토픽을 지정할 수도 있습니다. 특정 이벤트에 대해 알림 메시지를 게시하도록 볼트를 구성하고, 동시에 작업 시작 요청에서 알림 메시지를 구성할 경우에는 두 알림 메시지가 모두 전송됩니다.

**볼트 알림을 구성하려면**

1. 에 로그인 AWS Management Console 하고 [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(SNS) 옵션 중 하나를 선택한 다음 해당 단계를 따르세요.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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(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 설정을 확인합니다. 이러한 명령은 명시적으로 자격 증명을 제공하지 않으므로 기본 프로파일의 자격 증명이 사용됩니다.
   + help 명령을 사용해 보십시오.

     ```
     aws help
     ```
   + 구성된 계정의 Amazon Glacier 볼트 목록을 가져오려면 `list-vaults` 명령을 사용합니다. *123456789012*을 AWS 계정 ID로 바꿉니다.

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 에 대한 현재 구성 데이터를 보려면 `aws configure list` 명령을 AWS CLI사용합니다.

     ```
     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 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**
+ [AWS SDK for Java를 사용하여 Amazon Glacier에서 볼트 삭제](deleting-vaults-sdk-java.md)
+ [AWS SDK for .NET를 사용하여 Amazon Glacier에서 볼트 삭제](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)

# AWS SDK for Java를 사용하여 Amazon Glacier에서 볼트 삭제
<a name="deleting-vaults-sdk-java"></a>

다음은 AWS SDK for Java의 로우레벨 API를 사용해 볼트를 삭제하는 단계입니다.

 

1. `AmazonGlacierClient` 클래스(클라이언트)의 인스턴스를 만듭니다.

   볼트를 삭제할 AWS 리전을 지정해야 합니다. 이 클라이언트를 사용하여 실행하는 모든 작업이 해당 AWS 리전에 적용됩니다.

1. `DeleteVaultRequest` 클래스 인스턴스를 생성하여 요청 정보를 입력합니다.

   볼트 이름과 계정 ID를 입력해야 합니다. 계정 ID를 입력하지 않는 경우에는 요청 서명을 위해 입력하는 자격 증명과 연결되어 있는 계정 ID로 간주합니다. 자세한 내용은 [Amazon Glacier AWS SDK for Java 에서 사용](using-aws-sdk-for-java.md) 섹션을 참조하세요.

1. 요청 객체를 파라미터로 입력하여 `deleteVault` 메서드를 실행합니다.

   Amazon Glacier(Amazon Glacier)는 볼트가 비어 있는 경우에만 해당 볼트를 삭제합니다. 자세한 내용은 [볼트 삭제(DELETE vault)](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 vault)](api-vault-delete.md) 섹션을 참조하세요.

## 예제: AWS SDK for Java를 사용하여 볼트 삭제
<a name="deleting-vaults-sdk-java-example"></a>

유효 코드 예제를 보려면 [예제: AWS SDK for Java를 사용하여 볼트 생성](creating-vaults-sdk-java.md#creating-vaults-sdk-java-example) 섹션을 참조하세요. Java 코드 예제는 볼트 생성 및 삭제를 포함하여 기본적인 볼트 작업을 나타냅니다.

# AWS SDK for .NET를 사용하여 Amazon Glacier에서 볼트 삭제
<a name="deleting-vaults-sdk-dotnet"></a>

Amazon SDK에서 제공하는 .NET용 [하이레벨과 로우레벨 API](using-aws-sdk.md) 모두는 볼트를 삭제하는 방법을 제공합니다.

**Topics**
+ [AWS SDK for .NET의 하이레벨 API를 사용하여 볼트 삭제](#deleting-vault-sdk-dotnet-high-level)
+ [AWS SDK for .NET의 로우레벨 API를 사용하여 볼트 삭제](#deleting-vault-sdk-dotnet-low-level)

## AWS SDK for .NET의 하이레벨 API를 사용하여 볼트 삭제
<a name="deleting-vault-sdk-dotnet-high-level"></a>

하이레벨 API의 `ArchiveTransferManager` 클래스는 볼트를 삭제하는 데 사용할 수 있는 `DeleteVault` 메서드를 제공합니다.

### 예제: AWS SDK for .NET의 하이레벨 API를 사용하여 볼트 삭제
<a name="deleting-vaults-sdk-dotnet-high-level-example"></a>

유효 코드 예제를 보려면 [예:의 상위 수준 API를 사용한 볼트 작업 AWS SDK for .NET](creating-vaults-dotnet-sdk.md#vault-operations-example-dotnet-highlevel) 섹션을 참조하세요. C\$1 코드 예제는 볼트 생성 및 삭제를 포함하여 기본적인 볼트 작업을 나타냅니다.

## AWS SDK for .NET의 로우레벨 API를 사용하여 볼트 삭제
<a name="deleting-vault-sdk-dotnet-low-level"></a>

다음은 AWS SDK for .NET를 사용하여 볼트를 삭제하는 단계입니다.

 

1. `AmazonGlacierClient` 클래스(클라이언트)의 인스턴스를 만듭니다.

   볼트를 삭제할 AWS 리전을 지정해야 합니다. 이 클라이언트를 사용하여 실행하는 모든 작업이 해당 AWS 리전에 적용됩니다.

1. `DeleteVaultRequest` 클래스 인스턴스를 생성하여 요청 정보를 입력합니다.

   볼트 이름과 계정 ID를 입력해야 합니다. 계정 ID를 입력하지 않는 경우에는 요청 서명을 위해 입력하는 자격 증명과 연결되어 있는 계정 ID로 간주합니다. 자세한 내용은 [Amazon Glacier와 함께 AWS SDK for .NET 사용](using-aws-sdk-for-dot-net.md) 섹션을 참조하세요.

1. 요청 객체를 파라미터로 입력하여 `DeleteVault` 메서드를 실행합니다.

   Amazon Glacier(Amazon Glacier)는 볼트가 비어 있는 경우에만 해당 볼트를 삭제합니다. 자세한 내용은 [볼트 삭제(DELETE vault)](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 vault)](api-vault-delete.md) 섹션을 참조하세요.

### 예제: AWS SDK for .NET의 로우레벨 API를 사용하여 볼트 삭제
<a name="creating-vaults-sdk-dotnet-low-level-example"></a>

유효 코드 예제를 보려면 [예:의 하위 수준 API를 사용한 볼트 작업 AWS SDK for .NET](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 vault)](api-vault-delete.md) 섹션을 참조하세요.

# Amazon Glacier 콘솔을 사용하여 빈 볼트 삭제
<a name="deleting-vaults-console"></a>

**참고**  
볼트를 삭제하기 전에 먼저 기존 아카이브와 볼트를 모두 삭제해야 합니다. REST API, , 또는 AWS Command Line Interface ()를 사용하여 아카이브 삭제 요청을 하는 코드를 작성하여이 작업을 수행할 수 AWS SDK for Java AWS SDK for .NET있습니다AWS CLI. 아카이브 삭제에 대한 자세한 내용은 [5단계: Amazon Glacier 볼트에서 아카이브 삭제](getting-started-delete-archive.md) 섹션을 참조하세요.

볼트를 비운 후 다음 단계에 따라 삭제할 수 있습니다.

**Amazon Glacier 콘솔을 사용하여 빈 볼트 삭제**

1. 에 로그인 AWS Management Console 하고 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 (AWS CLI)를 사용하여 Amazon Glacier(Amazon Glacier)에서 빈 볼트 및 비어 있지 않은 볼트를 삭제할 수 있습니다.

**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 설정을 확인합니다. 이러한 명령은 명시적으로 자격 증명을 제공하지 않으므로 기본 프로파일의 자격 증명이 사용됩니다.
   + help 명령을 사용해 보십시오.

     ```
     aws help
     ```
   + 구성된 계정의 Amazon Glacier 볼트 목록을 가져오려면 `list-vaults` 명령을 사용합니다. *123456789012*을 AWS 계정 ID로 바꿉니다.

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 에 대한 현재 구성 데이터를 보려면 `aws configure list` 명령을 AWS CLI사용합니다.

     ```
     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 검색, 각 아카이브 삭제, 볼트 삭제의 3단계로 진행됩니다.

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 Management Console에 로그인하고 [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 Management Console에 로그인하고 [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 Management Console에 로그인하고 [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 Management Console에 로그인하고 [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)를 사용해 태그를 추가, 나열 또는 제거할 수 있습니다.

각 태그는 키와 값으로 구성됩니다. 볼트 1개에 추가할 수 있는 태그는 최대 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 tags add)](api-AddTagsToVault.md)   
지정된 볼트에 대한 태그를 추가 또는 업데이트합니다.

 [볼트의 태그 목록 조회(GET tags)](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 볼트 잠금을 사용하여 각 Amazon Glacier 볼트마다 볼트 잠금 정책을 사용해 규정 준수 제어 항목을 쉽게 배포하고 적용할 수 있습니다. 볼트 잠금 정책에서는 "write once read many"(WORM) 같은 제어 항목을 지정하여 앞으로 편집하지 못하도록 정책을 잠글 수 있습니다.

**중요**  
볼트 잠금 정책을 잠근 후에는 정책을 더 이상 변경하거나 삭제할 수 없습니다.

Amazon Glacier는 볼트 잠금 정책에 설정된 제어 항목을 적용하여 규정 준수 목표를 달성합니다. 예를 들어 볼트 잠금 정책을 사용하여 데이터 보존을 적용할 수 있습니다. AWS Identity and Access Management (IAM) 정책 언어를 사용하여 볼트 잠금 정책에 다양한 규정 준수 제어를 배포할 수 있습니다. 볼트 잠금 정책에 대한 자세한 내용은 [볼트 잠금 정책](vault-lock-policy.md) 섹션을 참조하세요.

볼트 잠금 정책은 볼트 액세스 정책과 다릅니다. 두 정책 모두 볼트에 대한 액세스 제어 항목을 관리하지만 볼트 잠금 정책은 향후 변경할 수 없도록 볼트를 잠근다는 점에서 규정 준수 제어 항목을 강력하게 적용할 수 있습니다. 볼트 잠금 정책을 사용하여 일반적으로 데이터 액세스에 대한 엄격한 제어가 필요한 규제 및 규정 준수 제어 항목을 배포할 수 있습니다.

**중요**  
먼저 볼트를 만들고 볼트 잠금 정책을 완성한 다음 아카이브를 볼트에 업로드하여 정책을 적용하는 것을 권장합니다.

이와 대조적으로 볼트 액세스 정책은 규정 준수와 관계 없지만 일시적으로 액세스 제어를 구현하는 데 사용되기 때문에 자주 변경될 수 있습니다. 볼트 잠금 정책과 볼트 액세스 정책은 함께 사용할 수 있습니다. 예를 들어 볼트 잠금 정책(삭제 거부)에서 시간에 따른 데이터 보존 규칙을 구현한 후 지정된 타사 또는 비즈니스 파트너에게 (읽기 허용) 볼트 액세스 정책에서 읽기 권한을 부여할 수 있습니다.

볼트 잠금은 다음과 같이 2단계로 구성됩니다.

1. 볼트 잠금 정책을 볼트에 연결하여 잠금을 시작합니다. 그러면 잠금 상태가 진행 중으로 설정되고 잠금 ID를 반환합니다. 정책이 진행 중 상태일 때는 잠금 ID가 만료되기 전 24시간 동안 볼트 잠금 정책이 유효합니다. 볼트가 진행 중 상태를 벗어나지 않도록 하려면 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 lock-policy)](api-InitiateVaultLock.md)을 직접 호출해야 합니다. `Initiate Vault Lock` 작업은 정책을 사용자의 볼트에 연결하고, 볼트 잠금을 진행 중 상태로 전환하고, 고유한 잠금 ID를 반환합니다. 볼트 잠금 상태가 진행 중 상태이면, `Initiate Vault Lock` 직접 호출에서 반환된 잠금 ID와 함께 [볼트 잠금 완료(POST lockId)](api-CompleteVaultLock.md)을 직접 호출하여 이후 24시간 이내에 잠금을 완료합니다.

**중요**  
먼저 볼트를 만들고 볼트 잠금 정책을 완성한 다음 아카이브를 볼트에 업로드하여 정책이 적용되도록 하는 것을 권장합니다.
일단 볼트 잠금 정책이 잠기면 더 이상 변경하거나 삭제할 수 없습니다.

진행 중 상태로 전환된 이후 24시간 이내에 볼트 잠금 프로세스를 마치지 않으면 볼트의 진행 중 상태가 자동으로 종료되고 볼트 잠금 정책은 제거됩니다. `Initiate Vault Lock`을 다시 직접 호출하여 새로운 볼트 잠금 정책을 설치하고 진행 중 상태로 전환할 수 있습니다.

진행 중 상태에서는 볼트를 잠그기 전에 볼트 잠금 정책을 테스트할 수 있습니다. 볼트 잠금 정책은 [볼트 잠금 중단(DELETE lock-policy)](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 lock-policy)](api-AbortVaultLock.md)
+ [볼트 잠금 완료(POST lockId)](api-CompleteVaultLock.md)
+ [볼트 잠금 가져오기(GET lock-policy)](api-GetVaultLock.md)
+ [볼트 잠금 시작(POST lock-policy)](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 설정을 확인합니다. 이러한 명령은 명시적으로 자격 증명을 제공하지 않으므로 기본 프로파일의 자격 증명이 사용됩니다.
   + help 명령을 사용해 보십시오.

     ```
     aws help
     ```
   + 구성된 계정의 Amazon Glacier 볼트 목록을 가져오려면 `list-vaults` 명령을 사용합니다. *123456789012*을 AWS 계정 ID로 바꿉니다.

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + 에 대한 현재 구성 데이터를 보려면 `aws configure list` 명령을 AWS CLI사용합니다.

     ```
     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 lock-policy)](api-AbortVaultLock.md)
+ [볼트 잠금 완료(POST lockId)](api-CompleteVaultLock.md)
+ [볼트 잠금 가져오기(GET lock-policy)](api-GetVaultLock.md)
+ [볼트 잠금 시작(POST lock-policy)](api-InitiateVaultLock.md)

# Amazon Glacier 콘솔을 사용하여 볼트 잠금
<a name="vault-lock-walkthrough"></a>

Amazon Glacier 볼트 잠금을 사용하여 각 Amazon Glacier 볼트마다 볼트 잠금 정책을 사용해 규정 준수 제어 항목을 쉽게 배포하고 적용할 수 있습니다. Amazon Glacier 볼트 잠금에 대한 자세한 내용은 [볼트 잠금 정책으로 Amazon Glacier 액세스 제어](https://docs.aws.amazon.com/amazonglacier/latest/dev/vault-lock-policy.html)를 참조하세요.

**중요**  
먼저 볼트를 만들고 볼트 잠금 정책을 완성한 다음 아카이브를 볼트에 업로드하여 정책이 적용되도록 하는 것을 권장합니다.
볼트 잠금 정책이 잠기고 나면 더 이상 변경하거나 삭제할 수 없습니다.

**Amazon Glacier 콘솔을 사용하여 사용자의 볼트에서 볼트 잠금 정책 시작**

볼트 잠금 정책을 사용자의 볼트에 연결하여 잠금을 시작합니다. 그러면 잠금 상태가 진행 중으로 설정되고 잠금 ID를 반환합니다. 정책이 진행 중 상태일 때는 잠금 ID가 만료될 때까지 24시간 동안 볼트 잠금 정책이 유효합니다.

1. 에 로그인 AWS Management Console 하고 [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를 제공하지 않으면 잠금 ID가 만료되고 진행 중인 정책이 삭제됩니다.

1. 잠금 ID를 안전한 곳에 저장한 후 **닫기**를 선택합니다.

1. 24시간 이내에 볼트 잠금 정책을 테스트합니다. 정책이 의도대로 작동한다면 **볼트 잠금 정책 완료**를 선택하세요.

1. **볼트 잠금 완료** 대화 상자에서 확인란을 선택하여 볼트 잠금 정책 프로세스 완료는 되돌릴 수 없음을 확인합니다.

1. 제공받은 **잠금 ID**를 텍스트 상자에 입력합니다.

1. **볼트 잠금 완료**를 선택합니다.