Open2

マルチパート・アップロードについて

まさぴょんまさぴょん

マルチパートアップロードとは?

5GBを超えるファイルをアップロードするために使用できるアップロードの方法です。

マルチパートアップロード API を使用すると、最大 5 TB のサイズの単一の大容量オブジェクトをアップロードできます。
マルチパートアップロード API は大容量オブジェクトのアップロードを効率よく行えるように設計されています。1 つのオブジェクトをいくつかに分けてアップロードできます。オブジェクトのパートは、単独で、任意の順序で、または並行してアップロードできます。マルチパートアップロードは 5 MB~5 TB のオブジェクトで使用できます。詳細については、マルチパートアップロードを使用したオブジェクトのアップロードとコピー を参照してください。
引用元:https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/upload-objects.html

  1. CreateMultipart でマルチパートアップロードを開始します
    • アップロードする領域を用意するようなイメージかな、と思います。
  2. 以下のどちらかの方法で、オブジェクトを分割しながらコピーします
    • UploadPartCopy を使う(同一サービス内の場合)
    • GetObject と UploadPart を使う(別サービス間でコピーする場合)
  3. すべてのコピーが完了したら CompleteMultipartUpload で完了する
    • CompleteMultipartUpload が正常に終了したら、通常の単一オブジェクトとしてアクセスできます

参考・引用

https://zenn.dev/kujime/articles/484b6e25d058fb

https://zenn.dev/mryhryki/articles/2022-12-01-s3-multipart-upload

https://dev.classmethod.jp/articles/studied-amazon-s3-multipart-upload-by-rust-code/

https://note.com/asahi_ictrad/n/n4b864fc31335

https://kaminashi-developer.hatenablog.jp/entry/2024/05/13/120000

https://developers.wano.co.jp/880/

https://stackoverflow.com/questions/31799982/aws-sdk-presigned-url-multipart-upload

まさぴょんまさぴょん

S3 の場合のマルチパートアップロードの処理フロー

マルチパートアップロードの全体的な流れは、以下のとおりです👀🌟

1. アップロードの開始

  • createMultipartUpload() メソッドを呼び出し、新しいマルチパートアップロードを開始します。
  • この呼び出しで取得した UploadId は、後続の操作で必要になります。

2. パートのアップロード

  • uploadPart() メソッドを使用して、ファイルを複数のパートに分割して並行または順次にアップロードします。
  • 各パートのアップロード後に、パート番号(PartNumber)と ETag(アップロードされたパートのハッシュ値)が返されます。

3. アップロードの完了

  • すべてのパートのアップロードが完了したら、completeMultipartUpload() メソッドを呼び出します。
  • このメソッドには、UploadId と各パートの ETag および PartNumber のリストを渡します。

completeMultipartUpload() の詳細な処理

  1. 結合の指示
    completeMultipartUpload() を呼び出すと、Amazon S3 に対して、アップロード済みのすべてのパートを指定した順序で結合し、1つの完全なオブジェクトとして保存するように指示します。

  2. 最終オブジェクトの作成
    Amazon S3 は指定されたパートを結合し、最終的なオブジェクトを作成します。この過程で、各パートの整合性と完全性が確認されます。

  3. レスポンスの取得
    処理が成功すると、S3 は新しいオブジェクトの ETag やメタデータを含むレスポンスを返します。

注意点

  1. エラー処理
    もしパートの情報が不足している、または間違っている場合、S3 はエラーを返し、アップロードの完了ができません。

  2. 中断やキャンセル
    アップロードを中止したい場合は、abortMultipartUpload() メソッドを使用して、既存のマルチパートアップロードをキャンセルできます。

まとめ

s3.completeMultipartUpload() は、Amazon S3 のマルチパートアップロード機能において、アップロードした各パートを結合し、最終的なオブジェクトとしてアップロードを完了するためのメソッドです。

s3.completeMultipartUpload() は、マルチパートアップロードの最終ステップであり、個別にアップロードされたパートを統合して、完全なオブジェクトとして Amazon S3 に保存する重要な役割を持っています。これにより、大容量のファイルを効率的かつ信頼性高くアップロードすることが可能になります。