Caricamento e copia di oggetti utilizzando il caricamento in più parti - Amazon Simple Storage Service

Caricamento e copia di oggetti utilizzando il caricamento in più parti

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.

Il caricamento in più parti comporta i vantaggi riportati di seguito.

  • Velocità effettiva migliorata: puoi caricare le parti in parallelo per migliorare la velocità effettiva.

  • Ripristino rapido dai problemi di rete: la dimensione più piccola delle parti riduce al minimo l'impatto del riavvio di un caricamento fallito a causa di un errore di rete.

  • Messa in pausa e ripresa dei caricamenti dell'oggetto: puoi caricare le parti dell'oggetto nel corso del tempo. Una volta avviato, un caricamento in più parti continua finché non viene completato o interrotto in modo esplicito.

  • Avvio di un caricamento prima di conoscere la dimensione finale dell'oggetto: puoi caricare un oggetto mentre viene creato.

È consigliabile utilizzare il caricamento in più parti come indicato di seguito:

  • Se si stanno caricando oggetti di grandi dimensioni in una rete a banda larga stabile, utilizzare il caricamento in più parti per ottimizzare l'uso della larghezza di banda disponibile caricando le parti degli oggetti in parallelo per garantire prestazioni ottimali in più thread.

  • Se il caricamento viene eseguito su una rete non stabile, utilizzare il caricamento in più parti per aumentare la resilienza agli errori di rete evitando di riavviare più volte il caricamento. Quando si utilizza il caricamento in più parti, è necessario ritentare il caricamento solo delle parti interrotte durante il caricamento stesso. Non è necessario riavviare il caricamento dell'oggetto dall'inizio.

Processo di caricamento in più parti

Il caricamento in più parti è un processo in tre fasi: avvio del caricamento, caricamento delle parti dell'oggetto e, una volta completato il caricamento di tutte le parti, completamento del caricamento in più parti. Quando riceve la conferma di completamento del caricamento in più parti, Amazon S3 crea l'oggetto dalle singole parti caricate. È quindi possibile accedere all'oggetto così come avviene con qualsiasi altro oggetto nel bucket.

È possibile elencare tutti i caricamenti in più parti in corso oppure ottenere un elenco delle parti caricate per un caricamento in più parti specifico. Ognuna di queste operazioni viene descritta in questa sezione.

Avvio del caricamento in più parti

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. Se si desidera fornire metadata che descrivano l'oggetto in fase di caricamento, è necessario specificarli nella richiesta di avvio del caricamento in più parti.

Caricamento delle parti

Quando si carica una parte, oltre all'ID di caricamento è necessario specificare il numero della parte. È 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 della parte scelto non deve essere in sequenza (ad esempio può essere 1, 5 e 14). Se si carica una nuova parte che utilizza lo stesso numero di una parte caricata in precedenza, quest'ultima viene sovrascritta.

Ogni volta che carichi una parte, Amazon S3 restituisce un'intestazione tag di entità (ETag) nella risposta corrispondente. Per ogni caricamento di parte è necessario registrare il numero della parte e il valore ETag. Occorre includere questi valori nella successiva richiesta di complemento del caricamento in più parti.

Nota

Dopo aver avviato un caricamento in più parti e aver caricato una o più parti, è necessario completare o interrompere questa operazione per interrompere l'addebito per l'archiviazione delle parti caricate. Solo dopo aver completato o interrotto un caricamento in più parti, Amazon S3 libererà spazio di storage per le parti e interromperà l'addebito per lo storage delle parti.

Una volta interrotto, non è possibile caricare di nuovo una parte che utilizza tale ID di caricamento. Se eventuali caricamenti di parti erano in corso, possono essere eseguiti correttamente o meno anche dopo l'interruzione del caricamento. Per liberare completamente lo spazio di archiviazione utilizzato da tutte le parti, è necessario interrompere un caricamento in più parti solo al termine di tutti i caricamenti delle parti.

Completamento del caricamento in più parti

