マルチパートアップロードを使用したオブジェクトのアップロードとコピー - Amazon Simple Storage Service

マルチパートアップロードを使用したオブジェクトのアップロードとコピー

マルチパートアップロードを使用すると、単一のオブジェクトをパートのセットとしてアップロードすることができます。各パートは、オブジェクトのデータの連続する部分です。これらのオブジェクトパートは、任意の順序で個別にアップロードできます。いずれかのパートの送信が失敗すると、他のパートに影響を与えることなくそのパートを再送することができます。オブジェクトのすべてのパートがアップロードされたら、Amazon S3 はこれらのパートを組み立ててオブジェクトを作成します。通常、オブジェクトサイズが 100 MB 以上の場合は、単一のオペレーションでオブジェクトをアップロードする代わりに、マルチパートアップロードを使用することを考慮してください。

マルチパートアップロードの使用には、次の利点があります。

  • スループットの向上 - パートを並列にアップロードすることで、スループットを向上させることができます。

  • ネットワークの問題からの素早い回復 - パートサイズは比較的小さいため、ネットワークエラーにより失敗したアップロードを再開する際の影響を最小限に抑えることができます。

  • オブジェクトのアップロードの一旦停止と再開 – オブジェクトの複数のパートを徐々にアップロードできます。マルチパートアップロードを開始した後は終了期限がありません。マルチパートアップロードは明示的に完了または停止する必要があります。

  • オブジェクトの最終的なサイズが不明な状態でアップロードを開始 – オブジェクトの作成中でもアップロードを開始できます。

次の方法でマルチパートアップロードを使用することをお勧めします。

  • 安定した高帯域幅ネットワーク経由で大きなオブジェクトをアップロードする場合は、複数スレッドのパフォーマンスのために並行してオブジェクトパートをアップロードすることにより、マルチパートアップロードを使用して使用可能な帯域幅の使用を最大化します。

  • むらがあるネットワークでアップロードを実行する場合は、マルチパートアップロードを使用して、アップロードの再開を回避することで、ネットワークエラーに対する弾力性を高めます。マルチパートアップロードを使用する場合、アップロード中に中断されたパートのアップロードを再試行するだけで済みます。最初からオブジェクトのアップロードを再開する必要はありません。

マルチパートアップロードのプロセス

マルチパートアップロードは 3 つのステップで構成されるプロセスです。まずアップロードを開始し、次にオブジェクトのパートをアップロードします。すべてのパートをアップロードしたらマルチパートアップロードを完了します。Amazon S3 の側では、マルチパートアップロードの完了リクエストを受け取ると同時に、アップロードされたパートからオブジェクトを構築します。構築されたオブジェクトは、バケット内の他のオブジェクトと同じようにアクセスできます。

進行中のすべてのマルチパートアップロードをリストしたり、特定のマルチパートアップロードにおいてアップロードが完了したパートのリストを取得したりできます。このようなオペレーションのそれぞれについて、このセクションで説明します。

マルチパートアップロードの開始

リクエストを送信すると、アップロード ID を含むレスポンスが Amazon S3 から返されます。アップロード ID はマルチパートアップロードの一意の識別子です。パートのアップロード、パートのリスト、アップロードの完了、アップロードの停止を行うときは常に、このアップロード ID を指定する必要があります。アップロードするオブジェクトの説明となるメタデータを指定する場合は、マルチパートアップロードの開始リクエストの中にそれを指定する必要があります。

パートのアップロード

パートをアップロードするときは、アップロード ID に加えて、パート番号を指定する必要があります。1~10,000 の範囲で任意のパート番号を選択できます。パート番号によって、アップロードするオブジェクトに含まれるパートとその位置が一意に識別されます。選択するパート番号は、連続している必要はありません (たとえば、1、5、14など)。以前にアップロードしたパートと同じパート番号を使って新しいパートをアップロードした場合、以前のパートは上書きされます。

パートをアップロードするたびに、ETag ヘッダーを含むレスポンスが Amazon S3 から返されます。パートのアップロードごとに、パート番号と ETag 値を記録する必要があります。マルチパートアップロードを完了するためには、残りのリクエストにこれらの値を含める必要があります。

注記

マルチパートアップロードを開始して 1 つまたは複数のパートをアップロードした後は、マルチパートアップロードを完了するか停止しない限り、アップロードしたパートのストレージに対する課金は停止しません。マルチパートアップロードを完了または停止した後でのみ、Amazon S3 はパートのストレージを解放して、パートのストレージに対する課金を停止します。

マルチパートアップロードの完了

マルチパートアップロードを完了すると、パート番号に基づいて昇順に連結されたオブジェクトが Amazon S3 によって作成されます。マルチパートアップロードの開始リクエストにオブジェクトメタデータが指定されている場合、Amazon S3 によってそのメタデータはオブジェクトに関連付けられます。完了リクエストが正常に処理されると、個々のパートはなくなります。

