Almacenamiento de objetos S3

El servicio de storage en S3 está pensado para almacenar datos fríos, es decir, orientado a grandes cantidades de información de uso muy infrecuente que deben permanecer congelados por largos periodos de tiempo. S3 no puede utilizarse como un espacio de scratch o para trabajar habitualmente con los archivos almacenados, ya que los archivos no se pueden modificar una vez guardados. Para hacerlo, hay que descargarlos, llevar a cabo los cambios y volver a subirlos al almacén.

CONFIGURACIÓN DEL CLIENTE

Aunque existen otras alternativas, la documentación se basa en el uso de aws cli, descargable en : https://docs.aws.amazon.com/es_es/cli/latest/userguide/getting-started-install.html

Una vez entregados los credenciales al usuario, éste procederá a configurar la herramienta cliente con :

aws configure --profile=nombre_perfil

Es recomendable trabajar con perfiles, dado que así podremos configurar diferentes juegos de credenciales para acceder a distintos almacenamientos S3.

Indicando :

AWS Access Key ID AWS Secret Access Key

y dejando por defecto las opciones de :

Default region name [None]:
Default output format [None]:

COMANDOS BÁSICOS

Listado de buckets :

aws s3 ls --endpoint=http://url_del_endpoint --profile=nombre_perfil

Listado de elementos de un bucket :

aws s3 ls nombre_bucket --endpoint=http://url_del_endpoint --profile=nombre_perfil

Subir archivo a un bucket :

aws s3 cp nombre_archivo s3://nombre_bucket/ --endpoint=http://url_del_endpoint --profile=nombre_perfil

** NOTA IMPORTANTE: En caso de que el tamaño del archivo sea superior a 50Gb, será necesario incluir el parámetro**

--expected-size num_bytes

de lo contrario, el proceso de upload puede fallar. https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html*

Descargar un archivo desde el bucket a nuestro equipo :

aws s3 cp s3://nombre_bucket/nombre_archivo carpeta_local --endpoint=http://url_del_endpoint --profile=nombre_perfil

Borrar elemento de un bucket :

aws s3 rm s3://nombre_bucket/nombre_archivo --endpoint=http://url_del_endpoint --profile=nombre_perfil

COMANDOS AVANZADOS

Ver : https://docs.aws.amazon.com/AmazonS3/latest/API/API_Object.html

Enviar un archivo indicando su md5 para verificación :

1.Calcular el md5

openssl md5 nombre_archivo

2.Calcular el md5 en formato Base64

openssl md5 --binary nombre_archivo |base64

3.Subir el archivo indicando el valor para comprobación. El sistema verificará que el valor de md5 al terminar el upload del archivo sea el que hemos indicado :

aws s3api put-object --bucket nombre_bucket --key nombre_archivo --body nombre_archivo --content-md5 "md5_formato_base64" --endpoint=https://url_del_endpoint --profile=nombre_perfil

Si se produce algún error, el sistema lo indicará; de lo contrario nos mostrará información acerca del md5 del archivo, aunque no en base 64. Corresponderá al valor calculado en el paso 1.

    {
        "ETag": "\"valor_calculado_en_paso_uno\""
    }

Obtener los md5sum de los archivos de un bucket :

aws s3api list-objects --bucket nombre_del_bucket --endpoint=http://url_del_endpoint --profile=nombre_perfil

Obtener el md5sum de un archivo :

aws s3api head-object --bucket nombre_del_bucket --key nombre_archivo --query ETag --output text --endpoint=http://url_del_endpoint --profile=nombre_perfil

** NOTA : El valor de ETag difiere del archivo original si se sube con aws put. Para usar códigos md5 de comprobación, debería utilizarse aws s3api put-object**