Una volta completato un caricamento in più parti, Amazon S3 crea un oggetto concatenando le parti in ordine crescente in base al numero della parte. Se nella richiesta di avvio del caricamento in più parti sono stati forniti i metadati dell'oggetto, Amazon S3 li associa all'oggetto. Una volta completata la richiesta, le parti non esisteranno più.

La richiesta di completamento del caricamento in più parti deve includere l'ID di caricamento e un elenco sia dei numeri delle parti sia dei valori ETag corrispondenti. La risposta di Amazon S3 include un ETag che identifica in modo univoco i dati oggetto combinati. Questo ETag non è necessariamente un hash MD5 dei dati dell'oggetto.

Chiamate di caricamento in più parti di esempio

Per questo esempio, si supponga di generare un caricamento in più parti di un file da 100 GB. In questo caso, sarebbero disponibili le seguenti chiamate API per l'intero processo. Ci sarebbero un totale di 1002 chiamate API.

Elenchi dei caricamenti in più parti

È possibile elencare le parti di un caricamento in più parti specifico o tutti i caricamenti in più parti in corso. L'operazione di creazione dell'elenco delle parti restituisce informazioni sulle parti coinvolte in un caricamento in più parti specifico. Per ogni richiesta di elenco delle parti, Amazon S3 restituisce informazioni sulle parti per il caricamento in più parti specificato, fino a un massimo di 1000 parti. Se nel caricamento sono presenti più di 1000 parti, è necessario inviare una serie di richieste di elenco delle parti per recuperare tutte le parti. Tieni presente che l'elenco di parti restituito non include le parti per le quali non è stato completato il caricamento. L'operazione list multipart uploads (elenco dei caricamenti in più parti) consente di ottenere l'elenco dei caricamenti in più parti in corso.

Un caricamento in più parti in corso è un caricamento avviato, ma non ancora completato o annullato. Ogni richiesta restituisce al massimo 1.000 caricamenti in più parti. Se sono in corso più di 1.000 caricamenti in più parti, è necessario inviare richieste aggiuntive per recuperare i caricamenti rimanenti. Utilizza l'elenco restituito solo per la verifica. Non utilizzarlo per inviare la richiesta complete multipart upload (completamento del caricamento in più parti). Al contrario, mantieni il tuo elenco dei numeri delle parti specificato durante il caricamento delle parti e i valori ETag corrispondenti restituiti da Amazon S3.

Checksum con operazioni di caricamento in più parti

Quando carichi un oggetto in Amazon S3 puoi specificare un algoritmo di checksum che Amazon S3 deve utilizzare. Per verificare l'integrità dei dati Amazon S3 utilizza MD5 per impostazione di default, tuttavia puoi specificare di usare un algoritmo di checksum aggiuntivo. Quando utilizza MD5, Amazon S3 calcola il checksum dell'intero oggetto in più parti dopo il completamento del caricamento. Questo checksum non è un checksum dell'intero oggetto, ma il checksum dei checksum di ogni singola parte.

Quando chiedi ad Amazon S3 di utilizzare checksum aggiuntivi, Amazon S3 calcola il valore del checksum per ogni parte e archivia i valori. È possibile utilizzare l'API o l'SDK per recuperare il valore di checksum per le singole parti usando GetObject o HeadObject. Se desideri recuperare i valori di checksum per singole parti di caricamenti in più parti ancora in corso, puoi utilizzare ListParts.

Importante

Se utilizzi un caricamento in più parti con checksum aggiuntivi, i numeri delle parti in più parti devono essere consecutivi. Quando usi i checksum aggiuntivi, se tenti di completare una richiesta di caricamento in più parti con numeri parte non consecutivi, Amazon S3 genera un errore HTTP 500 Internal Server Error.

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

Operazioni simultanee di caricamento in più parti

In un ambiente di sviluppo distribuito è possibile che l'applicazione avvii più aggiornamenti sullo stesso oggetto contemporaneamente. L'applicazione potrebbe avviare vari caricamenti in più parti utilizzando la stessa chiave dell'oggetto. Per ciascuno di questi caricamenti, l'applicazione può quindi caricare le parti e inviare una richiesta di completamento del caricamento ad Amazon S3 per creare l'oggetto. Se per i bucket è abilitato il controllo delle versioni S3, il completamento di un caricamento in più parti crea sempre una nuova versione. Per i bucket per i quali non è abilitata la funzione Controllo delle versioni, è possibile che altre richieste ricevute nel periodo di tempo compreso tra l'avvio e il completamento di un caricamento in più parti abbiano la precedenza.