マルチパートアップロードの完了リクエストには、アップロード ID と、パート番号およびそれに対応する ETag 値の両方のリストが含まれている必要があります。Amazon S3 からのレスポンスには、結合されるオブジェクトデータを一意に識別する ETag が含まれます。この ETag が、オブジェクトデータの MD5 ハッシュになるとは限りません。

マルチパートアップロードは停止することもできます。マルチパートアップロードを停止した後は、再度同じアップロード ID を使ってパートをアップロードすることはできません。キャンセルされたマルチパートアップロードの任意の部分のすべてのストレージが解放されます。パートのアップロードが進行しているときにマルチパートアップロードを停止した場合は、停止後もそのパートのアップロードは成功または失敗する可能性があります。すべてのパートによって使用されているストレージを全部解放するには、すべてのパートのアップロードが完了した後で初めてマルチパートアップロードを停止する必要があります。

マルチパートアップロードのリスト化

特定のマルチパートアップロードのパートや、進行中のすべてのマルチパートアップロードを表示できます。パートのリストオペレーションでは、特定のマルチパートアップロードについて既にアップロードしたパートの情報が返されます。パートのリストリクエストを送信するたびに、指定したマルチパートアップロードのパート情報 (最大で1,000個のパート) が Amazon S3 から返されます。マルチパートアップロードに 1,000 個を超えるパートが含まれる場合、すべてのパートを取得するにはパートのリストリクエストを追加で送信する必要があります。返されるパートのリストには、アップロードが完了していないパートは含まれていないことにご留意ください。マルチパートアップロードのリストオペレーションを使用すると、進行中のマルチパートアップロードのリストを取得できます。

進行中のマルチパートアップロードとは、開始されているものの、まだ完了または停止されていないアップロードを意味します。各リクエストに最大 1,000 個のマルチパートアップロードが返されます。進行中のマルチパートアップロードが 1,000 個を超えている場合、残りのマルチパートアップロードを取得するには、リクエストを追加で送信する必要があります。返されるリストは確認の目的でのみ使用します。マルチパートアップロードの完了リクエストを送信するときに、リストの結果を使用しないでください。代わりに、パートのアップロード時に指定したパート番号と、Amazon S3 が返す、対応する ETag 値で構成される独自のリストを維持しておいてください。

マルチパートアップロードの同時オペレーション

分散開発環境においては、アプリケーションから同じオブジェクトに対して複数の更新が同時に開始されることもありえます。同じオブジェクトキーを使ってアプリケーションから複数のマルチパートアップロードが開始される可能性もあります。そのようなアップロードごとに、アプリケーションからパートのアップロードが行われ、アップロードの完了リクエストが Amazon S3 に送信されて、オブジェクトが作成されます。バケットでバージョニングが有効になっている場合は、マルチパートアップロードを完了するたびに新しいバージョンが作成されます。バージョニングが有効になっていないバケットの場合は、マルチパートアップロードの開始から完了までの間に受信された他の何らかのリクエストが優先される可能性もあります。

注記

マルチパートアップロードの開始から完了までの間に受信された他の何らかのリクエストが優先されることもありえます。たとえば、あるキーを使ってマルチパートアップロードを開始した後、アップロードが完了しないうちに別のオペレーションによってそのキーが削除されたとします。その場合、オブジェクトを確認できなくても、マルチパートアップロードの完了レスポンスによってオブジェクト作成の成功が示される可能性があります。

マルチパートアップロードと料金

マルチパートアップロードを開始すると、アップロードを完了または中止するまですべてのパートが Amazon S3 によって保持されます。マルチパートアップロードの実行期間を通して、アップロードとそれに関連するパートのために使用されるすべてのストレージ、帯域幅、リクエストに対して課金が行われます。マルチパートアップロードを停止した場合、アップロードアーティファクトおよびアップロードしたすべてのパートは Amazon S3 によって削除され、それらに対して課金されることはなくなります。料金に関する詳細については、「Amazon S3 の料金」を参照してください。

マルチパートアップロードの API サポート

これらのライブラリは、マルチパートオブジェクトのアップロードを容易にする、高レベルの抽象化を実現します。ただし、アプリケーションの必要に応じて REST API を直接使用することもできます。Amazon Simple Storage Service API リファレンスの以下のセクションでは、マルチパートアップロードの REST API について説明しています。

AWS コマンドラインインターフェイスの以下のセクションでは、マルチパートアップロードのオペレーションについて説明します。

マルチパートアップロードの AWS SDK サポート

AWS SDK を使用して、オブジェクトを部分的にアップロードできます。API アクションでサポートされる AWS SDK のリストについては、次を参照してください。

マルチパートアップロード API とアクセス許可

マルチパートアップロードオペレーションを使用するには、必要なアクセス権限を有している必要があります。マルチパートアップロードオペレーションを実行するためのアクセス許可を付与するには、アクセスコントロールリスト (ACL)、バケットポリシー、ユーザーポリシーを使用できます。ACL、バケットポリシー、またはユーザーポリシーを使用して割り当てることのできる、さまざまなマルチパートアップロードオペレーションに必要なアクセス許可を次の表に示します。

