メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

マルチパートアップロードの概要

マルチパートアップロード API を使用すると、大容量オブジェクトをいくつかに分けてアップロードできるようになります。この API では、新しい大容量オブジェクトをアップロードしたり、既存オブジェクトのコピーを作成したりできます(オブジェクトに対するオペレーション を参照)。

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

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

Multipart Upload Initiation

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

パートのアップロード

パートをアップロードするときは、アップロード ID に加えて、パート番号を指定する必要があります。1~10,000 の範囲で任意のパート番号を選択できます。パート番号によって、アップロードするオブジェクトに含まれるパートとその位置が一意に識別されます。以前にアップロードしたパートと同じパート番号を使って新しいパートをアップロードした場合、以前のパートは上書きされます。パートをアップロードするたびに、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 料金表」を参照してください。

バケットライフサイクルポリシーを使用した完了しないマルチパートアップロードの中止

マルチパートアップロードを開始したら、パートをアップロードし始めます。Amazon S3 にはこれらのパートが保存されますが、それらのパートをすべてアップロードし、successful リクエストを送信してマルチパートアップロードを完了した場合のみオブジェクトが作成されます (マルチパートアップロードの完了リクエストが成功したことを確認してください)。マルチパートアップロードの完了リクエストを受け取ると、Amazon S3 はパートを組み立ててオブジェクトを作成します。

マルチパートアップロードの完了リクエストが正常に送信されなかった場合、Amazon S3 はパートを組み立てず、オブジェクトを作成しません。 したがって、パートは Amazon S3 に残るため、Amazon S3 に保存されたパートに対して支払いが発生します。ベストプラクティスとして、ストレージコストを最小限に抑えるため、ライフサイクルルールを設定することをお勧めします (AbortIncompleteMultipartUpload アクションを使用)。

Amazon S3 では、バケットライフサイクルがサポートされます。バケットライフサイクルを使用すると、開始後指定された日数内に完了しないマルチパートアップロードを中止するよう Amazon S3 に指示できます。マルチパートアップロードが期間内に完了しない場合、中止オペレーションの対象となり、Amazon S3 がマルチパートアップロードを中止します (さらに、マルチパートアップロードに関連付けられたパートを削除します)。

AbortIncompleteMultipartUpload アクションにルールを指定するライフサイクル設定の例を次に示します。

Copy
<LifecycleConfiguration> <Rule> <ID>sample-rule</ID> <Prefix></Prefix> <Status>Enabled</Status> <AbortIncompleteMultipartUpload> <DaysAfterInitiation>7</DaysAfterInitiation> </AbortIncompleteMultipartUpload> </Rule> </LifecycleConfiguration>

この例では、ルールにより Prefix 要素の値が指定されていないため (オブジェクトキー名プレフィックス)、マルチパートアップロードを開始したバケット内のすべてのオブジェクトに適用されます。開始されてから 7 日以内に完了しなかったマルチパートアップロード、中止オペレーションの対象となります (アクションは、完了したマルチパートアップロードに影響を与えません)。

バケットライフサイクル設定についての詳細は、「オブジェクトのライフサイクル管理」を参照してください。

注記

マルチパートアップロードがルールで指定された日数内に完了した場合、AbortIncompleteMultipartUpload ライフサイクルアクションは適用されません (つまり、Amazon S3 はアクションを何も実行しません)。さらに、このアクションはオブジェクトには適用されず、このライフサイクルアクションによって削除されるオブジェクトはありません。

次の put-bucket-lifecycle CLI コマンドは、指定したバケットのライフサイクル設定を追加します。

Copy
$ aws s3api put-bucket-lifecycle  \ --bucket bucketname  \ --lifecycle-configuration filename-containing-lifecycle-configuration

CLI コマンドをテストするには、以下の作業を行います。

  1. AWS CLI をセットアップします。手順については、「AWS CLI のセットアップ」を参照してください。

  2. 次のサンプルライフサイクル設定をファイル (lifecycle.json) に保存します。サンプル設定では、空のプレフィックスが指定されているため、バケット内のすべてのオブジェクトに適用されます。ポリシーがオブジェクトのサブセットに制限されるようにプレフィックスを指定できます。

    Copy
    { "Rules": [ { "ID": "Test Rule", "Status": "Enabled", "Prefix": "", "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 } } ] }
  3. 次の CLI コマンドを実行して、バケットにライフサイクル設定を指定します。

    Copy
    aws s3api put-bucket-lifecycle   \ --bucket bucketname  \ --lifecycle-configuration file://lifecycle.json
  4. 確認するには、get-bucket-lifecycle CLI コマンドを使用してライフサイクル設定を取得します。

    Copy
    aws s3api get-bucket-lifecycle  \ --bucket bucketname
  5. ライフサイクル設定を削除するには、delete-bucket-lifecycle CLI コマンドを使用します。

    Copy
    aws s3api delete-bucket-lifecycle \ --bucket bucketname