Uso de Amazon S3 Glacier en la AWS CLI
Una introducción a Amazon S3 Glacier |
---|
|
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.
Puede acceder a las características de Amazon S3 Glacier con AWS Command Line Interface (AWS CLI). Para mostrar los comandos de la AWS CLI para S3 Glacier, utilice el siguiente comando.
aws glacier help
nota
Para obtener más ejemplos de referencia de comandos y ver otros ejemplos, consulte aws glacier
en la Referencia de comandos de AWS CLI.
Temas
Requisitos previos
Para ejecutar los comandos de glacier
, debe:
Instalar y configurar la AWS CLI. Para obtener más información, consulte Instalación o actualización de la versión más reciente de AWS CLI y Credenciales de autenticación y acceso para la AWS CLI.
-
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=11+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
3145728File C:\temp\largefile is created
A continuación, divida el archivo en fragmentos de 1 MiB (1 048 576 bytes) con un divisor de archivos.
$
split -b 1048576 --verbose
largefile
chunkcreating file `chunkaa' creating file `chunkab' creating file `chunkac'
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-namemyvault
{ "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-namemyvault
{ "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553" }
$
aws glacier upload-multipart-part --upload-id $UPLOADID --body
chunkab
--range 'bytes 1048576-2097151/*' --account-id - --vault-namemyvault
{ "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553" }
$
aws glacier upload-multipart-part --upload-id $UPLOADID --body
chunkac
--range 'bytes 2097152-3145727/*' --account-id - --vault-namemyvault
{ "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
-
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'
-
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
-
Combine los dos primeros hashes y tome el hash binario del resultado.
$
cat hash1 hash2 > hash12
$
openssl dgst -sha256 -binary hash12 > hash12hash
-
Combine el hash principal de los fragmentos
aa
yab
con el hash del fragmentoac
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.
Recursos
referencia de AWS CLI:
Referencia de servicio:
-
Carga de archivos grandes por partes en la Guía para desarrolladores de Amazon S3 Glacier
-
Cálculo de sumas de comprobación en la Guía para desarrolladores de Amazon S3 Glacier
-
Uso de almacenes en la Guía para desarrolladores de Amazon S3 Glacier