Tutorial: carica un oggetto tramite caricamento in più parti e verifica l'integrità dei dati - Amazon Simple Storage Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial: carica un oggetto tramite caricamento in più parti e verifica l'integrità dei dati

Il caricamento in più parti consente di caricare un singolo oggetto come un insieme di parti. Ciascuna parte è una parte contigua dei dati dell'oggetto. È possibile caricare queste parti dell'oggetto in modo indipendente e in qualsiasi ordine. Se la trasmissione di una parte non riesce, è possibile ritrasmettere tale parte senza influire sulle altre. Una volta caricate tutte le parti dell'oggetto, Amazon S3 le assembla e crea l'oggetto. In generale, quando la dimensione dell'oggetto raggiunge i 100 MB, si consiglia di valutare la possibilità di eseguire caricamenti in più parti anziché caricare l'oggetto in una singola operazione. Per ulteriori informazioni sui caricamenti in più parti, consulta. Caricamento e copia di oggetti utilizzando il caricamento in più parti Per i limiti relativi ai caricamenti in più parti, consulta. Limiti del caricamenti in più parti di Amazon S3

Puoi utilizzare i checksum per verificare che le risorse non vengano alterate quando vengono copiate. L'esecuzione di un checksum consiste nell'utilizzare un algoritmo per iterare in sequenza su ogni byte di un file. Amazon S3 offre diverse opzioni di checksum per verificare l'integrità dei dati. Ti consigliamo di eseguire questi controlli di integrità come best practice di durabilità e per confermare che ogni byte venga trasferito senza alterazioni. Amazon S3 supporta anche i seguenti algoritmi: SHA -1, SHA -256 e. CRC32 CRC32C Amazon S3 utilizza uno o più di questi algoritmi per calcolare un valore di checksum aggiuntivo e archiviarlo come parte dei metadati dell'oggetto. Per ulteriori informazioni sui checksum, consulta Verifica dell'integrità degli oggetti.

Obiettivo

In questo tutorial, imparerai come caricare un oggetto su Amazon S3 utilizzando un caricamento in più parti e un checksum aggiuntivo SHA -256 tramite AWS Interfaccia a riga di comando (AWS CLI). Imparerai anche come verificare l'integrità dei dati dell'oggetto calcolando l'MD5hash e il checksum SHA -256 dell'oggetto caricato.

Prerequisiti

  • Prima di iniziare questo tutorial, assicurati di avere accesso a un bucket Amazon S3 su cui caricare. Per ulteriori informazioni, consulta Creazione di un bucket.

  • Devi avere il AWS CLIinstallato e configurato. Se non hai il AWS CLIinstallato, vedi Installare o aggiornare alla versione più recente di AWS CLI nella AWS Command Line Interface Guida per l'utente.

  • In alternativa, puoi correre AWS CLIcomandi dalla console utilizzando AWS CloudShell. AWS CloudShell è una shell preautenticata basata su browser che è possibile avviare direttamente da AWS Management Console. Per ulteriori informazioni, vedi Cos'è CloudShell? e Guida introduttiva a AWS CloudShell nella AWS CloudShell Guida per l'utente.

Passaggio 1: creare un file di grandi dimensioni

Se hai già un file pronto per il caricamento, puoi utilizzarlo per questo tutorial. Altrimenti, crea un file da 15 MB utilizzando i seguenti passaggi. Per i limiti relativi ai caricamenti in più parti, consulta. Limiti del caricamenti in più parti di Amazon S3

Per creare un file di grandi dimensioni

Utilizza uno dei seguenti comandi per creare il file, a seconda del sistema operativo in uso.

Linux o macOS:

Per creare un file da 15 MB, apri il terminale locale ed esegui il seguente comando:

dd if=/dev/urandom of=census-data.bin bs=1M count=15

Questo comando crea un file denominato census-data.bin riempito con byte casuali, con una dimensione di 15 MB.

Windows

Per creare un file da 15 MB, apri il terminale locale ed esegui il seguente comando:

fsutil file createnew census-data.bin 15728640

