Subiendo ficheros grandes a AWS S3 con multipart

Este es un breve resumen de los pasos a realizar para hacer la subida de ficheros grandes a un bucket S3 de AWS mediante su CLI y la capacidad que nos da la herramienta dividiendo los ficheros.

Subida de ficheros mediante multipart

A la hora de hacer una subida masiva de ficheros a S3 primero debemos ser conscientes de las limitaciones que tenemos mediante las tres opciones más “directas”:

  1. S3 Console: Con un máximo de 160Gb por fichero
  2. AWS CLI:
    • Mediante Single Operation: Objetos de hasta 5GB.
    • Multipart-Operation:
      • Objetos de hasta 5TB de tamaño
      • Objetos desde 5MB hasta 5TB
      • Utilizar este modelo con ficheros superiores a 100MB.
      • Nos permite optimizar el ancho de banda y la resiliencia de la operación.

Queda fuera de este análisis otro tipo de servicios como serían AWS DataSync o AWS TransferFamily.

Los pasos para realizar la subida de ficheros grandes mediante multipart son los siguientes:

  1. Dividir el fichero mediante el comando split:
    • Ejem: split -b 100m -d Fichero_subir Fichero_subir_cortado_
  2. Iniciar el proceso de subida:
    • Ejem: aws s3api create-multipart-upload –bucket my-bucket –key my-object
  3. Realizar la subida de las partes del fichero:
    • Ejem: aws s3api upload-part –bucket my-bucket –key my-object –upload-id UPLOAD_ID –part-number PART_NUMBER –body PART_FILE
  4. Mientras se hace el upload, se puede monitorizar el proceso mediante:
    • Ejem: aws s3api list-parts –bucket my-bucket –key my-object –upload-id UPLOAD_ID
  5. Una vez subida todas las partes, se ha de completar el proceso con el comando complete-multiplart-upload:
    • Ejem: aws s3api complete-multipart-upload –bucket my-bucket –key my-object –upload-id UPLOAD_ID –multipart-upload ‘{“Parts”:[{“ETag”:”ETAG1″,”PartNumber”:1},{“ETag”:”ETAG2″,”PartNumber”:2}]}’

El proceso siempre puede ser cancelado mediante el comando de abortar:

  • aws s3api abort-multipart-upload –bucket my-bucket –key my-object –upload-id UPLOAD_ID

Opcionalmente al multipart, se puede mejorar el rendimiento de la subida de ficheros, mediante la subida concurrente de ficheros, siendo esta inicialmente de 10. Para ello tenemos el siguiente comando:

  • aws configure set default.s3.max_concurrent_requests 20

Para mas configuraciones sobre el AWS CLI de S3, consultar su documentación: AWS CLI S3 Configuration

Uso de comandos de AWS CLI de alto nivel

Otra práctica sería utilizar los comandos de alto nivel que nos presta el CLI de S3 como son: cp, sync o mv.

Dichos comandos automáticamente gestionan los ficheros de forma multipart cuando el objeto es grande.

En este caso el comando sería: aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/

Una buena práctica es calcular el valor checksum MD5 del fichero antes de subirlo y chequear la correcta subida mediante este valor. El comando concreto sería: aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/ –metadata md5=”examplemd5value1234/4Q”

En este caso, por el contrario, no tenemos tanto control en el proceso cuando se esta ejecutando una subida de ficheros masiva y que pueda provocar cortes en la subida de los mismos.

Links de Interés

Puedes ampliar la documentación en los siguientes Links:

Enjoy!!!

Leave a comment