Nota

È possibile per altre richieste ricevute nel periodo di tempo compreso tra l'avvio e il completamento di un caricamento in più parti abbiano la precedenza. Ad esempio, se un'altra operazione elimina una chiave dopo l'avvio del caricamento in più parti con tale chiave ma prima del relativo completamento, la risposta relativa al complemento di tale caricamento potrebbe indicare che è stato creato un oggetto senza che sia stato mai visualizzato.

Caricamento in più parti e prezzi

Una volta avviato un caricamento in più parti, Amazon S3 mantiene tutte le parti finché il caricamento non viene completato o interrotto. Per tutta la durata del processo, all'utente vengono fatturati i costi per lo storage, la larghezza di banda e le richieste per questo tipo di caricamento e per le parti associate. Se interrompi il caricamento in più parti, Amazon S3 elimina i manufatti del caricamento e le parti caricate e all'utente non viene più addebitato alcun costo. Per ulteriori informazioni sui prezzi, consulta Prezzi di Amazon S3.

Supporto per l'API per il caricamento in più parti

Queste librerie forniscono un'astrazione di alto livello che facilita il caricamento in più parti degli oggetti. Tuttavia, se l'applicazione lo richiede, è possibile utilizzare direttamente REST API. Le sezioni seguenti della Documentazione di riferimento delle API di Amazon Simple Storage Service descrivono REST API per il caricamento in più parti.

Supporto AWS Command Line Interface per il caricamento in più parti

Le sezioni seguenti della AWS Command Line Interface descrivono le operazioni per il caricamento in più parti.

Supporto per l'SDK AWS per il caricamento in più parti

È possibile utilizzare un SDK AWS per caricare un oggetto in più parti. Per un elenco di SDK AWS supportati dall'azione API, consulta:

Autorizzazioni e API per il caricamento in più parti

Per eseguire le operazioni di caricamento in più parti, devi disporre delle autorizzazioni necessarie. Per concedere ai singoli utenti le autorizzazioni per eseguire queste operazioni, è possibile utilizzare le liste di controllo accessi (ACL), la policy di bucket o la policy utente. Nella tabella riportata di seguito sono elencate le autorizzazioni richieste per le varie operazioni di caricamento in più parti quando si utilizzano le liste di controllo accessi (ACL), la policy di bucket o la policy utente.

Operazione Autorizzazioni richieste

Creazione di un caricamento in più parti

Per creare un caricamento in più parti, è necessario essere autorizzati a eseguire l'operazione s3:PutObject su un oggetto.

Il proprietario del bucket può consentire ad altre entità di eseguire l'operazione s3:PutObject.

Avvio del caricamento in più parti

Per avviare il caricamento in più parti, è necessario essere autorizzati a eseguire l'operazione s3:PutObject su un oggetto.

Il proprietario del bucket può consentire ad altre entità di eseguire l'operazione s3:PutObject.

Iniziatore

Elemento del container che identifica l'utente che ha avviato il caricamento in più parti. Se l'iniziatore è un Account AWS, questo elemento fornisce le stesse informazioni dell'elemento Proprietario. Se è un utente IAM, questo elemento fornisce l'ARN e il nome visualizzato dell'utente.

Upload Part

Per caricare una parte, è necessario essere autorizzati a eseguire l'operazione s3:PutObject su un oggetto.

Il proprietario del bucket deve consentire all'iniziatore di eseguire l'operazione s3:PutObject su un oggetto affinché quest'ultimo possa caricare una parte di tale oggetto.

Upload Part (Copy)

Per caricare una parte, è necessario essere autorizzati a eseguire l'operazione s3:PutObject su un oggetto. Poiché si sta caricando una parte da un oggetto esistente, è necessario essere autorizzati a eseguire s3:GetObject sull'oggetto di origine.