Questo comando crea un file denominato census-data.bin con una dimensione di 15 MB di dati arbitrari (15728640 byte).

Passaggio 2: suddividere il file in più file

Per eseguire il caricamento in più parti, devi dividere il file di grandi dimensioni in parti più piccole. Puoi quindi caricare le parti più piccole utilizzando il processo di caricamento in più parti. Questo passaggio dimostra come suddividere il file di grandi dimensioni creato nel passaggio 1 in parti più piccole. L'esempio seguente utilizza un file da 15 MB denominatocensus-data.bin.

Per dividere un file di grandi dimensioni in parti

Linux o macOS:

Per dividere il file di grandi dimensioni in parti da 5 MB, usa il split comando. Apri il tuo terminale ed esegui quanto segue:

split -b 5M -d census-data.bin census-part

Questo comando census-data.bin si divide in parti da 5 MB denominatecensus-part**, dove ** è un suffisso numerico a partire da. 00

Windows

Per dividere il file di grandi dimensioni, usa. PowerShell Apri Powershell ed esegui lo script seguente:

$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()

Questo PowerShell script legge il file di grandi dimensioni in blocchi di 5 MB e scrive ogni blocco in un nuovo file con un suffisso numerico.

Dopo aver eseguito il comando appropriato, dovresti vedere le parti nella directory in cui hai eseguito il comando. Ogni parte avrà un suffisso corrispondente al relativo numero di parte, ad esempio:

census-part00 census-part01 census-part02

Fase 3: Creare il caricamento multiparte con un checksum aggiuntivo

Per iniziare il processo di caricamento in più parti, devi creare la richiesta di caricamento in più parti. Questo passaggio prevede l'avvio del caricamento in più parti e la specificazione di un checksum aggiuntivo per l'integrità dei dati. L'esempio seguente utilizza il checksum -256. SHA Se desiderate fornire dei metadati che descrivano l'oggetto da caricare, dovete fornirli nella richiesta per avviare il caricamento in più parti.

Nota

In questo passaggio e nei passaggi successivi, questo tutorial utilizza l'SHAalgoritmo aggiuntivo -256. Facoltativamente, è possibile utilizzare un altro checksum aggiuntivo per questi passaggi, ad esempio CRC32CRC32C, o -1. SHA Se utilizzi un algoritmo diverso, devi utilizzarlo durante i passaggi del tutorial.

Per avviare il caricamento in più parti

Nel tuo terminale, usa il seguente create-multipart-upload comando per avviare un caricamento in più parti per il tuo bucket. amzn-s3-demo-bucket1Sostituiscilo con il nome effettivo del bucket. Inoltre, sostituiscilo census_data_file con il nome di file che hai scelto. Questo nome di file diventa la chiave dell'oggetto al termine del caricamento.

aws s3api create-multipart-upload --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --checksum-algorithm sha256

Se la richiesta ha esito positivo, verrà visualizzato un JSON output simile al seguente:

{ "ServerSideEncryption": "AES256", "ChecksumAlgorithm": "SHA256", "Bucket": "amzn-s3-demo-bucket1", "Key": "census_data_file", "UploadId": "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz" }
Nota

Quando invii una richiesta di avvio di un caricamento in più parti, Amazon S3 restituisce una risposta con un ID di caricamento, che è un identificativo univoco per il caricamento in più parti. È necessario includere questo ID di caricamento ogni volta che si caricano o si elencano le parti oppure ogni volta che si completa o si interrompe un caricamento. Dovrai utilizzare i Bucket valori UploadIdKey, e per i passaggi successivi, quindi assicurati di salvarli.

Inoltre, se utilizzi il caricamento in più parti con checksum aggiuntivi, i codici articolo devono essere consecutivi. Se utilizzi numeri di parte non consecutivi, la complete-multipart-upload richiesta può generare un. HTTP 500 Internal Server Error

Fase 4: Caricate le parti del caricamento in più parti

In questo passaggio, caricherai le parti del caricamento in più parti nel tuo bucket S3. Usa il upload-part comando per caricare ogni parte singolarmente. Questo processo richiede di specificare l'ID di caricamento, il numero di parte e il file da caricare per ogni parte.

