Carga y copia de objetos con la carga multiparte - Amazon Simple Storage Service

Carga y copia de objetos con la carga multiparte

La carga multiparte permite cargar un solo objeto como un conjunto de partes. Cada parte es una parte contigua de los datos del objeto. Puede cargar estas partes del objeto de forma independiente y en cualquier orden. Si la transmisión de cualquier parte falla, puede retransmitir esta parte sin que las demás partes se vean afectadas. Después de cargar todas las partes del objeto, Amazon S3 las combina y crea el objeto. Por lo general, cuando el tamaño del objeto alcanza los 100 MB, deberá usar las cargas multipartes en lugar de cargar el objeto en una única operación.

El uso de la carga multiparte proporciona las siguientes ventajas:

  • Mayor rendimiento: puede cargar las partes al mismo tiempo para aumentar el rendimiento.

  • Recuperación rápida ante cualquier problema de red: una parte de tamaño más pequeño reduce el impacto de tener que reiniciar una carga fallida debido a un error de red.

  • Detención y reanudación de cargas de objetos: puede cargar las partes del objeto con el paso del tiempo. Después de que inicia una carga multiparte, no hay fecha de caducidad, por lo tanto, debe completar o detener de forma explícita la carga multiparte.

  • Inicio de una carga antes de conocer el tamaño final del objeto: puede cargar un objeto a medida que lo crea.

Le recomendamos que use la carga multiparte de las siguientes maneras:

  • Si carga objetos grandes en una red estable de banda ancha, use la carga multiparte para aumentar al máximo el uso de su ancho de banda disponible cargando los objetos en partes y en paralelo para un rendimiento en varios subprocesos.

  • Si realiza la carga en una red irregular, use la carga multiparte para aumentar la resiliencia ante errores de red evitando reinicios de la carga. Al usar la carga multiparte, debe volver a intentar cargar solo las partes que se han interrumpido durante la carga. No necesita reiniciar la carga de su objeto desde el principio.

nota

Para obtener más información sobre el uso de la clase de almacenamiento Amazon S3 Express One Zone con buckets de directorio, consulte ¿Qué es S3 Express One Zone? y Buckets de directorio. Para obtener más información sobre el uso de una carga multiparte con S3 Express One Zone y buckets de directorio, consulte Uso de las cargas multiparte con buckets de directorio.

Proceso de carga multiparte

La carga multiparte es un proceso de tres pasos: se inicia la carga, se cargan las partes del objeto y, después de haber cargado todas las partes, se completa la carga multiparte. Al recibir la solicitud de carga multiparte completa, Amazon S3 crea el objeto a partir de las partes cargadas para que pueda obtener acceso al objeto como lo haría con cualquier otro objeto de su bucket.

Puede mostrar todas las cargas multipartes en curso u obtener una lista de las partes que ha cargado en una carga multiparte específica. En esta sección, se explicarán cada una de estas operaciones.

Inicio de la carga multiparte

Al enviar una solicitud para iniciar una carga multiparte, Amazon S3 devuelve una respuesta con un ID de carga, que es un identificador único para su carga multiparte. Debe incluir este ID de carga siempre que cargue partes, muestre partes, complete una carga o pare una carga. Si desea proporcionar metadatos que describen el objeto que está cargando, debe proporcionarlos en la solicitud para iniciar la carga multiparte.

Carga de partes

Al cargar una parte, además del ID de carga, debe especificar un número de parte. Puede seleccionar cualquier número de parte comprendido entre 1 y 10 000. Un número de parte identifica exclusivamente una parte y su posición en el objeto que se está cargando. El número de parte que elija no tiene que ser necesariamente una secuencia consecutiva (por ejemplo: puede ser 1, 5 y 14). Si carga una parte nueva con el mismo número que una parte ya cargada, se sobrescribirá la parte existente.

Cuando cargue una parte, Amazon S3 devolverá una etiqueta de entidad (ETag) para la parte como encabezado en la respuesta. Para cada carga de parte, debe anotar el número de parte y el valor de ETag. Debe incluir estos valores en la solicitud posterior para completar la carga multiparte. Cada parte tendrá su propia ETag en el momento de la carga. Sin embargo, una vez que se complete la carga de varias partes y todas se hayan consolidado, todas las partes estarán agrupadas en una ETag como suma de comprobación de las sumas de comprobación.

nota

Después de iniciar una carga multiparte y cargar una o más partes, debe completar o parar la carga multiparte para que no le cobren por el almacenamiento de las partes cargadas. Solo después de completar o parar una carga multiparte, Amazon S3 liberará el almacenamiento de las partes y parará el cobro del almacenamiento de partes

