Tutorial: Cargar un objeto mediante una carga multiparte y verificar la integridad de sus datos
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. Para obtener más información acerca de las cargas multipartes, consulte Carga y copia de objetos con la carga multiparte. Para conocer los límites relacionados con las cargas multiparte, consulte Límites de carga multiparte de Amazon S3.
Puede utilizar sumas de verificación para comprobar que los activos no se modifican al copiarlos. La realización de una suma de comprobación consiste en utilizar un algoritmo para iterar secuencialmente cada byte de un archivo. Amazon S3 ofrece varias opciones de suma de comprobación para comprobar la integridad de los datos. Le recomendamos que realice estas comprobaciones de integridad como práctica recomendada de durabilidad y para confirmar que todos los bytes se transfieren sin alteraciones. Amazon S3 también admite los siguientes algoritmos: SHA-1, SHA-256, CRC32 y CRC32C. Amazon S3 utiliza uno o más de estos algoritmos para calcular un valor de suma de comprobación adicional y almacenarlo como parte de los metadatos del objeto. Para obtener más información acerca de las sumas de comprobación, consulte Comprobación de la integridad de objetos.
Objetivo
En este tutorial, obtendrá información sobre cómo cargar un objeto en Amazon S3 mediante una carga multiparte y una suma de comprobación SHA-256 adicional a través de la interfaz de línea de comandos de AWS (CLI de AWS). También obtendrá información sobre cómo comprobar la integridad de los datos del objeto mediante el cálculo del hash MD5 y la suma de comprobación SHA-256 del objeto cargado.
Temas
- Requisitos previos
- Paso 1: Creación de un archivo grande
- Paso 2: División del archivo en varios archivos
- Paso 3: Creación de la carga multiparte con una suma de comprobación adicional
- Paso 4: Carga de las partes de la carga multiparte
- Paso 5: Muestra de todas las partes de la carga multiparte
- Paso 6: Completar la carga multiparte
- Paso 7: Confirmación de que el objeto se ha cargado en el bucket
- Paso 8: Comprobación de la integridad del objeto con una suma de comprobación MD5
- Paso 9: Comprobación de la integridad del objeto con una suma de comprobación adicional
- Paso 10: Eliminar los recursos
Requisitos previos
-
Antes de empezar este tutorial, asegúrese de tener acceso a un bucket de Amazon S3 en el que pueda cargar. Para obtener más información, consulte Crear un bucket.
-
Debe tener instalada y configurada la CLI de AWS. Si aún no ha instalado la CLI de AWS, consulte Instalar o actualizar la última versión de la AWS CLI en la Guía del usuario de AWS Command Line Interface.
-
De forma alternativa, puede ejecutar comandos de la CLI de AWS desde la consola mediante AWS CloudShell. AWS CloudShell es un intérprete de comandos previamente autenticado y basado en el navegador que se puede lanzar directamente desde la AWS Management Console. Para obtener más información, consulte ¿Qué es CloudShell? e Introducción a AWS CloudShell en la Guía el usuario de AWS CloudShell.
Paso 1: Creación de un archivo grande
Si ya tiene un archivo listo para cargar, puede usarlo para este tutorial. De lo contrario, cree un archivo de 15 MB siguiendo estos pasos. Para conocer los límites relacionados con las cargas multiparte, consulte Límites de carga multiparte de Amazon S3.
Creación de un archivo grande
Utilice uno de los siguientes comandos para crear el archivo, en función del sistema operativo que esté utilizando.
Linux o macOS
Para crear un archivo de 15 MB, abra el terminal local y ejecute el siguiente comando:
dd if=/dev/urandom of=census-data.bin bs=1M count=15
Este comando crea un archivo llamado census-data.bin
relleno de bytes aleatorios, con un tamaño de 15 MB.
Windows
Para crear un archivo de 15 MB, abra el terminal local y ejecute el siguiente comando:
fsutil file createnew census-data.bin 15728640
Este comando crea un archivo llamado census-data.bin
con un tamaño de 15 MB de datos arbitrarios (15728640 bytes).
Paso 2: División del archivo en varios archivos
Para realizar la carga multiparte, debe dividir el archivo grande en partes más pequeñas. A continuación, puede cargar las partes más pequeñas mediante el proceso de carga multiparte. En este paso se muestra cómo dividir el archivo grande creado en el Paso 1 en partes más pequeñas. En el siguiente ejemplo, se utiliza un archivo de 15 MB llamado census-data.bin
.
División de un archivo grande en partes
Linux o macOS
Para dividir el archivo grande en partes de 5 MB, utilice el comando split
. Abra el terminal y ejecute lo siguiente:
split -b 5M -d census-data.bin census-part
Este comando divide census-data.bin
en partes de 5 MB llamadas census-part**
, donde **
es un sufijo numérico que comienza desde 00
.
Windows
Para dividir el archivo grande, utilice PowerShell. Abra Powershell
$inputFile = "census-data.bin" $outputFilePrefix = "census-part" $chunkSize = 5MB $fs = [System.IO.File]::OpenRead($inputFile) $buffer = New-Object byte[] $chunkSize $fileNumber = 0 while ($fs.Position -lt $fs.Length) { $bytesRead = $fs.Read($buffer, 0, $chunkSize) $outputFile = "{0}{1:D2}" -f $outputFilePrefix, $fileNumber $fileStream = [System.IO.File]::Create($outputFile) $fileStream.Write($buffer, 0, $bytesRead) $fileStream.Close() $fileNumber++ } $fs.Close()
Este script de PowerShell lee el archivo grande en fragmentos de 5 MB y escribe cada fragmento en un archivo nuevo con un sufijo numérico.
Tras ejecutar el comando correspondiente, debería ver las partes del directorio donde ejecutó el comando. Cada parte tendrá un sufijo correspondiente a su número de pieza, por ejemplo:
census-part00 census-part01 census-part02
Paso 3: Creación de la carga multiparte con una suma de comprobación adicional
Para iniciar el proceso de carga multiparte, debe crear la solicitud de carga multiparte. Este paso implica iniciar la carga multiparte y especificar una suma de verificación adicional para la integridad de los datos. En el siguiente ejemplo, se utiliza la suma de comprobación SHA-256. Si desea proporcionar metadatos que describen el objeto que se está cargando, debe proporcionarlos en la solicitud para iniciar la carga multiparte.
nota
En este paso y en los siguientes, este tutorial utiliza el algoritmo adicional SHA-256. Otra opción, puede utilizar otra suma de comprobación adicional para estos pasos, como CRC32, CRC32C o SHA-1. Si usa un algoritmo diferente, debe usarlo a lo largo de los pasos del tutorial.
Inicio de la carga multiparte
En el terminal, use el siguiente comando create-multipart-upload
para iniciar una carga multiparte para el bucket. Reemplace
por el nombre real de su bucket. Además, sustituya amzn-s3-demo-bucket1
census_data_file
por el nombre de archivo elegido. Este nombre de archivo se convierte en la clave del objeto cuando se completa la carga.
aws s3api create-multipart-upload --bucket
amzn-s3-demo-bucket1
--key 'census_data_file
' --checksum-algorithm sha256
Si la solicitud funciona correctamente, verá una salida JSON como la siguiente:
{ "ServerSideEncryption": "AES256", "ChecksumAlgorithm": "SHA256", "Bucket": "
amzn-s3-demo-bucket1
", "Key": "census_data_file", "UploadId": "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz" }
nota
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. Deberá usar los valores UploadId
, Key
y Bucket
para los pasos posteriores, así que asegúrese de guardarlos.
Además, si utiliza una carga multiparte con sumas de comprobación adicionales, los números de partes deben ser consecutivos. Si utiliza números de partes no consecutivos, la solicitud complete-multipart-upload
puede generar un HTTP 500
Internal Server Error
.
Paso 4: Carga de las partes de la carga multiparte
En este paso, cargará las partes de la carga multiparte en el bucket de S3. Utilice el comando upload-part
para cargar cada parte de forma individual. Este proceso requiere especificar el ID de carga, el número de parte y el archivo que se va a cargar para cada parte.
Carga de las partes
-
Al cargar una parte, además del ID de carga, debe especificar un número de parte mediante el argumento
--part-number
. 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 debe estar en una secuencia consecutiva (por ejemplo: puede ser 1, 2 o 3). Si carga una parte nueva con el mismo número que una parte ya cargada, se sobrescribirá la parte existente. -
Utilice el comando
upload-part
para cargar cada parte de la carga multiparte. El--upload-id
es el mismo que estaba en la salida creada por el comandocreate-multipart-upload
del Paso 3. Para cargar la primera parte de los datos, utilice el siguiente comando:aws s3api upload-part --bucket
amzn-s3-demo-bucket1
--key 'census_data_file
' --part-number1
--bodycensus-part00
--upload-id "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz
" --checksum-algorithmSHA256
Al completar cada comando
upload-part
, debería ver un resultado similar al del siguiente ejemplo:{ "ServerSideEncryption": "AES256", "ETag": "\"e611693805e812ef37f96c9937605e69\"", "ChecksumSHA256": "QLl8R4i4+SaJlrl8ZIcutc5TbZtwt2NwB8lTXkd3GH0=" }
-
Para las partes siguientes, incremente el número de parte en consecuencia:
aws s3api upload-part --bucket
amzn-s3-demo-bucket1
--key 'census_data_file
' --part-number<part-number>
--body <file-path> --upload-id "<your-upload-id>" --checksum-algorithm SHA256Por ejemplo, use el siguiente comando para cargar la segunda parte:
aws s3api upload-part --bucket
amzn-s3-demo-bucket1
--key 'census_data_file' --part-number 2 --body census-part01 --upload-id "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz" --checksum-algorithm SHA256Amazon S3 devuelve una etiqueta de entidad (ETag) y sumas de comprobación adicionales para cada parte cargada como un encabezado en la respuesta.
-
Siga utilizando el comando
upload-part
hasta que haya cargado todas las partes del objeto.
Paso 5: Muestra de todas las partes de la carga multiparte
Para completar la carga multiparte, necesitará una lista de todas las partes que se han cargado para esa carga multiparte específica. El resultado del comando list-parts
proporciona información como el nombre del bucket, la clave, el ID de carga, el número de parte, la ETag, las sumas de verificación adicionales, etc. Resulta útil guardar este resultado en un archivo para poder utilizarlo en el siguiente paso al completar el proceso de carga multiparte. Puede crear un archivo de salida JSON llamado parts.json
mediante el siguiente método.
Creación de un archivo que muestre todas las partes
-
Para generar un archivo JSON con los detalles de todas las partes cargadas, utilice el siguiente comando
list-parts
. Sustituya
por el nombre real del bucket yamzn-s3-demo-bucket1
<your-upload-id>
por el ID de carga que recibió en el Paso 3. Para obtener más información sobre el comandolist-parts
, consulte list-parts en la Guía del usuario de AWS Command Line Interface.aws s3api list-parts --bucket
amzn-s3-demo-bucket1
--key 'census_data_file
' --upload-id<your-upload-id>
--query '{Parts: Parts[*].{PartNumber: PartNumber, ETag: ETag, ChecksumSHA256: ChecksumSHA256}}' --output json > parts.jsonSe ha generado un nuevo archivo llamado
parts.json
. El archivo contiene la información en formato JSON de todas las partes cargadas. El archivoparts.json
incluye información esencial para cada parte de la carga multiparte, como los números de parte y sus correspondientes valores de ETag, que son necesarios para completar el proceso de carga multiparte. -
Abra
parts.json
con cualquier editor de texto o a través del terminal. Este es el ejemplo de salida:{ "Parts": [ { "PartNumber": 1, "ETag": "\"3c3097f89e2a2fece47ac54b243c9d97\"", "ChecksumSHA256": "fTPVHfyNHdv5VkR4S3EewdyioXECv7JBxN+d4FXYYTw=" }, { "PartNumber": 2, "ETag": "\"03c71cc160261b20ab74f6d2c476b450\"", "ChecksumSHA256": "VDWTa8enjOvULBAO3W2a6C+5/7ZnNjrnLApa1QVc3FE=" }, { "PartNumber": 3, "ETag": "\"81ae0937404429a97967dffa7eb4affb\"", "ChecksumSHA256": "cVVkXehUlzcwrBrXgPIM+EKQXPUvWist8mlUTCs4bg8=" } ] }
Paso 6: Completar la carga multiparte
Tras cargar todas las partes de la carga multiparte y mostrarlas, el paso final consiste en completar la carga multiparte. En este paso, se combinan todas las partes cargadas en un único objeto del bucket de S3.
nota
Puede calcular la suma de verificación del objeto antes de llamar a complete-multipart-upload
al incluir --checksum-sha256
en la solicitud. Si las sumas de comprobación no coinciden, Amazon S3 produce un error en la solicitud. Para obtener más información, consulte complete-multipart-upload en la Guía del usuario de AWS Command Line Interface.
Completar la carga multiparte
Para finalizar la carga multiparte, use el comando complete-multipart-upload
. Este comando requiere el archivo parts.json
creado en el Paso 5, el nombre del bucket y el ID de carga. Sustituya <
por el nombre del bucket y amzn-s3-demo-bucket1
><your-upload-id>
por el ID de carga de parts.json
.
aws s3api complete-multipart-upload --multipart-upload file://parts.json --bucket
amzn-s3-demo-bucket1
--key 'census_data_file' --upload-id <your-upload-id>
Este es el ejemplo de salida:
{ "ServerSideEncryption": "AES256", "Location": "https://
amzn-s3-demo-bucket1
.s3.us-east-2.amazonaws.com/census_data_file", "Bucket": "amzn-s3-demo-bucket1
", "Key": "census_data_file", "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"", "ChecksumSHA256": "aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=-3" }
nota
No elimine todavía los archivos de partes individuales. Necesitará las partes individuales para poder realizar sumas de comprobación en ellas y comprobar la integridad del objeto fusionado.
Paso 7: Confirmación de que el objeto se ha cargado en el bucket
Tras completar la carga multiparte, puede comprobar que el objeto se ha cargado correctamente en el bucket de S3. Para mostrar los objetos del bucket y confirmar la presencia del archivo recién cargado, utilice el comando list-objects-v2
Muestra del objeto cargado
Para mostrar los objetos del bucket, utilice el comando list-objects-v2
. Sustituya
por el nombre real del bucket: amzn-s3-demo-bucket1
aws s3api list-objects-v2 --bucket
amzn-s3-demo-bucket1
Este comando devuelve una lista de objetos del bucket. Busque el archivo cargado (por ejemplo, census_data_file
) en la lista de objetos.
Para obtener más información, consulte la sección de Ejemplos del comando list-objects-v2
en la Guía del usuario de AWS Command Line Interface.
Paso 8: Comprobación de la integridad del objeto con una suma de comprobación MD5
Al cargar un objeto, puede especificar un algoritmo de suma de comprobación para que lo utilice Amazon S3. De forma predeterminada, Amazon S3 almacena el resumen MD5 de bytes como ETag del objeto. Para cargas multiparte, la ETag no es la suma de comprobación de todo el objeto, sino más bien una combinación de sumas de comprobación para cada parte individual.
Verificación de la integridad del objeto mediante una suma de verificación MD5
-
Para recuperar la ETag del objeto cargado, realice una solicitud
head-object
:aws s3api head-object --bucket
amzn-s3-demo-bucket1
--keycensus_data_file
Este es el ejemplo de salida:
{ "AcceptRanges": "bytes", "LastModified": "2024-07-26T19:04:13+00:00", "ContentLength": 16106127360, "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"", "ContentType": "binary/octet-stream", "ServerSideEncryption": "AES256", "Metadata": {} }
Esta ETag tiene un "-3" adjunto al final. Esto indica que el objeto se cargó en tres partes mediante la carga multiparte.
-
A continuación, calcule la suma de verificación MD5 de cada parte mediante el comando
md5sum
. Asegúrese de proporcionar la ruta correcta a los archivos de partes:md5sum census-part*
Este es el ejemplo de salida:
e611693805e812ef37f96c9937605e69 census-part00 63d2d5da159178785bfd6b6a5c635854 census-part01 95b87c7db852451bb38b3b44a4e6d310 census-part02
-
Para este paso, combine manualmente los hashes MD5 en una sola cadena. A continuación, ejecute el siguiente comando para convertir la cadena en binaria y calcular la suma de comprobación MD5 del valor binario:
echo "
e611693805e812ef37f96c9937605e6963d2d5da159178785bfd6b6a5c63585495b87c7db852451bb38b3b44a4e6d310
" | xxd -r -p | md5sumEste es el ejemplo de salida:
f453c6dccca969c457efdf9b1361e291 -
Este valor hash debe coincidir con el valor hash del valor de la ETag original del Paso 1, lo que valida la integridad del objeto
census_data_file
.
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. Si quiere recuperar los valores de la suma de comprobación de partes individuales de las cargas multiparte que aún están en progreso, puede utilizar list-parts
.
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.
Paso 9: Comprobación de la integridad del objeto con una suma de comprobación adicional
En este paso, este tutorial utiliza SHA-256 como suma de comprobación adicional para validar la integridad del objeto. Si ha utilizado una suma de comprobación adicional diferente, utilice ese valor de suma de comprobación en su lugar.
Verificación de la integridad del objeto con SHA256
-
Ejecute el siguiente comando en el terminal, incluido el argumento
--checksum-mode enabled
, para mostrar el valorChecksumSHA256
del objeto:aws s3api head-object --bucket
amzn-s3-demo-bucket1
--key census_data_file --checksum-mode enabledEste es el ejemplo de salida:
{ "AcceptRanges": "bytes", "LastModified": "2024-07-26T19:04:13+00:00", "ContentLength": 16106127360, "ChecksumSHA256": "aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=-3", "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"", "ContentType": "binary/octet-stream", "ServerSideEncryption": "AES256", "Metadata": {} }
-
Use los siguientes comandos para decodificar los valores
ChecksumSHA256
de las partes individuales en base64 y guardarlos en un archivo binario llamadooutfile
. Estos valores se pueden encontrar en el archivoparts.json
. Sustituya las cadenas base64 del ejemplo por los valoresChecksumSHA256
reales.echo "
QLl8R4i4+SaJlrl8ZIcutc5TbZtwt2NwB8lTXkd3GH0=
" | base64 --decode >> outfile echo "xCdgs1K5Bm4jWETYw/CmGYr+m6O2DcGfpckx5NVokvE=
" | base64 --decode >> outfile echo "f5wsfsa5bB+yXuwzqG1Bst91uYneqGD3CCidpb54mAo=
" | base64 --decode >> outfile -
Ejecute el siguiente comando para calcular la suma de comprobación SHA256 de
outfile
:sha256sum outfile
Este es el ejemplo de salida:
688f04a24b42768b6353c06ae3a0eb3c2c50086b8670f221279d67a16b3a86f9 outfile
En el siguiente paso, tome el valor hash y conviértalo en un valor binario. Este valor binario debe coincidir con el valor
ChecksumSHA256
del Paso 1. -
Convierta la suma de comprobación SHA256 del Paso 3 en binaria y, a continuación, codifíquela en base64 para comprobar que coincide con el valor
ChecksumSHA256
del Paso 1:echo "688f04a24b42768b6353c06ae3a0eb3c2c50086b8670f221279d67a16b3a86f9" | xxd -r -p | base64
Este es el ejemplo de salida:
aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=
Esta salida debería confirmar que la salida en base64 coincide con el valor
ChecksumSHA256
de la salida del comandohead-object
. Si la salida coincide con el valor de la suma de comprobación, el objeto es válido.
importante
-
Cuando indica a Amazon S3 que utilice sumas de comprobación adicionales, Amazon S3 calcula los valores de la suma de comprobación de cada parte y almacena estos valores.
-
Si quiere recuperar los valores de la suma de comprobación de partes individuales de las cargas multiparte que aún están en progreso, puede utilizar el comando
list-parts
.
Paso 10: Eliminar los recursos
Si desea limpiar los archivos creados en este tutorial, use el siguiente método. Para obtener instrucciones sobre cómo eliminar los archivos cargados en el bucket de S3, consulte Eliminación de objetos de Amazon S3.
Elimine los archivos locales creados en el Paso 1:
Para eliminar los archivos que haya creado para la carga multiparte, ejecute el siguiente comando desde el directorio de trabajo:
rm
census-data.bin
census-part* outfile parts.json