Per caricare le parti
  1. Quando si carica una parte, oltre all'ID di caricamento, è necessario specificare un numero di parte utilizzando l'--part-numberargomento. È possibile scegliere qualsiasi numero compreso tra 1 e 10.000. Il numero della parte identifica in modo univoco una parte e la relativa posizione nell'oggetto che si sta caricando. Il numero di parte scelto deve essere in una sequenza consecutiva (ad esempio, può essere 1, 2 o 3). Se si carica una nuova parte che utilizza lo stesso numero di una parte caricata in precedenza, quest'ultima viene sovrascritta.

  2. Utilizzate il upload-part comando per caricare ogni parte del caricamento in più parti. --upload-idÈ lo stesso dell'output creato dal create-multipart-upload comando nel passaggio 3. Per caricare la prima parte dei tuoi dati, usa il seguente comando:

    aws s3api upload-part --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --part-number 1 --body census-part00 --upload-id "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz" --checksum-algorithm SHA256

    Al completamento di ogni upload-part comando, dovresti vedere un output simile al seguente esempio:

    { "ServerSideEncryption": "AES256", "ETag": "\"e611693805e812ef37f96c9937605e69\"", "ChecksumSHA256": "QLl8R4i4+SaJlrl8ZIcutc5TbZtwt2NwB8lTXkd3GH0=" }
  3. Per le parti successive, incrementate il numero della parte di conseguenza:

    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 SHA256

    Ad esempio, utilizzate il comando seguente per caricare la seconda 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 SHA256

    Amazon S3 restituisce un tag di entità (ETag) e checksum aggiuntivi per ogni parte caricata come intestazione nella risposta.

  4. Continua a utilizzare il upload-part comando fino a caricare tutte le parti dell'oggetto.

Passaggio 5: Elenca tutte le parti del caricamento in più parti

Per completare il caricamento in più parti, avrai bisogno di un elenco di tutte le parti che sono state caricate per quello specifico caricamento in più parti. L'output del list-parts comando fornisce informazioni come il nome del bucket, la chiave, l'ID di caricamento, il numero di parteeTag, checksum aggiuntivi e altro ancora. È utile salvare questo output in un file in modo da poterlo utilizzare per il passaggio successivo al completamento del processo di caricamento in più parti. È possibile creare un file JSON di output richiamato parts.json utilizzando il metodo seguente.

Per creare un file che elenchi tutte le parti
  1. Per generare un JSON file con i dettagli di tutte le parti caricate, utilizzate il seguente list-parts comando. Sostituiscilo amzn-s3-demo-bucket1 con il nome effettivo del bucket e <your-upload-id> con l'ID di caricamento che hai ricevuto nel passaggio 3. Per ulteriori informazioni sul list-parts comando, vedere list-parts nella AWS Command Line Interface Guida per l'utente.

    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.json

    parts.jsonViene generato un nuovo file chiamato. Il file contiene le informazioni JSON formattate per tutte le parti caricate. Il parts.json file include informazioni essenziali per ogni parte del caricamento in più parti, come i numeri di parte e i ETag valori corrispondenti, necessari per completare il processo di caricamento in più parti.

  2. Apri parts.json utilizzando qualsiasi editor di testo o tramite il terminale. Ecco l'output di esempio:

    { "Parts": [ { "PartNumber": 1, "ETag": "\"3c3097f89e2a2fece47ac54b243c9d97\"", "ChecksumSHA256": "fTPVHfyNHdv5VkR4S3EewdyioXECv7JBxN+d4FXYYTw=" }, { "PartNumber": 2, "ETag": "\"03c71cc160261b20ab74f6d2c476b450\"", "ChecksumSHA256": "VDWTa8enjOvULBAO3W2a6C+5/7ZnNjrnLApa1QVc3FE=" }, { "PartNumber": 3, "ETag": "\"81ae0937404429a97967dffa7eb4affb\"", "ChecksumSHA256": "cVVkXehUlzcwrBrXgPIM+EKQXPUvWist8mlUTCs4bg8=" } ] }

