Salta al contenuto

Come posso utilizzare AWS CLI per caricare in più parti un file di grandi dimensioni in Amazon S3?

7 minuti di lettura
0

Desidero copiare in più parti un file di grandi dimensioni in un bucket Amazon Simple Storage Service (Amazon S3) o utilizzare il caricamento in più parti. Desidero utilizzare l'Interfaccia della linea di comando AWS (AWS CLI) per caricare il file.

Breve descrizione

Utilizza AWS CLI con comandi aws s3 di alto livello o con comandi aws s3api di basso livello per caricare file di grandi dimensioni in Amazon S3. Per ulteriori informazioni su questi due livelli di comando, consulta Utilizzo di Amazon S3 in AWS CLI.

Importante: per caricamenti e scaricamenti in più parti è consigliabile utilizzare i comandi aws s3 (ad esempio, aws s3 cp). Questo perché i comandi aws s3 eseguono automaticamente il caricamento e lo scaricamento di più parti in base alla dimensione del file. Utilizza i comandi aws s3api (ad esempio, aws s3api create-multipart-upload) solo quando i comandi aws s3 non supportano un caricamento specifico. Ciò accade, ad esempio, nel caso in cui il caricamento in più parti coinvolge più server oppure arresti manualmente un caricamento in più parti e lo riprendi in un secondo momento. Lo stesso vale nel caso in cui il comando aws s3 non supporta un parametro obbligatorio della richiesta.

Risoluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Prima di caricare il file, calcola il valore di checksum MD5 del file come riferimento per i controlli di integrità dopo il caricamento.

Utilizza i comandi aws s3

Per utilizzare un comando aws s3 di alto livello per il caricamento in più parti, esegui questo comando cp:

aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/

Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket.

L'esempio precedente utilizza il comando aws s3 cp per eseguire automaticamente un caricamento in più parti quando l'oggetto è di grandi dimensioni. Puoi anche usare altri comandi aws s3 per caricare oggetti in un bucket S3. Ad esempio, utilizza aws s3 sync o aws s3 mv.

Gli oggetti caricati in più parti in Amazon S3 hanno un formato ETag diverso rispetto agli oggetti che carichi con una richiesta PUT tradizionale. Per memorizzare il valore di checksum MD5 del file i origine come riferimento, carica il file con il valore di checksum come metadati personalizzati. Per aggiungere il valore di checksum MD5 come metadati personalizzati, includi il parametro opzionale --metadata nel comando di caricamento, come in questo esempio:

aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/ --metadata md5="examplemd5value1234"

Nota: sostituisci large_test_file con il nome del tuo file da caricare, DOC-EXAMPLE-BUCKET con il nome del tuo bucket e examplemd5value1234 con il tuo valore MD5.

Per utilizzare più larghezza di banda e risorse dell'host, aumenta il numero massimo di richieste concorrenti impostato nella configurazione in AWS CLI per S3. Per impostazione predefinita, AWS CLI utilizza un massimo di 10 richieste concorrenti. Esegui questo comando configure per impostare il numero massimo di richieste concorrenti su 20:

aws configure set default.s3.max_concurrent_requests 20