Después de parar una carga multiparte, no puede volver a cargar ninguna parte con ese ID de carga. Si la carga de alguna de las partes estuviera en curso, todavía se puede ejecutar correctamente o producir un error una vez detenida. Para asegurarse de que se libera todo el espacio de almacenamiento consumido por las partes, debe parar una carga multiparte solo después de haber completado las cargas de todas las partes.

Finalización de la carga multiparte

Al completar una carga multiparte, Amazon S3 crea un objeto al concatenar las partes en orden ascendente según el número de parte. Si se proporcionaron los metadatos de algún objeto en la solicitud inicio de carga multiparte, Amazon S3 asocia estos metadatos al objeto. Después de una solicitud de completar realizada correctamente, las partes ya no existirán.

La solicitud carga multiparte completa debe incluir el ID de carga y una lista de ambos números de parte y valores correspondientes de ETag. La respuesta de Amazon S3 incluye una ETag que identifica de forma exclusiva los datos de objetos combinados. Esta ETag no es necesariamente un hash de MD5 de los datos del objeto.

Ejemplo de llamadas de carga multiparte

En este ejemplo, suponga que está generando una carga multiparte para un archivo de 100 GB. En tal caso tendría las siguientes llamadas a la API para todo el proceso. Habría un total de 1002 llamadas a la API.

Listas de cargas multiparte

Puede enumerar las partes de una carga multiparte específica o todas las cargas multipartes en curso. La operación de lista de partes devuelve la información de las partes que ha cargado para una carga multiparte específica. Para cada solicitud de lista de partes, Amazon S3 devuelve la información de las partes para la carga multiparte específica, hasta un máximo de 1 000 partes. Si hay más de 1 000 partes en la carga multiparte, debe enviar una serie de solicitudes de lista de partes para recuperar todas las partes. Tenga en cuenta que la lista de partes que se devuelve no incluye las partes que no hayan terminado de cargarse. Con la operación lista de cargas multiparte, puede obtener una lista de las cargas multiparte en curso.

Una carga multiparte en curso es una carga iniciada, pero que aún no se ha completado ni parado. Cada solicitud devuelve 1 000 cargas multipartes como máximo. Si hay más de 1 000 cargas multiparte en curso, debe enviar otras solicitudes para recuperar las cargas multiparte restantes. Solo utilice la lista devuelta para fines de verificación. No utilice el resultado de esta lista al enviar una solicitud para completar la carga multiparte. En cambio, mantenga su propia lista de números de parte que especificó al cargarlas y los valores correspondientes de ETag que devuelve Amazon S3.

Sumas de comprobación con operaciones de carga multiparte

Al cargar un objeto en Amazon S3, puede especificar un algoritmo de suma de comprobación para que lo utilice Amazon S3. Amazon S3 utiliza MD5 de forma predeterminada para verificar la integridad de los datos; sin embargo, puede especificar un algoritmo de suma de comprobación adicional para utilizarlo. Al utilizar MD5, Amazon S3 calcula la suma de comprobación de todo el objeto multiparte una vez finalizada la carga. Esta suma de comprobación no es de todo el objeto, sino más bien una suma de comprobación de las sumas de comprobación de cada parte individual.

Cuando indica a Amazon S3 que utilice sumas de comprobación adicionales, Amazon S3 calcula el valor de la suma de comprobación de cada parte y almacena los valores. Puede utilizar la API o el SDK para recuperar el valor de la suma de comprobación de partes individuales mediante GetObject o HeadObject. Si quiere recuperar los valores de la suma de comprobación de partes individuales de las cargas multiparte que aún están en proceso, puede utilizar ListParts.

importante

Si utiliza una carga multiparte con sumas de comprobación adicionales, los números de parte multiparte deben ser consecutivos. Al utilizar sumas de comprobación adicionales, si intenta completar una solicitud de carga multiparte con números de parte no consecutivos, Amazon S3 genera un error 500 Internal Server Error de HTTP.

Para obtener más información sobre cómo funcionan las sumas de comprobación con objetos multiparte, consulte Comprobación de la integridad de objetos.

Operaciones de carga multiparte simultáneas

