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 Buckets de directorio y S3 Express One Zone y Descripción general de los 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.
-
Una llamada
CreateMultipartUpload
para iniciar el proceso. -
1000 llamadas
UploadPart
individuales, cada una cargando una parte de 100 MB, con un tamaño total de 100 GB. -
Una llamada
CompleteMultipartUpload
para finalizar el proceso.
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 de carga multiparte, consulte Comprobación de la integridad de objetos.
Para conocer un procedimiento integral sobre la carga de un objeto con carga multiparte con una suma de comprobación adicional, consulte Tutorial: Cargar un objeto mediante una carga multiparte y verificar la integridad de sus datos.
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. Al iniciar varias cargas multiparte que utilizan la misma clave de objeto en un bucket con el control de versiones habilitado, la versión actual del objeto viene determinada por la carga que se haya iniciado más recientemente (createdDate
). Por ejemplo, supongamos que inicia una solicitud CreateMultipartUpload para un objeto a las 10:00 h. A continuación, envía una segunda solicitud CreateMultipartUpload
para el mismo objeto a las 11:00 h. Como la segunda solicitud se envió más recientemente, el objeto cargado por la solicitud de las 11:00 h será la versión actual, incluso si la primera carga se completa después de la segunda. 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.
Impedimento para que se carguen objetos con nombres de claves idénticos durante la carga multiparte
Puede comprobar la existencia de un objeto en el bucket antes de crearlo mediante una operación condicional de escritura al cargar. Esto puede evitar que se sobrescriban los datos existentes. Las escrituras condicionales validarán que no haya ningún objeto existente con el mismo nombre de clave en el bucket al cargar.
Puede usar escrituras condicionales para las solicitudes de PutObject o CompletemUltipartUpload.
Para obtener más información sobre las solicitudes condicionales, consulte Agregación de condiciones previas a operaciones de S3 con solicitudes condicionales.
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 de objetos de carga multiparte. 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 El propietario del bucket puede permitir a otros clientes realizar la acción |
Initiate Multipart Upload |
Debe tener permiso para realizar la acción El propietario del bucket puede permitir a otros clientes realizar la acción |
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 El propietario del bucket debe permitir al iniciador realizar la acción |
Upload Part (Copy) | Debe tener permiso para realizar la acción Para que el iniciador cargue una parte del objeto, el propietario del bucket debe permitir al iniciador realizar la acción |
Complete Multipart Upload | Debe tener permiso para realizar la acción El propietario del bucket debe permitir al iniciador realizar la acción |
Detener carga multiparte | Debe tener permiso para realizar la acción 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 Además de estas opciones predeterminadas, el propietario del bucket puede permitir a otras entidades principales realizar la acción |
List Parts | Debe tener permiso para realizar la acción 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 |
List Multipart Uploads | Debe tener permiso para realizar la acción Además de esta opción predeterminada, el propietario del bucket puede permitir a otras entidades principales realizar la acción |
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 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.
Temas
- Configuración de una política de ciclo de vida del bucket para eliminar cargas multiparte incompletas
- Carga de un objeto con la carga multiparte
- Carga de un directorio utilizando la clase TransferUtility de .NET de alto nivel
- Descripción de cargas multiparte
- Seguimiento de una carga multiparte con los AWS SDK
- Anulación de la carga multiparte
- Copiar un objeto con la carga multiparte
- Tutorial: Cargar un objeto mediante una carga multiparte y verificar la integridad de sus datos
- Límites de carga multiparte de Amazon S3