Utilizza i comandi aws s3api

  1. Dividi il file che vuoi caricare in più parti.
    Suggerimento: se utilizzi un sistema operativo Linux, esegui il comando split.

  2. Per avviare un caricamento in più parti e recuperare l'ID del caricamento associato, esegui questo comando create-multipart-upload:

    aws s3api create-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large_test_file

    Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket e large_test_file con il nome del tuo file da caricare.

    Il comando restituisce una risposta che contiene il valore UploadID.

  3. Copia il valore UploadID come riferimento per i passaggi successivi.

  4. Per caricare la prima parte del file, esegui questo comando upload-part:

    aws s3api upload-part --bucket DOC-EXAMPLE-BUCKET --key large_test_file --part-number 1 --body large_test_file.001 --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk --content-md5 exampleaAmjr+4sRXUwf0w==
    

    Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket e large_test_file con il nome del tuo file da caricare. Sostituisci il valore upload-id con il valore dell'output del comando create-multipart-upload.

    Il comando restituisce una risposta che contiene un valore ETag per la parte del file che hai caricato.

  5. Copia il valore ETag come riferimento per i passaggi successivi.

  6. Ripeti i passaggi 4 e 5 per ogni parte del file. Assicurati di incrementare il numero di parte per ogni nuova parte che carichi.

  7. Dopo aver caricato tutte le parti del file, esegui questo comando list-parts per elencare le parti caricate e verificare che l'elenco sia completo:

    aws s3api list-parts --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk
    

    Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket e large_test_file con il nome del tuo file da caricare. Sostituisci il valore upload-id con il valore dell'output del comando create-multipart-upload.

  8. Compila un file in formato JSON con i valori ETag per ogni parte del file che hai caricato.
    Esempio di file JSON:

    {
        "Parts": [{
            "ETag": "example8be9a0268ebfb8b115d4c1fd3",
            "PartNumber":1
        },
    
        ....
    
        {
            "ETag": "example246e31ab807da6f62802c1ae8",
            "PartNumber":4
        }]
    }
  9. Assegna al file il nome fileparts.json.

  10. Per completare il caricamento in più parti, esegui questo comando complete-multipart-upload:

aws s3api complete-multipart-upload --multipart-upload file://fileparts.json --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

Nota: sostituisci il valore --multipart-upload con il percorso del file in formato JSON contenente gli ETag che hai creato. Sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket e large_test_file con il nome del tuo file da caricare. Sostituisci il valore upload-id con il valore dell'output del comando list-multipart-uploads.

  1. Se il comando precedente ha esito positivo, ricevi una risposta simile alla seguente:
{
    "ETag": "\\"exampleae01633ff0af167d925cad279-2\\"",
    "Bucket": "DOC-EXAMPLE-BUCKET",
    "Location": "https://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/large_test_file",

    "Key": "large_test_file"
}

Risolvi gli errori di caricamento

Se utilizzi i comandi aws s3 di alto livello per un caricamento in più parti e il caricamento ha esito negativo, devi iniziare un nuovo caricamento in più parti. Gli errori di caricamento in più parti si verificano a causa di un timeout o di un annullamento manuale. Nella maggior parte dei casi, AWS CLI annulla automaticamente il caricamento in più parti e rimuove tutti gli eventuali file in più parti creati. Questo processo può richiedere diversi minuti. Se utilizzi i comandi aws s3api e il processo viene interrotto, rimuovi le parti incomplete del caricamento e ricaricale.

Per rimuovere le parti incomplete, utilizza l'azione del ciclo di vita AbortIncompleteMultipartUpload. Oppure utilizza i comandi aws s3api per rimuovere le parti incomplete.

  1. Per elencare i file caricati in più parti incompleti, esegui questo comando list-multipart-uploads:

    aws s3api list-multipart-uploads --bucket DOC-EXAMPLE-BUCKET
    

    Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket.

  2. Il comando restituisce un messaggio con tutte le parti di file che non sono state elaborate, come nell'esempio seguente:

    {
        "Uploads": [
            {
    
        "Initiator": {
                    "DisplayName": "multipartmessage",
                    "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        "
                },
                "Initiated": "2016-03-31T06:13:15.000Z",
    
        "UploadId": "examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB_A-",
                "StorageClass": "STANDARD",
    
        "Key": "",
                "Owner": {
                    "DisplayName": "multipartmessage",
    
        "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
                }
            }
       ]
    }
  3. Per rimuovere le parti incomplete, esegui questo comando abort-multipart-upload:

    aws s3api abort-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB

    Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket e large_test_file con il nome del tuo file da caricare. Sostituisci il valore upload-id con il valore dell'output del comando list-multipart-uploads.

Informazioni correlate

Caricamento e copia di oggetti utilizzando il caricamento multiparte in Amazon S3