En un entorno de desarrollo distribuido, es posible que la aplicación inicie varias actualizaciones en el mismo objeto simultáneamente. La aplicación puede iniciar varias cargas multipartes con la misma clave de objeto. Para cada una de estas cargas, la aplicación puede cargar las partes y enviar una solicitud de carga completa a Amazon S3 para crear el objeto. Cuando los buckets tienen el control de versiones de S3 habilitado, siempre se creará una nueva versión cuando se complete una carga multiparte. Para buckets que no tienen el control de versiones habilitado, es posible que tenga prioridad alguna otra solicitud recibida entre el momento en que se inicia y cuando se completa una carga multiparte.

nota

Es posible que tenga prioridad alguna otra solicitud recibida entre el momento en que inició y completó la carga multiparte. Por ejemplo, si otra operación elimina una clave luego de que usted inicia una carga multiparte con esa clave antes de completarla, la respuesta de carga multiparte completa podría indicar una creación correcta del objeto sin que usted vea el objeto.

Carga multiparte y precios

Después de iniciar una carga multiparte, Amazon S3 retiene todas las partes hasta que complete o detenga la carga. Durante la vida útil, se le cobrará por todo el almacenamiento, el ancho de banda y las solicitudes para esta carga multiparte y sus partes asociadas.

Estas partes se cobran según la clase de almacenamiento especificada cuando se cargaron las partes. Una excepción a esto son las partes cargadas en S3 Glacier Flexible Retrieval o S3 Glacier Deep Archive. Las partes multipartes en curso para PUT a la clase de almacenamiento S3 Glacier Flexible Retrieval se facturan como S3 Glacier Flexible Retrieval Staging Storage a las tarifas de almacenamiento de S3 Standard hasta que se complete la carga. Además, tanto CreateMultipartUpload como UploadPart se facturan según las tarifas de S3 Standard. Solo la solicitud CompleteMultipartUpload se factura con la tarifa de S3 Glacier Flexible Retrieval. Del mismo modo, las partes multipartes en curso para PUT a la clase de almacenamiento S3 Glacier Deep Archive se facturan como S3 Glacier Flexible Retrieval Staging Storage a las tarifas de almacenamiento de S3 Standard hasta que se complete la carga, con solo la solicitud CompleteMultipartUpload cobrada según las tarifas de S3 Glacier Deep Archive.

No se le cobrará por estos elementos, si para la carga multiparte, ya que Amazon S3 elimina los artefactos cargados y cualquier parte que haya cargado. No se cobran gastos de eliminación anticipada por eliminar cargas multiparte incompletas, independientemente de la clase de almacenamiento especificada. Para obtener más información acerca de los precios, consulte Precios de Amazon S3.

nota

Para reducir los costos de almacenamiento, se recomienda configurar una regla del ciclo de vida para eliminar las cargas multiparte incompletas al cabo de un número específico de días mediante la acción AbortIncompleteMultipartUpload. Para obtener más información sobre cómo crear una regla de ciclo de vida para eliminar las cargas multiparte incompletas, consulte Configuración de una política de ciclo de vida del bucket para eliminar cargas multiparte incompletas.

Compatibilidad de la API con las cargas multiparte

Estas bibliotecas proporcionan una abstracción de alto nivel que facilita la carga multiparte de objetos. Sin embargo, si la aplicación lo requiere, puede utilizar directamente la API de REST. Las siguientes secciones de la referencia de API de Amazon Simple Storage Service describen la API de REST para la carga multiparte.

Para ver un tutorial de carga de varias partes donde se utilicen funciones de AWS Lambda, consulte Uploading large objects to Amazon S3 using multipart upload and transfer acceleration.

Compatibilidad de AWS Command Line Interface con cargas multiparte

En los siguientes temas de AWS Command Line Interface, se describen las operaciones para la carga multiparte.

Compatibilidad de AWS SDK con cargas multiparte

Puede utilizar un AWS SDK para cargar un objeto en partes. Para obtener una lista de los AWS SDK compatibles con la acción de la API, consulte:

API y permisos de carga multiparte

Debe tener los permisos necesarios para utilizar las operaciones de carga multiparte. Puede utilizar listas de control de acceso (ACL), la política de bucket o la política de usuario para conceder permisos para realizar estas operaciones. En la siguiente tabla se muestran los permisos requeridos para varias operaciones de carga multiparte al utilizar las ACL, una política de bucket o una política de usuario.

Acción Permisos necesarios

Crear carga multiparte

Debe tener permiso para realizar la acción s3:PutObject en un objeto a fin de crear la carga multiparte.

El propietario del bucket puede permitir a otros clientes realizar la acción s3:PutObject.

Initiate Multipart Upload

Debe tener permiso para realizar la acción s3:PutObject en un objeto para iniciar la carga multiparte.

