あきろぐ

いろいろめもするよ🐈🐈🐈

S3のマルチパートアップロードとaws s3 cpコマンドの挙動を学んだ

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

  • aws s3のマルチパートアップロードとは、1つのオブジェクトを複数のパートに分けてS3バケットにアップロードできる機能
  • マルチパートアップロードは、5MB~5TBのサイズまで対応可能
  • オブジェクトのパートが全てアップロード完了したら、パートには番号が付与されているので、それを元に組み立てて1つのオブジェクトを作成する
  • AWSでは、100MBを超えるオブジェクトはマルチパートアップロードを使うことを推奨している
    • メリットとして挙げられているのは以下の通り:
      • パートを並列にアップロードできるので、スループットが向上する(帯域幅を最大限活用できる)
      • ネットワークエラーによって再開する時のリスクを最小限にできる

マルチパートアップロードの挙動

  • 例えば、100GBのファイルをマルチパーとアップロードすると、合計1002回のAPIコールが実行される
  • マルチパートアップロードが正常に完了しなかったら( 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と差分があり戸惑った

参考文献