アクション 必要なアクセス許可

マルチパートアップロードの作成

マルチパートアップロードを作成するには、オブジェクトに対して s3:PutObject アクションを実行するための許可が必要です。

バケット所有者は他のプリンシパルに対して s3:PutObject アクションの実行を許可できます。

Initiate Multipart Upload

マルチパートアップロードを開始するには、オブジェクトに対して s3:PutObject アクションを実行するための許可が必要です。

バケット所有者は他のプリンシパルに対して s3:PutObject アクションの実行を許可できます。

イニシエータ

マルチパートアップロード開始者を識別するコンテナエレメント。イニシエータが AWS アカウントである場合、このエレメントは所有者エレメントと同じ情報を提供します。イニシエータが IAM ユーザーの場合には、このエレメントはユーザー ARN と表示名を提供します。

Upload Part

パートをアップロードするには、オブジェクトに対して s3:PutObject アクションを実行するための許可が必要です。

マルチパートアップロードの開始者がオブジェクトのパートをアップロードできるようにするため、バケット所有者はその開始者に対しオブジェクトへの s3:PutObject アクションの実行を許可する必要があります。

パートのアップロード (コピー)

パートをアップロードするには、オブジェクトに対して s3:PutObject アクションを実行するための許可が必要です。既存のオブジェクトからパートをアップロードするので、ソースオブジェクトに対して s3:GetObject を実行するための許可が必要です。

開始者がオブジェクトのパートをアップロードするには、バケットの所有者が、開始者にそのオブジェクトでの s3:PutObject アクションの実行を許可する必要があります。

マルチパートアップロードの完了

マルチパートアップロードを完了するには、オブジェクトに対して s3:PutObject アクションを実行するための許可が必要です。

マルチパートアップロードの開始者がオブジェクトのアップロードを完了できるようにするため、バケット所有者はその開始者に対しオブジェクトへの s3:PutObject アクションの実行を許可する必要があります。

マルチパートアップロードの中止

マルチパートアップロードを停止するには、s3:AbortMultipartUpload アクションを実行するための許可が必要です。

デフォルトでは、バケット所有者とマルチパートアップロードの開始者が、このアクションの実行を許可されます。開始者が IAM ユーザーである場合、そのユーザーの AWS アカウントもそのマルチパートアップロードを停止できます。

このようなデフォルト設定に加え、バケット所有者は他のプリンシパルに対してオブジェクトへの s3:AbortMultipartUpload アクションの実行を許可できます。バケット所有者は任意のプリンシパルに対し、s3:AbortMultipartUpload アクションを実行する権限を無効にすることができます。

パートのリスト

マルチパートアップロードに含まれるパートをリストするには、s3:ListMultipartUploadParts アクションを実行するための許可が必要です。

デフォルトではバケット所有者が、バケットに対する任意のマルチパートアップロードについてパートのリストを許可されています。マルチパートアップロードの開始者は、特定のマルチパートアップロードについてパートのリストを許可されます。マルチパートアップロードの開始者が IAM ユーザーである場合、その IAM ユーザーを管理している AWS アカウントもそのアップロードのパートのリストへのアクセス許可を付与されます。

このようなデフォルト設定に加え、バケット所有者は他のプリンシパルに対してオブジェクトへの s3:ListMultipartUploadParts アクションの実行を許可できます。バケット所有者は任意のプリンシパルに対し、s3:ListMultipartUploadParts アクションを実行する権限を無効にすることもできます。

マルチパートアップロードのリスト

バケットに対して進行中のマルチパートアップロードをリストするには、そのバケットに対して s3:ListBucketMultipartUploads アクションを実行するための許可が必要です。

デフォルト設定に加え、バケット所有者は他のプリンシパルに対してバケットへの s3:ListBucketMultipartUploads アクションの実行を許可できます。

AWS KMS 暗号化および復号関連のアクセス許可

AWS Key Management Service (AWS KMS) カスタマーマスターキー (CMK) を使用して暗号化を伴うマルチパートアップロードを実行するには、キーの kms:Decrypt および kms:GenerateDataKey* アクションに対するアクセス許可がリクエスタに必要です。マルチパートアップロードを完了する前に、暗号化されたファイルパーツからデータを復号して読み取る必要があるため、Amazon S3 にはこれらのアクセス許可が必要です。

詳細については、AWS ナレッジセンターの「AWS KMS CMK を使用した暗号化で Amazon S3 に大容量ファイルをアップロードする」を参照してください。

IAM ユーザーまたはロールが AWS KMS キーと同じ AWS アカウントにある場合、キーポリシーでこれらのアクセス許可が必要です。IAM ユーザーまたはロールが CMK とは異なるアカウントに属している場合、キーポリシーと IAM ユーザーまたはロールの両方に対するアクセス許可が必要です。

ACL のアクセス許可とアクセスポリシーのアクセス許可との関係については、「ACL アクセス許可とアクセスポリシーのアクセス許可のマッピング」を参照してください。IAM ユーザーについては、「ユーザーおよびグループの使用」を参照してください。