Usar o Amazon S3 Glacier com a AWS CLI - AWS Command Line Interface

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar o Amazon S3 Glacier com a AWS CLI

Introdução ao Amazon S3 Glacier

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

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

aws glacier help
nota

Para obter referência de comandos e exemplos adicionais, consulte aws glacier na Referência de comandos da AWS CLI.

Pré-requisitos

Para executar os comandos glacier, você precisa:

  • Instale e configure a AWS CLI. Para obter mais informações, consulte Instalar ou atualizar para a versão mais recente da AWS CLI e Autenticação e credenciais de acesso.

  • 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 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 S3 Glacier

Crie um cofre com o create-vault.

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

Todos os comandos do S3 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

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).

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

HJ-Split é um divisor de arquivos gratuito para Windows e muitas outras plataformas.

Iniciar um multipart upload e fazer upload de arquivos

Crie um upload fracionado no Amazon S3 Glacier usando o comando initiate-multipart-upload.

$ 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 S3 Glacier exige o tamanho de cada parte em bytes (1 MiB neste exemplo), o nome do cofre e uma 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 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 S3 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

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

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.

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'
  2. 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
  3. Combine os primeiros dois hashes e execute o hash binário do resultado.

    $ cat hash1 hash2 > hash12 $ openssl dgst -sha256 -binary hash12 > hash12hash
  4. 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. 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.

$ 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 para obter mais informações.

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

$ rm chunk* hash*

Para obter mais informações sobre uploads fracionados, consulte Upload de arquivos grandes em partes e Como computar somas de verificação no Guia do desenvolvedor do Amazon S3 Glacier.

Recursos

Referência da AWS CLI:

Referência do serviço: