Satya がマルチパートメッセージの
実行を説明します
S3 にアップロードする

Satya_s3-multipart-upload-cli-1

大きなファイルを複数の部分に分割して、またマルチパートアップロードを使用して Amazon Simple Storage Service (Amazon S3) バケットにコピーしたいと思います。これを AWS コマンドラインインターフェイス (AWS CLI) で行う方法を教えてください。

AWS CLI を使用して大きなファイルを Amazon S3 にアップロードするには、 aws s3 コマンド (高レベル) または aws s3api コマンド (低レベル) のいずれかを使用します。これらの 2 つのコマンド階層については、「 AWS Command Line Interface で Amazon S3 を使用する」を参照してください。
 
aws s3 コマンドはファイルサイズに応じてマルチパートアップロードおよびマルチパートダウンロードを自動的に実行するため、マルチパートアップロードおよびマルチパートダウンロードには、 aws s3 コマンド ( aws s3 cp など) を使用することをお勧めします。比較すると、aws s3api create-multipart-upload などの aws s3api コマンドは、 aws s3 コマンドが特定のアップロードの必要性をサポートしていない場合 (マルチパートアップロードに複数のサーバーが含まれていて、マルチパートアップロードを手動で停止し、後で再開する場合)、または aws s3 コマンドが必須のリクエストパラメータをサポートしていない場合にのみ使用する必要があります。

ファイルをアップロードする前に、 ファイルの MD5 チェックサム値をアップロード後の整合性チェックの参照として使用することができます。

(推奨) 高レベルコマンド (aws s3) を使用してファイルをアップロードしてください

マルチパートアップロードに高レベル aws s3 コマンドを使用するには、このコマンドを実行します。

$ aws s3 cp large_test_file s3://exampleawsbucket/

この例では、aws s3 cp コマンドを使用していますが、オブジェクトを S3 バケット (aws s3 sync または aws s3 mv など) にアップロードする他の aws s3 コマンドもオブジェクトが大きい場合は自動的にマルチパートアップロードを実行します。

マルチパートアップロードを使用して Amazon S3 にアップロードされるオブジェクトは、従来の PUT リクエストを使用してアップロードされるオブジェクトとは異なる ETag 形式を持っています。ソースファイルの MD5 チェックサム値を参照として保存するには、チェックサム値をカスタムメタデータとしてアップロードすることを選択できます。MD5 チェックサム値をカスタムメタデータとして追加するには、次のようなアップロードコマンドに、--metadata md5="examplemd5value1234/4Q" を含めます。

$ aws s3 cp large_test_file s3://exampleawsbucket/ --metadata md5="examplemd5value1234/4Q"

アップロード中にホストの帯域幅とリソースをさらに使用するには、AWS CLI 設定で設定されている同時リクエストの最大数を増やすことができます。デフォルトでは、AWS CLI は最大 10 の同時リクエストを使用します。このコマンドは、最大同時リクエスト数を 20 に設定します。

$ aws configure set default.s3.max_concurrent_requests 20

Amazon S3 を使用して AWS CLI を設定する詳細については、「AWS CLI S3 Configuration」を参照してください。

低レベル (aws s3api) コマンドを使用して複数の部分にファイルをアップロードする

重要: この aws s3api 手順は、aws s3 コマンドが特定のアップロードの必要性をサポートしていない場合 (マルチパートアップロードに複数のサーバーが含まれていて、マルチパートアップロードを手動で停止し、後で再開している場合)、または aws s3 コマンドが必須のリクエストパラメータをサポートしていない場合にのみ使用する必要があります。その他のマルチパートアップロードには、aws s3 cp またはその他の高レベル s3 コマンドを使用します。

1.    アップロードするファイルを複数の部分に分割します。
ヒント: Linux オペレーティングシステムを使用している場合は、split コマンドを使用できます。

2.    このコマンドを使用してマルチパートアップロードを開始し、関連するアップロード ID を取得します。コマンドは、UploadID を含む応答を返します。

aws s3api create-multipart-upload --bucket exampleawsbucket --key large_test_file

3.    後の手順の参照として UploadID 値をコピーします。

4.    このコマンドを実行して、ファイルの最初の部分をアップロードします。すべての値をバケット、ファイル、およびマルチパートアップロードの値と置き換えてください。コマンドはアップロードしたファイルの一部の ETag 値を含む応答を返します。各パラメータについては、「upload-part」を参照してください。

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

5.    後の手順の参照として、ETag 値をコピーします。

6.    ファイルの各部分に対して手順 4 と 5 を繰り返します。アップロードした新しい各部分ごとにパート番号を増やしてください。

7.    すべてのファイル部分をアップロードしたら、次のコマンドを実行してアップロードされた部分を一覧表示し、一覧が完成したことを確認します。

aws s3api list-parts --bucket exampleawsbucket --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

8.    以下のような JSON 形式のファイルにアップロードした各ファイル部分の ETag 値をコンパイルします。

{
    "Parts": [{
        "ETag": "example8be9a0268ebfb8b115d4c1fd3",
        "PartNumber":1
    },

    ....

    {
        "ETag": "example246e31ab807da6f62802c1ae8",
        "PartNumber":4
    }]
}

9.    ファイルに fileparts.json という名前を付けます。

10.    このコマンドを実行してマルチパートアップロードを完了します。--multipart-upload の値を作成した ETags を持つ JSON 形式のファイルへのパスと置き換えます。

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

11.    前のコマンドが成功した場合は、以下のような応答が返されます。

{
    "ETag": "\\"exampleae01633ff0af167d925cad279-2\\"",
    "Bucket": "exampleawsbucket",
    "Location": "https://exampleawsbucket.s3.amazonaws.com/large_test_file",
   
    "Key": "large_test_file"
}

アップロードのエラーを解決する

マルチパートアップロードに高レベルの aws s3 コマンドを使用して、アップロードが失敗した場合 (タイムアウトまたは手動によるキャンセルによる) は、新しいマルチプルアップロードを開始する必要があります。ほとんどの場合、AWS CLI は自動的にマルチパートアップロードを中断し、作成したマルチパートファイルをすべて削除します。この処理には数分かかることもあります。

マルチパートアップロードに aws s3api コマンドを使用して、プロセスが中断した場合は、アップロードの不完全な部分を削除して、その部分を再度アップロードする必要があります。

不完全な部分を削除するには、AbortIncompleteMultipartUpload ライフサイクルアクション を使用します。​または、aws s3api コマンドを使用して、以下の手順に従って不完全な部分を削除することができます。

1.    このコマンドを実行して不完全なマルチパートファイルアップロードを一覧表示します。--bucket の値をお使いのバケットの名前と置き換えます。

aws s3api list-multipart-uploads --bucket exampleawsbucket

2.    コマンドは、次の例のような、処理されなかったすべてのファイル部分とメッセージを返します。

{
    "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.    このコマンドを実行して不完全な部分を削除します。

aws s3api abort-multipart-upload --bucket exampleawsbucket --key large_test_file --upload-id examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB

このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2016 年 01 月 25 日

更新: 2018 年 09 月 25 日