Fase 6: Completa il caricamento multiparte

Dopo aver caricato tutte le parti del caricamento in più parti e averle elencate, il passaggio finale consiste nel completare il caricamento in più parti. Questo passaggio unisce tutte le parti caricate in un unico oggetto nel bucket S3.

Nota

Puoi calcolare il checksum dell'oggetto prima della chiamata complete-multipart-upload --checksum-sha256 includendolo nella richiesta. Se i checksum non corrispondono, Amazon S3 non riesce a completare la richiesta. Per ulteriori informazioni, consulta complete-multipart-upload nella AWS Command Line Interface Guida per l'utente.

Per completare il caricamento in più parti

Per finalizzare il caricamento in più parti, usa il comando. complete-multipart-upload Questo comando richiede il parts.json file creato nel passaggio 5, il nome del bucket e l'ID di caricamento. <amzn-s3-demo-bucket1>Sostituiscilo con il nome del bucket e <your-upload-id> con l'ID di caricamento di. 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>

Ecco l'output di esempio:

{ "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

Non eliminate ancora i singoli file delle parti. Avrete bisogno delle singole parti in modo da poter eseguire dei checksum su di esse per verificare l'integrità dell'oggetto unito.

Passaggio 7: Conferma che l'oggetto sia caricato nel tuo bucket

Dopo aver completato il caricamento multiparte, puoi verificare che l'oggetto sia stato caricato correttamente nel tuo bucket S3. Per elencare gli oggetti nel bucket e confermare la presenza del file appena caricato, usa il comando list-objects-v2

Per elencare l'oggetto caricato

Per elencare gli oggetti presenti nel tuo, usa il bucket di list-objects-v2 comandi. Sostituisci amzn-s3-demo-bucket1 con il nome effettivo del bucket:

aws s3api list-objects-v2 --bucket amzn-s3-demo-bucket1

Questo comando restituisce un elenco di oggetti nel bucket. Cerca il file caricato (ad esempio,census_data_file) nell'elenco degli oggetti.

Per ulteriori informazioni, consultate la sezione Esempi relativa al list-objects-v2 comando in AWS Command Line Interface Guida per l'utente.

Fase 8: Verifica l'integrità dell'oggetto con un MD5 checksum

Quando carichi un oggetto, puoi specificare un algoritmo di checksum da utilizzare in Amazon S3. Per impostazione predefinita, Amazon S3 memorizza il MD5 digest di byte come oggetto. ETag Per i caricamenti in più parti, non ETag è il checksum per l'intero oggetto, ma piuttosto un insieme di checksum per ogni singola parte.

Per verificare l'integrità dell'oggetto utilizzando un checksum MD5
  1. Per recuperare l'ETagoggetto caricato, esegui una head-object richiesta:

    aws s3api head-object --bucket amzn-s3-demo-bucket1 --key census_data_file

    Ecco l'output di esempio:

    { "AcceptRanges": "bytes", "LastModified": "2024-07-26T19:04:13+00:00", "ContentLength": 16106127360, "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"", "ContentType": "binary/octet-stream", "ServerSideEncryption": "AES256", "Metadata": {} }

    Questo etag ha «-3" aggiunto alla fine. Ciò indica che l'oggetto è stato caricato in tre parti utilizzando il caricamento in più parti.

  2. Quindi, calcola il MD5 checksum di ogni parte usando il md5sum comando. Assicuratevi di fornire il percorso corretto ai file delle parti:

    md5sum census-part*

    Ecco l'output di esempio:

    e611693805e812ef37f96c9937605e69 census-part00 63d2d5da159178785bfd6b6a5c635854 census-part01 95b87c7db852451bb38b3b44a4e6d310 census-part02
  3. Per questo passaggio, combina manualmente gli MD5 hash in un'unica stringa. Quindi, esegui il comando seguente per convertire la stringa in binario e calcolare il MD5 checksum del valore binario:

    echo "e611693805e812ef37f96c9937605e6963d2d5da159178785bfd6b6a5c63585495b87c7db852451bb38b3b44a4e6d310" | xxd -r -p | md5sum

    Ecco l'output di esempio:

    f453c6dccca969c457efdf9b1361e291 -

    Questo valore hash deve corrispondere al valore hash del ETag valore originale nel passaggio 1, che convalida l'integrità dell'oggetto. census_data_file

Quando chiedi ad Amazon S3 di utilizzare checksum aggiuntivi, Amazon S3 calcola il valore del checksum per ogni parte e archivia i valori. Se desideri recuperare i valori di checksum per singole parti di caricamenti in più parti ancora in corso, puoi utilizzare. list-parts

Per ulteriori informazioni sul funzionamento dei checksum con oggetti in più parti, consulta Verifica dell'integrità degli oggetti.

Passaggio 9: verifica l'integrità dell'oggetto con un checksum aggiuntivo

In questo passaggio, questo tutorial utilizza SHA -256 come checksum aggiuntivo per convalidare l'integrità dell'oggetto. Se hai utilizzato un checksum aggiuntivo diverso, usa invece quel valore di checksum.

Per verificare l'integrità dell'oggetto con SHA256
  1. Esegui il seguente comando nel tuo terminale, incluso l'--checksum-mode enabledargomento, per visualizzare il ChecksumSHA256 valore del tuo oggetto:

    aws s3api head-object --bucket amzn-s3-demo-bucket1 --key census_data_file --checksum-mode enabled

    Ecco l'output di esempio:

    { "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": {} }
  2. Utilizzate i seguenti comandi per decodificare i ChecksumSHA256 valori delle singole parti in base64 e salvarli in un file binario chiamato. outfile Questi valori possono essere trovati nel tuo file. parts.json Sostituisci le stringhe base64 di esempio con i tuoi valori effettivi. ChecksumSHA256

    echo "QLl8R4i4+SaJlrl8ZIcutc5TbZtwt2NwB8lTXkd3GH0=" | base64 --decode >> outfile echo "xCdgs1K5Bm4jWETYw/CmGYr+m6O2DcGfpckx5NVokvE=" | base64 --decode >> outfile echo "f5wsfsa5bB+yXuwzqG1Bst91uYneqGD3CCidpb54mAo=" | base64 --decode >> outfile
  3. Eseguite il comando seguente per calcolare il SHA256 checksum di: outfile

    sha256sum outfile

    Ecco l'output di esempio:

    688f04a24b42768b6353c06ae3a0eb3c2c50086b8670f221279d67a16b3a86f9 outfile

    Nel passaggio successivo, prendi il valore hash e convertilo in un valore binario. Questo valore binario deve corrispondere al ChecksumSHA256 valore del passaggio 1.

  4. Converti il SHA256 checksum del passaggio 3 in binario, quindi codificalo in base64 per verificare che corrisponda al ChecksumSHA256 valore del passaggio 1:

    echo "688f04a24b42768b6353c06ae3a0eb3c2c50086b8670f221279d67a16b3a86f9" | xxd -r -p | base64

    Ecco l'output di esempio:

    aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=

    Questo output dovrebbe confermare che l'output base64 corrisponde al ChecksumSHA256 valore dell'output del head-object comando. Se l'output corrisponde al valore del checksum, l'oggetto è valido.

Importante
  • Quando si richiede ad Amazon S3 di utilizzare checksum aggiuntivi, Amazon S3 calcola i valori di checksum per ogni parte e li memorizza.

  • Se desideri recuperare i valori di checksum per singole parti di caricamenti multiparte ancora in corso, puoi usare il comando. list-parts

Fase 10: eliminare le risorse

Se vuoi ripulire i file creati in questo tutorial, usa il seguente metodo. Per istruzioni su come eliminare i file caricati nel bucket S3, consulta. Eliminazione di oggetti Amazon S3

Eliminare i file locali creati nel passaggio 1:

Per rimuovere i file che hai creato per il caricamento in più parti, esegui il comando seguente dalla tua directory di lavoro:

rm census-data.bin census-part* outfile parts.json