

# Como usar o Amazon Glacier na AWS CLI
<a name="cli-services-glacier"></a>


| Uma introdução ao Amazon Glacier | 
| --- | 
|    | 

Este tópico mostra exemplos de comandos da AWS CLI que executam tarefas comuns para o Amazon Glacier. Os exemplos demonstram como usar a AWS CLI para fazer upload de um arquivo grande no Amazon Glacier dividindo-o em partes menores e fazendo upload por meio da linha de comandos.

Você pode acessar os recursos do Amazon Glacier usando a AWS Command Line Interface (AWS CLI). Para listar os comandos da AWS CLI para o Amazon Glacier, use o comando a seguir.

```
aws glacier help
```

**nota**  
Para obter referência de comandos e exemplos adicionais, consulte `[aws glacier](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)` na *Referência de comandos da AWS CLI*.

**Topics**
+ [Pré-requisitos](#cli-services-glacier-prereqs)
+ [Criar um cofre do Amazon Glacier](#cli-services-glacier-vault)
+ [Preparar um arquivo para upload](#cli-services-glacier-prep)
+ [Iniciar um multipart upload e fazer upload de arquivos](#cli-services-glacier-initiate)
+ [Concluir o upload](#cli-services-glacier-complete)
+ [Recursos](#cli-services-glacier-resources)

## Pré-requisitos
<a name="cli-services-glacier-prereqs"></a>

Para executar os comandos `glacier`, você precisa:
+ Instale e configure a . AWS CLI. Para ter mais informações, consulte [Instalar ou atualizar a versão mais recente da AWS CLI](getting-started-install.md) e [Autenticação e credenciais de acesso para a AWS CLI](cli-chap-authentication.md).
+ Este tutorial usa várias ferramentas de linha de comando que normalmente vêm pré-instaladas em sistemas operacionais Unix, incluindo Linux e macOS. Os usuários do Windows podem usar as mesmas ferramentas instalando o [Cygwin](https://www.cygwin.com/) e executando os comandos do terminal Cygwin. São observados comandos originários do Windows e utilitários que executam as mesmas funções onde disponível.

## Criar um cofre do Amazon Glacier
<a name="cli-services-glacier-vault"></a>

Crie um cofre com o `[create-vault](https://docs.aws.amazon.com/cli/latest/reference/glacier/create-vault.html)`.

```
$ aws glacier create-vault --account-id - --vault-name myvault
{
    "location": "/123456789012/vaults/myvault"
}
```

**nota**  
Todos os comandos do Amazon Glacier exigem um parâmetro de ID de conta. Use o caractere de hífen (`--account-id -`) para usar a conta atual.

## Preparar um arquivo para upload
<a name="cli-services-glacier-prep"></a>

Crie um arquivo para o upload de teste. Os comandos a seguir criam um arquivo com o nome *largefile* com exatamente 3 MiB de dados aleatórios.

**Linux ou macOS**

```
$ dd if=/dev/urandom of=largefile bs=3145728 count=1
1+0 records in
1+0 records out
3145728 bytes (3.1 MB) copied, 0.205813 s, 15.3 MB/s
```

`dd` é um utilitário que copia um número de bytes a partir de um arquivo de entrada para um arquivo de saída. O exemplo anterior usa o arquivo de dispositivo do sistema `/dev/urandom` como uma fonte de dados aleatórios. O `fsutil` executa uma função semelhante no Windows.

**Windows**

```
C:\> fsutil file createnew largefile 3145728
File C:\temp\largefile is created
```

Em seguida, divida o arquivo em blocos de 1 MiB (1.048.576 bytes) usando um divisor de arquivos.

```
$ split -b 1048576 --verbose largefile chunk
creating file `chunkaa'
creating file `chunkab'
creating file `chunkac'
```

## Iniciar um multipart upload e fazer upload de arquivos
<a name="cli-services-glacier-initiate"></a>

Crie um upload fracionado no Amazon Glacier usando o comando `[initiate-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html)`.

```
$ aws glacier initiate-multipart-upload --account-id - --archive-description "multipart upload test" --part-size 1048576 --vault-name myvault
{
    "uploadId": "19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ",
    "location": "/123456789012/vaults/myvault/multipart-uploads/19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ"
}
```

O Amazon Glacier exige o tamanho de cada parte em bytes (1 MiB, neste exemplo), o nome do cofre e um ID de conta para configurar o upload fracionado. A AWS CLI gera um ID de upload quando a operação é concluída. Salve o ID de upload para um shell variável para uso posterior.

**Linux ou macOS**

```
$ UPLOADID="19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ"
```

**Windows**

```
C:\> set UPLOADID="19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ"
```

Depois, use o comando `[upload-multipart-part](https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html)` para fazer upload das três partes.

```
$ aws glacier upload-multipart-part --upload-id $UPLOADID --body chunkaa --range 'bytes 0-1048575/*' --account-id - --vault-name myvault
{
    "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553"
}
$ aws glacier upload-multipart-part --upload-id $UPLOADID --body chunkab --range 'bytes 1048576-2097151/*' --account-id - --vault-name myvault
{
    "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553"
}
$ aws glacier upload-multipart-part --upload-id $UPLOADID --body chunkac --range 'bytes 2097152-3145727/*' --account-id - --vault-name myvault
{
    "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553"
}
```

**nota**  
O exemplo anterior usa o sinal de dólar (`$`) para fazer referência ao conteúdo da variável de shell `UPLOADID` no Linux. Na linha de comando do Windows, use um sinal de porcentagem (%) nos dois lados do nome da variável (por exemplo, `%UPLOADID%`).

Especifique o intervalo de bytes de cada parte ao fazer upload para que o Amazon Glacier possa remontá-lo na ordem correta. Cada parte é 1.048.576 bytes, portanto, a primeira parte ocupa 0-1048575 bytes, a segunda 1048576-2097151 e a terceira 2097152-3145727.

## Concluir o upload
<a name="cli-services-glacier-complete"></a>

O Amazon Glacier exige uma árvore hash do arquivo original para confirmar que todas as partes carregadas chegaram intactas à AWS. 

Para calcular uma árvore hash, você deve dividir o arquivo em partes de 1 MiB e calcular um binário SHA-256 hash de cada item. Em seguida, divida a lista de hashes em pares, combine os dois binários hashes em cada par e execute hashes dos resultados. Repita esse processo até que haja apenas um hash à esquerda. Se houver um número ímpar de hashes em qualquer nível, envie para o próximo nível sem modificá-lo.

A chave para calcular uma árvore hash corretamente ao usar os utilitários de linha de comando é armazenar cada hash em formato binário e converter apenas para hexadecimal na última etapa. A combinação ou hash de qualquer versão hexadecimal hash em árvore gerará um resultado incorreto.

**nota**  
Os usuários do Windows podem usar o comando `type` em vez do `cat`. OpenSSL está disponível para Windows em [OpenSSL.org](https://www.openssl.org/source/).

**Para calcular uma árvore hash**

1. Se ainda não fez isso, divida o arquivo original em partes de 1 MiB.

   ```
   $ split --bytes=1048576 --verbose largefile chunk
   creating file `chunkaa'
   creating file `chunkab'
   creating file `chunkac'
   ```

1. Calcule e armazene o hash SHA-256 binário de cada fragmento.

   ```
   $ openssl dgst -sha256 -binary chunkaa > hash1
   $ openssl dgst -sha256 -binary chunkab > hash2
   $ openssl dgst -sha256 -binary chunkac > hash3
   ```

1. Combine os primeiros dois hashes e execute o hash binário do resultado.

   ```
   $ cat hash1 hash2 > hash12
   $ openssl dgst -sha256 -binary hash12 > hash12hash
   ```

1. Combine o pai de partes de hash `aa` e `ab` com o hash de bloco `ac` e o resultado do hash, desta vez exibindo hexadecimal. Armazene o resultado em um shell variável.

   ```
   $ cat hash12hash hash3 > hash123
   $ openssl dgst -sha256 hash123
   SHA256(hash123)= 9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67
   $ TREEHASH=9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67
   ```

Por fim, preencha o upload com o comando `[complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html)`. Este comando usa o tamanho do arquivo original em bytes, o valor de hash em árvore final em hexadecimal, e a ID da conta e nome do cofre.

```
$ aws glacier complete-multipart-upload --checksum $TREEHASH --archive-size 3145728 --upload-id $UPLOADID --account-id - --vault-name myvault
{
    "archiveId": "d3AbWhE0YE1m6f_fI1jPG82F8xzbMEEZmrAlLGAAONJAzo5QdP-N83MKqd96Unspoa5H5lItWX-sK8-QS0ZhwsyGiu9-R-kwWUyS1dSBlmgPPWkEbeFfqDSav053rU7FvVLHfRc6hg",
    "checksum": "9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67",
    "location": "/123456789012/vaults/myvault/archives/d3AbWhE0YE1m6f_fI1jPG82F8xzbMEEZmrAlLGAAONJAzo5QdP-N83MKqd96Unspoa5H5lItWX-sK8-QS0ZhwsyGiu9-R-kwWUyS1dSBlmgPPWkEbeFfqDSav053rU7FvVLHfRc6hg"
}
```

Também é possível verificar o status do cofre usando o comando `[describe-vault](https://docs.aws.amazon.com/cli/latest/reference/glacier/describe-vault.html)`.

```
$ aws glacier describe-vault --account-id - --vault-name myvault
{
    "SizeInBytes": 3178496,
    "VaultARN": "arn:aws:glacier:us-west-2:123456789012:vaults/myvault",
    "LastInventoryDate": "2018-12-07T00:26:19.028Z",
    "NumberOfArchives": 1,
    "CreationDate": "2018-12-06T21:23:45.708Z",
    "VaultName": "myvault"
}
```

**nota**  
O status do cofre é atualizado cerca de uma vez por dia. Consulte [Como trabalhar com cofres](https://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-vaults.html) para obter mais informações.

Já é seguro remover o bloco e os arquivos de hash que você criou.

```
$ rm chunk* hash*
```

Para ter mais informações sobre uploads fracionados, consulte [Fazer upload de arquivos grandes em partes](https://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html) e [Computar somas de verificação](https://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html) no *Guia do desenvolvedor do Amazon Glacier*. 

## Recursos
<a name="cli-services-glacier-resources"></a>

**AWS CLI Referência da:**
+ `[aws glacier](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)`
+ `[aws glacier complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html)`
+ `[aws glacier create-vault](https://docs.aws.amazon.com/cli/latest/reference/glacier/create-vault.html)`
+ `[aws glacier describe-vault](https://docs.aws.amazon.com/cli/latest/reference/glacier/describe-vault.html)`
+ `[aws glacier initiate-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html)`

**Referência do serviço:**
+ [Guia do desenvolvedor do Amazon Glacier](https://docs.aws.amazon.com/amazonglacier/latest/dev/)
+ [Fazer upload de arquivos grandes em partes](https://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html) no *Guia do desenvolvedor do Amazon Glacier*
+ [Computar somas de verificação](https://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html) no *Guia do desenvolvedor do Amazon Glacier*
+ [Trabalhar com cofres](https://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-vaults.html) no *Guia do desenvolvedor do Amazon Glacier*