マルチパートアップロードプロセスを使用すると、単一のオブジェクトをパートのセットとしてアップロードすることができます。各パートは、オブジェクトのデータの連続する部分です。これらのオブジェクトパートは、任意の順序で個別にアップロードできます。いずれかのパートの送信が失敗すると、他のパートに影響を与えることなくそのパートを再送することができます。オブジェクトのすべてのパートがアップロードされたら、Amazon S3 はこれらのパートを組み立ててオブジェクトを作成します。通常、オブジェクトサイズが 100 MB 以上の場合は、単一のオペレーションでオブジェクトをアップロードする代わりに、マルチパートアップロードを使用することを考慮してください。
マルチパートアップロードの使用には、次の利点があります。
-
スループットの向上 − パートを並列にアップロードすることで、スループットを向上させることができます。
-
ネットワーク問題からの迅速な回復 − パートサイズが小さいほど、ネットワークエラーが原因で失敗したアップロードを再開する際の影響を最小限に抑えることができます。
-
オブジェクトのアップロードの一時停止と再開 – オブジェクトの複数のパートを徐々にアップロードできます。マルチパートアップロードをいったん開始すると、終了期限はありません。マルチパートアップロードを明示的に完了または中止する必要があります。
-
オブジェクトの最終的なサイズが不明な状態でアップロードを開始 – オブジェクトの作成中でもアップロードを開始できます。
次の方法でマルチパートアップロードを使用することをお勧めします。
-
安定した高帯域幅ネットワーク経由で大きなオブジェクトをアップロードする場合は、複数スレッドのパフォーマンスのためにオブジェクトパートを並行してアップロードすることで、マルチパートアップロードを使用して利用可能な帯域幅を最大限に活用します。
-
むらがあるネットワークでアップロードを実行する場合は、マルチパートアップロードを使用して、アップロードの再開を回避することで、ネットワークエラーに対する回復性を高めます。マルチパートアップロードを使用するときには、アップロード中に中断されたパートのアップロードを再試行するだけで済みます。最初からオブジェクトのアップロードを再開する必要はありません。
マルチパートアップロードを使用してディレクトリバケットの Amazon S3 Express One Zone ストレージクラスにオブジェクトをアップロードする場合、マルチパートアップロードプロセスは、マルチパートアップロードを使用して汎用バケットにオブジェクトをアップロードするプロセスと似ています。ただし、重要な相違点がいくつかあります。
マルチパートアップロードを使用して S3 Express One Zone ゾーンにオブジェクトをアップロードする方法の詳細については、以降のトピックを参照してください。
トピック
マルチパートアップロードのプロセス
マルチパートアップロードは次の 3 ステップのプロセスです。
-
アップロードを開始します。
-
オブジェクトパートをアップロードします。
-
すべてのパートをアップロードしたら、マルチパートアップロードを完了します。
Amazon S3 の側では、マルチパートアップロードの完了リクエストを受け取ると同時に、アップロードされたパートからオブジェクトを構築します。構築されたオブジェクトへは、バケット内の他のオブジェクトと同じようにアクセスできます。
マルチパートアップロードの開始
リクエストを送信すると、アップロード ID を含むレスポンスが Amazon S3 から返されます。アップロード ID はマルチパートアップロードの一意の識別子です。パートのアップロード、パートのリスト、アップロードの完了、アップロードの中止を行うときは常に、このアップロード ID を指定する必要があります。
パートのアップロード
パートをアップロードするときは、アップロード ID に加えて、パート番号を指定する必要があります。S3 Express One Zone でマルチパートアップロードを使用する場合、マルチパート番号は連続するパート番号である必要があります。連続しないパート番号を使用してマルチパートアップロードリクエストを実行しようとすると、HTTP 400 Bad Request
(無効なパート順序) エラーが生成されます。
パート番号によって、アップロードするオブジェクトに含まれるパートとその位置が一意に識別されます。以前にアップロードしたパートと同じパート番号を使って新しいパートをアップロードした場合、以前のパートは上書きされます。
パートをアップロードするたびに、Amazon S3 は エンティティタグ (ETag) ヘッダーを含むレスポンスを返します。パートのアップロードごとに、パート番号と ETag 値を記録する必要があります。すべてのオブジェクトパートアップロードの ETag 値は同じままですが、パートごとに異なるパート番号が割り当てられます。マルチパートアップロードを完了するためには、残りのリクエストにこれらの値を含める必要があります。
Amazon S3 は、S3 バケットにコピーされたすべての新しいオブジェクトを自動的に暗号化します。マルチパートアップロードを実行する際に、リクエストで暗号化情報を指定しないと、アップロードされたパートの暗号化設定は、送信先バケットのデフォルトの暗号化設定に設定されます。Amazon S3 バケットのデフォルトの暗号化設定は常に有効になっており、最低でも Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) に設定されています。ディレクトリバケットでは、SSE-S3 と AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) がサポートされています。詳細については、「データ保護と暗号化」を参照してください。
マルチパートアップロードの完了
マルチパートアップロードを完了すると、パート番号に基づいて昇順に連結されたオブジェクトが Amazon S3 によって作成されます。完了リクエストが正常に処理されると、個々のパートはなくなります。
「マルチパートアップロードの完了」リクエストには、アップロード ID と、パート番号およびそれに対応する ETag 値の両方のリストが含まれている必要があります。Amazon S3 からのレスポンスには、結合されるオブジェクトデータを一意に識別する ETag が含まれます。この ETag は、オブジェクトデータの MD5 ハッシュであるとは限りません。
マルチパートアップロードのリスト化
特定のマルチパートアップロードのパートや、進行中のすべてのマルチパートアップロードをリスト表示できます。パートのリストオペレーションでは、特定のマルチパートアップロードについて既にアップロードしたパートの情報が返されます。パートのリストリクエストを送信するたびに、指定したマルチパートアップロードのパート情報 (最大で 1,000 個のパート) が Amazon S3 から返されます。マルチパートアップロードに 1,000 を超えるパートが含まれる場合、すべてのパートを取得するにはパートのリストリクエストを追加で送信する必要があります。
返されるパートのリストには、アップロードが完了していないパートは含まれていません。マルチパートアップロードの一覧表示オペレーションを使用すると、進行中のマルチパートアップロードのリストを取得できます。
進行中のマルチパートアップロードとは、開始されているものの、まだ完了または中止されていないアップロードを意味します。各リクエストに最大 1,000 個のマルチパートアップロードが返されます。進行中のマルチパートアップロードが 1,000 個を超える場合、残りのマルチパートアップロードを取得するには、リクエストを追加で送信する必要があります。返されたリストは確認の目的でのみ使用してください。マルチパートアップロードの完了リクエストを送信するときに、このリストの結果を使用しないでください。代わりに、パートのアップロード時に指定したパート番号と、それに対応する、Amazon S3 から返される ETag 値の独自のリストを維持しておいてください。
マルチパートアップロードの一覧の詳細については、「Amazon Simple Storage Service API リファレンス」の「ListParts」を参照してください。
マルチパートアップロードオペレーションを使用したチェックサム
オブジェクトをアップロードする際、オブジェクトの整合性を確認するためのチェックサムアルゴリズムを指定できます。MD5 はディレクトリバケットではサポートされていません。次のセキュアハッシュアルゴリズム (SHA) または巡回冗長検査 (CRC) のデータ整合性チェックアルゴリズムのいずれかを指定できます。
-
CRC32
-
CRC32C
-
SHA-1
-
SHA-256
GetObject
または HeadObject
を使用することで、Amazon S3 REST API または AWS SDK を使用して、個々のパートのチェックサム値を取得できます。まだ処理中のマルチパートアップロードの個々の部分のチェックサム値を取得したい場合は、ListParts
を使用できます。
重要
前述のチェックサムアルゴリズムを使用する場合、マルチパートパーツ番号には連続したパーツ番号を使用する必要があります。連続しないパート番号を使用してマルチパートアップロードリクエストを実行しようとすると、Amazon S3 により HTTP 400 Bad Request
(無効なパート順序) エラーが生成されます。
マルチパートアップロードオブジェクトでのチェックサムの動作の詳細については、「Amazon S3 でのオブジェクトの整合性のチェック」を参照してください。
マルチパートアップロードの同時オペレーション
分散開発環境においては、アプリケーションから同じオブジェクトに対して複数の更新が同時に開始されることもありえます。例えば、アプリケーションが同じオブジェクトキーを使用して複数のマルチパートアップロードを開始する場合があります。そのようなアップロードごとに、アプリケーションからパートのアップロードが行われ、アップロードの完了リクエストが Amazon S3 に送信されて、オブジェクトが作成されます。S3 Express One Zone の場合、オブジェクトの作成時間はマルチパートアップロードの完了日となります。
重要
ディレクトリバケットに保存されているオブジェクトのバージョニングはサポートされていません。
マルチパートアップロードと料金
マルチパートアップロードを開始すると、アップロードを完了または中止するまですべてのパートが Amazon S3 によって保持されます。マルチパートアップロードの実行期間を通して、アップロードとそれに関連するパートのために使用されるすべてのストレージ、帯域幅、リクエストに対して課金が行われます。マルチパートアップロードを中止した場合、Amazon S3 はアップロードしたアーティファクトやアップロードしたすべてのパートを削除するため、これらについて課金されることはなくなります。指定されたストレージクラスに関係なく、不完全なマルチパートアップロードの削除に伴う早期削除料金はありません。料金に関する詳細については、「Amazon S3 の料金
重要
マルチパートアップロードの完了リクエストの送信が正常に実行されないと、オブジェクトのパーツは組み立てられず、オブジェクトも作成されません。アップロードされたパートに関連のあるすべてのストレージに対して料金が請求されます。そのため、マルチパートアップロードを完了してオブジェクトを作成するか、マルチパートアップロードを停止してアップロードされたパートを削除することが重要です。
ディレクトリバケットを削除する前に、進行中のすべてのマルチパートアップロードを完了または中止する必要があります。ディレクトリバケットは S3 ライフサイクル設定をサポートしていません。必要に応じて、アクティブなマルチパートアップロードを一覧表示して、アップロードを中止し、バケットを削除できます。
マルチパートアップロード API オペレーションとアクセス許可
ディレクトリバケットのオブジェクト管理 API オペレーションにアクセスできるようにするには、バケットポリシーまたは AWS Identity and Access Management (IAM) ID ベースのポリシーで s3express:CreateSession
アクセス許可を付与します。
マルチパートアップロードオペレーションを使用するには、必要なアクセス権限を有している必要があります。バケットポリシーまたは IAM ID ベースのポリシーを使用して、これらのオペレーションを実行するアクセス許可を IAM プリンシパルに付与できます。さまざまなマルチパートアップロードオペレーションに必要なアクセス許可の一覧は、次の表のとおりです。
Initiator
要素を使用して、マルチパートアップロードの開始点を特定できます。イニシエータが AWS アカウント である場合、このエレメントは Owner
エレメントと同じ情報を提供します。イニシエータが IAM ユーザーである場合、このエレメントはユーザー ARN と表示名を提供します。
アクション | 必要なアクセス許可 |
---|---|
マルチパートアップロードの作成 |
マルチパートアップロードを作成するには、ディレクトリバケットに対して |
マルチパートアップロードの開始 |
マルチパートアップロードを開始するには、ディレクトリバケットに対して |
パートのアップロード |
パートをアップロードするには、ディレクトリバケットに対して バケット所有者は、イニシエータがパートをアップロードできるように、ディレクトリバケットに対して |
パートのアップロード (コピー) |
パートをアップロードするには、ディレクトリバケットに対して 開始者がオブジェクトのパートをアップロードするには、バケット所有者が、開始者にそのオブジェクトでの |
マルチパートアップロードを完了する |
マルチパートアップロードを完了するには、ディレクトリバケットで イニシエータがマルチパートアップロードを実行するには、バケット所有者がイニシエータにオブジェクトに対する |
マルチパートアップロードの中止 |
マルチパートアップロードを中止するには、 イニシエータはマルチパートアップロードを中止できるように、 |
パートの一覧表示 |
マルチパートアップロードでパートを一覧表示するには、ディレクトリバケットに対して |
進行中のマルチパートアップロードの一覧表示 |
バケットへの進行中のマルチパートアップロードを一覧表示するには、そのバケットに対して |
マルチパートアップロードに対する API オペレーションサポート
Amazon Simple Storage Service API リファレンスの以下のセクションでは、マルチパートアップロードの Amazon S3 REST API オペレーションについて説明しています。
例
マルチパートアップロードを使用してディレクトリバケット内の S3 Express One Zone にオブジェクトをアップロードするには、次の例を参照してください。
トピック
マルチパートアップロードの作成
注記
ディレクトリバケットの場合、CreateMultipartUpload
オペレーションと UploadPartCopy
オペレーションを実行するときに、バケットのデフォルトの暗号化で必要な暗号化設定を使用し、CreateMultipartUpload
リクエストで指定したリクエストヘッダーが送信先バケットのデフォルトの暗号化設定と一致する必要があります。
次の例は、マルチパートアップロードの作成方法を示しています。
この例では、AWS CLI を使用してディレクトリバケットへのマルチパートアップロードを作成する方法を示します。このコマンドは、オブジェクト KEY_NAME
のディレクトリバケット bucket-base-name
--zone-id
--x-s3 へのマルチパートアップロードを開始します。このコマンドを使用する際は、ユーザー入力用プレースホルダー
を独自の情報に置き換えます。
aws s3api create-multipart-upload --bucket
bucket-base-name
--zone-id
--x-s3 --keyKEY_NAME
詳細については、「AWS Command Line Interface」の「create-multipart-upload
マルチパートアップロードのパートのアップロード
次の例は、マルチパートアップロードの一部をアップロードする方法を示しています。
この例では、AWS CLI を使用して単一のオブジェクトを複数の部分に分割し、それらの部分をディレクトリバケットにアップロードする方法を示しています。このコマンドを使用する際は、ユーザー入力用プレースホルダー
を独自の情報に置き換えます。
aws s3api upload-part --bucket
bucket-base-name
--zone-id
--x-s3 --keyKEY_NAME
--part-number1
--bodyLOCAL_FILE_NAME
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA
"
詳細については、「AWS Command Line Interface」の「upload-part
マルチパートアップロードの完了
次の例は、マルチパートアップロードを完了する方法を示しています。
この例では、AWS CLI を使用してディレクトリバケットのマルチパートアップロードを完了する方法を示します。このコマンドを使用する際は、ユーザー入力用プレースホルダー
を独自の情報に置き換えます。
aws s3api complete-multipart-upload --bucket
bucket-base-name
--zone-id
--x-s3 --keyKEY_NAME
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA
" --multipart-uploadfile://parts.json
この例では、完全なファイルに再構成する必要があるマルチパートアップロードの部分を記述した JSON 構造を採用しています。この例では、file://
プレフィックスを使用して、parts
という名前のローカルフォルダーにあるファイルから JSON 構造を読み込みます。
parts.json:
parts.json
{
"Parts": [
{
"ETag": "6b78c4a64dd641a58dac8d9258b88147",
"PartNumber": 1
}
]
}
詳細については、「AWS Command Line Interface」の「complete-multipart-upload
マルチパートアップロードの中止
次の例は、マルチパートアップロードを中止する方法を示しています。
次の例は、AWS CLI を使用してマルチパートアップロードを中止する方法を示しています。このコマンドを使用する際は、ユーザー入力用プレースホルダー
を独自の情報に置き換えます。
aws s3api abort-multipart-upload --bucket
bucket-base-name
--zone-id
--x-s3 --keyKEY_NAME
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEAX5hFw-MAQAAAAB0OxUFeA7LTbWWFS8WYwhrxDxTIDN-pdEEq_agIHqsbg
"
詳細については、「AWS Command Line Interface」の「abort-multipart-upload
マルチパートアップロードのコピーオペレーションの作成
注記
SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトパーツコピーを暗号化するには、KMS キー (特にカスタマーマネージドキー) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります。AWS マネージドキー (
aws/s3
) はサポートされていません。SSE-KMS 設定では、バケットの存続期間中、ディレクトリバケットごとに 1 つのカスタマーマネージドキーしかサポートできません。SSE-KMS のカスタマーマネージドキーを指定した後は、バケットの SSE-KMS 設定のカスタマーマネージドキーを上書きすることはできません。UploadPartCopy リクエストヘッダーで SSE-KMS を使用した新しいオブジェクトパートコピーのサーバー側の暗号化設定を指定することはできません。また、CreateMultipartUpload
リクエストで指定するリクエストヘッダーは、送信先バケットのデフォルトの暗号化設定と一致する必要があります。SSE-KMS で暗号化されたオブジェクトを UploadPartCopy 経由で汎用バケットからディレクトリバケットにコピーする場合、ディレクトリバケットから汎用バケットにコピーする場合、またはディレクトリバケット間でコピーする場合、S3 バケットキーはサポートされません。この場合、KMS で暗号化されたオブジェクトに対してコピーリクエストが実行されるたびに、Amazon S3 は AWS KMS を呼び出します。
次の例は、マルチパートアップロードを使用して、あるバケットから別のバケットにオブジェクトをコピーする方法を示しています。
次の例は、AWS CLI を使用して、マルチパートアップロードを使って、あるバケットからあるディレクトリバケットにオブジェクトをプログラムでコピーする方法を示しています。このコマンドを使用する際は、ユーザー入力用プレースホルダー
を独自の情報に置き換えます。
aws s3api upload-part-copy --bucket
bucket-base-name
--zone-id
--x-s3 --keyTARGET_KEY_NAME
--copy-sourceSOURCE_BUCKET_NAME/SOURCE_KEY_NAME
--part-number1
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBnJ4cxKMAQAAAABiNXpOFVZJ1tZcKWib9YKE1C565_hCkDJ_4AfCap2svg
"
詳細については、「AWS Command Line Interface」の「upload-part-copy
進行中のマルチパートアップロードの一覧表示
ディレクトリバケットへの進行中のマルチパートアップロードをリスト表示するには、AWS SDK または AWS CLI を使用できます。
次の例は、AWS CLI を使用して、進行中の (不完全な) マルチパートアップロードをリスト表示する方法を示しています。このコマンドを使用する際は、ユーザー入力用プレースホルダー
を独自の情報に置き換えます。
aws s3api list-multipart-uploads --bucket
bucket-base-name
--zone-id
--x-s3
詳細については、「AWS Command Line Interface」の「list-multipart-uploads
マルチパートアップロードパートの一覧表示
次の例は、ディレクトリバケットへのマルチパートアップロードの一部をリスト表示する方法を示しています。
次の例は、AWS CLI を使用して、ディレクトリバケットへのマルチパートアップロードの一部をリスト表示する方法を示しています。このコマンドを使用する際は、ユーザー入力用プレースホルダー
を独自の情報に置き換えます。
aws s3api list-parts --bucket
--key
bucket-base-name
--zone-id
--x-s3KEY_NAME
--upload-id "AS_mgt9RaQE9GEaifATue15dAAAAAAAAAAEMAAAAAAAAADQwNzI4MDU0MjUyMBYAAAAAAAAAAA0AAAAAAAAAAAH2AfYAAAAAAAAEBSD0WBKMAQAAAABneY9yBVsK89iFkvWdQhRCcXohE8RbYtc9QvBOG8tNpA
"
詳細については、「AWS Command Line Interface」の「list-parts