El propietario del bucket puede permitir a otros clientes realizar la acción s3:PutObject.

Initiator

Elemento contenedor que identifica quién inició la carga multiparte. Si el iniciador es una Cuenta de AWS, este elemento proporcionará la misma información que el elemento Propietario. Si el iniciador es un usuario de IAM, este elemento proporciona el ARN de usuario y el nombre para mostrar.

Upload Part

Debe tener permiso para realizar la acción s3:PutObject en un objeto para cargar una parte.

El propietario del bucket debe permitir al iniciador realizar la acción s3:PutObject en un objeto para que cargue una parte de ese objeto.

Upload Part (Copy)

Debe tener permiso para realizar la acción s3:PutObject en un objeto para cargar una parte. Dado que está cargando una parte de un objeto existente, debe tener permiso para realizar la acción s3:GetObject en el objeto de origen.

Para que el iniciador cargue una parte del objeto, el propietario del bucket debe permitir al iniciador realizar la acción s3:PutObject en un objeto.

Complete Multipart Upload

Debe tener permiso para realizar la acción s3:PutObject en un objeto para completar una carga multiparte.

El propietario del bucket debe permitir al iniciador realizar la acción s3:PutObject en un objeto para que complete una carga multiparte para ese objeto.

Detener carga multiparte

Debe tener permiso para realizar la acción s3:AbortMultipartUpload para parar una carga multiparte.

De forma predeterminada, el propietario del bucket y el iniciador de la carga multiparte deben tener permiso para realizar esta acción como parte de las políticas de bucket e IAM. Si el iniciador es un usuario de IAM, la Cuenta de AWS correspondiente a dicho usuario también tendrá permiso para parar esa carga multiparte. Con las políticas de punto de conexión de VPC, el iniciador de la carga multiparte no obtiene automáticamente permiso para realizar la acción s3:AbortMultipartUpload.

Además de estas opciones predeterminadas, el propietario del bucket puede permitir a otras entidades principales realizar la acción s3:AbortMultipartUpload en un objeto. El propietario del bucket puede denegar la posibilidad de realizar la acción s3:AbortMultipartUpload a cualquier entidad principal.

List Parts

Debe tener permiso para realizar la acción s3:ListMultipartUploadParts para mostrar las partes de una carga multiparte.

De forma predeterminada, el propietario del bucket tiene permiso para mostrar las partes de cualquier carga multiparte en el bucket. El iniciador de la carga multiparte tiene permiso para mostrar las partes de la carga multiparte específica. Si el iniciador de la carga multiparte es un usuario de IAM, la Cuenta de AWS que lo controla tiene permiso para mostrar las partes de esa carga.

Además de estas opciones predeterminadas, el propietario del bucket puede permitir a otras entidades principales realizar la acción s3:ListMultipartUploadParts en un objeto. El propietario del bucket también puede denegar la posibilidad de realizar la acción s3:ListMultipartUploadParts a cualquier entidad principal.

List Multipart Uploads

Debe tener permiso para realizar la acción s3:ListBucketMultipartUploads en un bucket para mostrar las cargas multipartes en curso de ese bucket.

Además de esta opción predeterminada, el propietario del bucket puede permitir a otras entidades principales realizar la acción s3:ListBucketMultipartUploads en el bucket.

Permisos relacionados con el cifrado y descifrado de AWS KMS

Para realizar una carga multiparte con cifrado mediante una clave de KMS de AWS Key Management Service (AWS KMS), el solicitante debe tener permiso para las acciones kms:Decrypt y kms:GenerateDataKey en la clave. Estos permisos son necesarios, ya que Amazon S3 debe descifrar y leer datos de las partes de archivos cifrados antes de finalizar la carga multiparte.

Para obtener más información, consulte Cargar un archivo grande en Amazon S3 con cifrado mediante AWS KMS key en el AWS Centro de conocimientos.

Si su rol o usuario de IAM se encuentran en la misma Cuenta de AWS que la clave de KMS, debe tener estos permisos en la política de claves. Si el usuario o rol de IAM pertenecen a una cuenta distinta de la de la clave de KMS, debe tener los permisos tanto en la política de claves como en el usuario o rol de IAM.

Para obtener información acerca de la relación entre los permisos de la Access Control List (ACL, Lista de control de acceso) y los permisos de las políticas de acceso, consulte Mapeo de permisos de ACL y permisos de política de acceso. Para obtener información acerca de los usuarios, los roles y las prácticas recomendadas de IAM, consulte Identidades (usuarios, grupos de usuarios y roles) de IAM en la Guía del usuario de IAM.