S3のマルチパートアップロードとaws s3 cpコマンドの挙動を学んだ
マルチパートアップロードとは
- aws s3のマルチパートアップロードとは、1つのオブジェクトを複数のパートに分けてS3バケットにアップロードできる機能
- マルチパートアップロードは、5MB~5TBのサイズまで対応可能
- オブジェクトのパートが全てアップロード完了したら、パートには番号が付与されているので、それを元に組み立てて1つのオブジェクトを作成する
- AWSでは、100MBを超えるオブジェクトはマルチパートアップロードを使うことを推奨している
マルチパートアップロードの挙動
- 例えば、100GBのファイルをマルチパーとアップロードすると、合計1002回のAPIコールが実行される
- 内訳は、100MBごとに分割されるので、UploadPartが1000回呼び出される
- マルチパートアップロードの開始と終了時に、CreateMultipartUploadと CompleteMultipartUploadが呼び出される
- マルチパートアップロードが正常に完了しなかったら( CompleteMultipartUploadAPIがコールされなかったら)、S3はパートを組み立ててオブジェクトを作成しないまま、そのまま残り続ける
- オブジェクトとして組み立てられなかったパートに対しても課金が発生するので注意
aws s3コマンドの挙動
- AWS CLIには、aws s3コマンドとaws s3apiコマンドが存在する
- これらの違いは、s3apiコマンドの方が高レベルのs3コマンドでは公開されていないAPIレベルの操作ができる点
- つまり、s3 cpコマンドはいくつかのAPIコールがラップされているということ
- 注意点として挙げられているのは、大容量オブジェクトをアップロードする場合、AWS CLIは自動的にマルチパートアップロードを実行すること。aws s3コマンドを使っている場合は、コマンドの実行に失敗したり、システム障害により正常にコマンドが実行完了しなかった場合は、オブジェクトとして生成されなかったパートが残り続けるため注意しなければならない。
- AWSのベストプラクティスとしては、意図せず不完全なマルチパートアップロードによって発生したパートを削除するために、ライフサイクルを設定することを推奨している
オブジェクト数をカウントする時に気をつけたいこと
- CloudwatchやS3 Storage Lensで確認できる
NumberOfObjectsは、すべてのストレージクラスのバケットに保存された保存数(最新、最新ではないオブジェクト数の合計+削除マーカーがついたオブジェクト数+不完全なマルチパートアップロードの合計パート数)なので、注意 aws s3 ls <s3_path> --recursive | wc -lコマンドなどでカウントした数は、実存するオブジェクトのみカウントしている- これを知らなくて、
NumberOfObjectsと差分があり戸惑った