

# Uso de Amazon Glacier en la AWS CLI
<a name="cli-services-glacier"></a>


| Introducción a Amazon Glacier | 
| --- | 
|    | 

En este tema se muestran ejemplos de los comandos de la AWS CLI que realizan tareas comunes para Amazon Glacier. En los ejemplos se muestra cómo utilizar la AWS CLI para cargar un archivo de gran tamaño en Amazon 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 Glacier con la AWS Command Line Interface (AWS CLI). Para mostrar los comandos de la AWS CLI para Amazon 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](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)` en la *Referencia de comandos de AWS CLI*.

**Topics**
+ [Requisitos previos](#cli-services-glacier-prereqs)
+ [Creación de un almacén de Amazon Glacier](#cli-services-glacier-vault)
+ [Preparación de un archivo para cargarlo](#cli-services-glacier-prep)
+ [Inicio de una carga multiparte y carga de archivos](#cli-services-glacier-initiate)
+ [Finalización de la carga](#cli-services-glacier-complete)
+ [Recursos](#cli-services-glacier-resources)

## Requisitos previos
<a name="cli-services-glacier-prereqs"></a>

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](getting-started-install.md) y [Credenciales de autenticación y acceso para la AWS CLI](cli-chap-authentication.md).
+ 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](https://www.cygwin.com/) 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.

## Creación de un almacén de Amazon Glacier
<a name="cli-services-glacier-vault"></a>

Cree un almacén con el comando `[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 los comandos de Amazon 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
<a name="cli-services-glacier-prep"></a>

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 (1 048 576 bytes) con un divisor de archivos.

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

## Inicio de una carga multiparte y carga de archivos
<a name="cli-services-glacier-initiate"></a>

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

Amazon 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](https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html)` 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 Amazon 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
<a name="cli-services-glacier-complete"></a>

Amazon 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](https://www.openssl.org/source/).

**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'
   ```

1. 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
   ```

1. Combine los dos primeros hashes y tome el hash binario del resultado.

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

1. 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](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html)`, 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](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**  
El estado del almacén se actualiza una vez al día. Consulte [Trabajar con almacenes](https://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-vaults.html) 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 [Carga de archivos grandes por partes](https://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html) y [Cálculo de sumas de comprobación](https://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html) en la *Guía para desarrolladores de Amazon Glacier*. 

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

**AWS CLI referencia de:**
+ `[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)`

**Referencia de servicio:**
+ [Guía para desarrolladores de Amazon Glacier](https://docs.aws.amazon.com/amazonglacier/latest/dev/)
+ [Carga de archivos grandes por partes](https://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html) en la *Guía para desarrolladores de Amazon Glacier*
+ [Cálculo de sumas de comprobación](https://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html) en la *Guía para desarrolladores de Amazon Glacier*
+ [Uso de almacenes](https://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-vaults.html) en la *Guía para desarrolladores de Amazon Glacier*