Uso de Amazon S3 Glacier con la AWS CLI - AWS Command Line Interface

Python 2.7, 3.4 y 3.5 están obsoletas para la versión 1 de AWS CLI. Para obtener más información, consulte la sección de la versión 1 de AWS CLI de Acerca de las versiones de AWS CLI.

Uso de Amazon S3 Glacier con la AWS CLI

Puede obtener acceso a las características de Amazon S3 Glacier con la AWS Command Line Interface (AWS CLI). Para mostrar los comandos de la AWS CLI para S3 Glacier, utilice el siguiente comando.

aws glacier help

En este tema se muestran ejemplos de los comandos de la AWS CLI que realizan tareas comunes para S3 Glacier. En los ejemplos se muestra cómo utilizar la AWS CLI para cargar un archivo de gran tamaño en S3 Glacier dividiéndolo en partes más pequeñas y cargándolas desde la línea de comandos.

Antes de ejecutar los comandos, defina sus credenciales predeterminadas. Para obtener más información, consulte Configuración del AWS CLI.

nota

Este tutorial utiliza varias herramientas de línea de comandos que normalmente vienen preinstaladas en los sistemas operativos tipo Unix, como Linux y macOS. Los usuarios de Windows pueden usar las mismas herramientas instalando Cygwin y ejecutando los comandos desde el terminal de Cygwin. Se indicará en cada caso si hay disponibles utilidades y comandos nativos de Windows que realicen las mismas funciones.

Cree un almacén Amazon S3 Glacier

Cree un almacén con el comando create-vault.

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

Todos los comandos de S3 Glacier requieren un parámetro de ID de cuenta. Utilice el carácter de guion (--account-id -) para utilizar la cuenta actual.

Preparación de un archivo para cargarlo

Cree un archivo para la carga de prueba. Los comandos siguientes crean un archivo llamado largefile que contiene exactamente 3 MiB de datos aleatorios.

Linux o 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 es una utilidad que copia un número de bytes de un archivo de entrada en un archivo de salida. En el ejemplo anterior se usa el archivo de dispositivo de sistema /dev/urandom como origen de datos aleatorios. fsutil realiza una función similar en Windows.

Windows

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

A continuación, divida el archivo en fragmentos de 1 MiB (1048576 bytes).

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

HJ-Split es un divisor de archivos gratuito para Windows y muchas otras plataformas.

Inicio de una carga multiparte y carga de archivos

Cree una carga multiparte en Amazon S3 Glacier con el 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" }

S3 Glacier requiere especificar el tamaño de cada parte en bytes (1 MiB en este ejemplo), el nombre del almacén y el ID de cuenta para configurar la carga multiparte. La AWS CLI genera un ID de carga al completarse la operación. Guarde el ID de carga en una variable de shell para su uso posterior.

Linux o macOS

$ UPLOADID="19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ"

Windows

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

A continuación, use el comando upload-multipart-part para cargar cada una de las tres 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

En el ejemplo anterior se usa el signo de dólar ($) para hacer referencia al contenido de la variable de shell UPLOADID en Linux. En la línea de comandos de Windows, inserte un signo de porcentaje (%) a ambos lados del nombre de la variable (por ejemplo, %UPLOADID%).

Debe especificar el intervalo de bytes de cada parte al cargarla, para que S3 Glacier pueda volver a ensamblarlas en el orden adecuado. Cada parte tiene 1048576 bytes, por lo que la primera ocupa los bytes del 0 al 1048575, la segunda del 1048576 al 2097151 y la tercera del 2097152 al 3145727.

Finalización de la carga

Amazon S3 Glacier requiere un algoritmo hash en árbol del archivo original para poder confirmar que todas las partes cargadas llegan a AWS intactas.

Para calcular un algoritmo hash en árbol, divida el archivo en partes de 1 MiB y calcule un hash SHA-256 binario de cada fragmento. A continuación, divida la lista de hashes en pares, combine los dos hashes binarios de cada par y tome los hashes de los resultados. Repita este proceso hasta que solo quede un hash. Si hay un número impar de hashes en cualquier nivel, páselo al nivel siguiente sin modificarlo.

La clave para calcular un algoritmo hash en árbol correctamente al usar utilidades de línea de comandos es almacenar cada hash en formato binario y convertir a hexadecimal solamente en el último paso. Si la versión hexadecimal de cualquier hash del árbol se combina o se convierte a algoritmo hash, se obtendrá un resultado incorrecto.

nota

Los usuarios de Windows pueden utilizar el comando type en lugar de cat. OpenSSL está disponible para Windows en OpenSSL.org.

Para calcular un algoritmo hash en árbol

  1. Divida el archivo original en partes de 1 MiB, si no lo ha hecho aún.

    $ split --bytes=1048576 --verbose largefile chunk creating file `chunkaa' creating file `chunkab' creating file `chunkac'
  2. Calcule y almacene el hash SHA-256 binario de cada fragmento.

    $ openssl dgst -sha256 -binary chunkaa > hash1 $ openssl dgst -sha256 -binary chunkab > hash2 $ openssl dgst -sha256 -binary chunkac > hash3
  3. Combine los dos primeros hashes y tome el hash binario del resultado.

    $ cat hash1 hash2 > hash12 $ openssl dgst -sha256 -binary hash12 > hash12hash
  4. Combine el hash principal de los fragmentos aa y ab con el hash del fragmento ac y cree un hash del resultado, esta vez con formato hexadecimal. Almacene el resultado en una variable de shell.

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

Por último, complete la carga con el comando complete-multipart-upload, que toma el tamaño del archivo original en bytes, el valor final del algoritmo hash en árbol en formato hexadecimal, su ID de cuenta y el nombre del almacén.

$ 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" }

También puede comprobar el estado del almacén con el 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

El estado del almacén se actualiza una vez al día. Consulte Trabajar con almacenes para obtener más información.

Ahora puede quitar sin problemas el fragmento y los archivos hash que ha creado.

$ rm chunk* hash*

Para obtener más información sobre las cargas multiparte, consulte las secciones Carga de archivos grandes por partes y Cálculo de sumas de comprobación en la Guía para desarrolladores de Amazon S3 Glacier.