Perché l'iniziatore possa caricare una parte di un oggetto, il proprietario del bucket deve consentire all'iniziatore di eseguire l'operazione s3:PutObject sull'oggetto.

Completamento del caricamento in più parti

Per completare il caricamento in più parti, è necessario essere autorizzati a eseguire l'operazione s3:PutObject su un oggetto.

Il proprietario del bucket deve consentire all'iniziatore di eseguire l'operazione s3:PutObject su un oggetto affinché quest'ultimo possa completare un caricamento in più parti di tale oggetto.

Stop Multipart Upload

Per interrompere un caricamento in più parti, è necessario essere autorizzati a eseguire l'operazione s3:AbortMultipartUpload.

Di default, il proprietario del bucket e l'iniziatore del caricamento in più parti sono autorizzati a eseguire questa operazione nell'ambito delle policy IAM e del bucket. Se l'iniziatore è un utente IAM, anche all'Account AWS di tale utente è consentito interrompere il caricamento in più parti. Con le policy degli endpoint VPC, l'iniziatore del caricamento in più parti non ottiene automaticamente l'autorizzazione a eseguire l'operazione s3:AbortMultipartUpload.

Oltre a queste impostazioni di default, il proprietario del bucket può consentire ad altre entità di eseguire l'operazione s3:AbortMultipartUpload su un oggetto. Il proprietario del bucket può negare a qualsiasi entità di eseguire l'operazione s3:AbortMultipartUpload.

List Parts

Per elencare un caricamento in più parti, è necessario essere autorizzati a eseguire l'operazione s3:ListMultipartUploadParts.

Per default, il proprietario del bucket dispone dell'autorizzazione per elencare le parti per qualsiasi caricamento in più parti nel bucket. L'iniziatore del caricamento in più parti dispone dell'autorizzazione per elencare le parti di un caricamento in più parti specifico. Se l'iniziatore del caricamento in più parti è un utente IAM, anche l'Account AWS che controlla tale utente IAM dispone dell'autorizzazione per elencare le parti di tale caricamento.

Oltre a queste impostazioni di default, il proprietario del bucket può consentire ad altre entità di eseguire l'operazione s3:ListMultipartUploadParts su un oggetto. Il proprietario del bucket può anche negare alle entità l'esecuzione dell'operazione s3:ListMultipartUploadParts.

Elenco dei caricamenti in più parti

Per elencare i caricamenti in più parti in corso in un bucket, è necessario essere autorizzati a eseguire l'operazione s3:ListBucketMultipartUploads su tale bucket.

Oltre a queste impostazioni di default, il proprietario del bucket può consentire ad altre entità di eseguire l'operazione s3:ListBucketMultipartUploads sul bucket.

Autorizzazioni correlate alla crittografia e decrittografia di AWS KMS

Per eseguire un caricamento in più parti con crittografia utilizzando una chiave KMS (AWS KMS) AWS Key Management Service, il richiedente deve disporre dell'autorizzazione per le operazioni kms:Decrypt e kms:GenerateDataKey sulla chiave. Queste autorizzazioni sono obbligatorie perché Amazon S3 deve decrittografare e leggere i dati dalle parti di file crittografate prima di completare il caricamento in più parti.

Per ulteriori informazioni, consulta Caricamento di un file di grandi dimensioni su Amazon S3 con la crittografia utilizzando una AWS KMS key nel Knowledge Center di AWS.

Se l'utente o il ruolo IAM si trova nello stesso Account AWS della chiave KMS, devi disporre di queste autorizzazioni sulla policy delle chiavi. Se l'utente o il ruolo IAM appartiene a un account diverso rispetto alla chiave KMS, devi disporre delle autorizzazioni sulla policy delle chiavi e sull'utente o sul ruolo IAM.

Per informazioni sulle relazioni tra le autorizzazioni nelle liste di controllo accessi (ACL) e le autorizzazioni nelle policy di accesso, consulta la sezione Mappatura delle autorizzazioni ACL e delle autorizzazioni della policy di accesso. Per informazioni sugli utenti IAM, consulta l'articolo relativo all'utilizzo degli utenti e dei gruppi.