はじめに
業務上の調査でマルチパートアップロードで不完全なもの(完了していないもの)がないか調べる必要があったのですが、マルチパートアップロードの状態はどうやって確認することができるのか備忘録もかねて記載したいと思います。
マルチパートアップロードとは
そもそもマルチパートアップロードとは何かと思うかもしれませんが、マルチパートアップロードはファイルを複数のパーツに分割して S3 バケットにコピー (アップロード)できる機能となります。
アップロードの流れとして、ファイルを複数のパートに分割されます。その際、分割されたいずれかのパートが送信に失敗すると、他のパーツに影響を与えることなくそのパートを再送することができます。
全てのパートがアップロードされたら、S3 はこれらのパートを組み立ててファイルを作成します。
個人的に作成したイメージ図は以下の通りとなります。
マルチパートアップロードのメリット
マルチパートアップロードの主なメリットは下記のとおりです。
- 複数にファイルを分割してアップロードすることで、アップロード中に中断さてもアップロードを再試行するだけで済み、最初からファイルのアップロードを再開する必要がありません。
- 並列にアップロードすることで、スループット(データ転送量)を向上させることができます。
- パートのサイズが小さいほど、ネットワークエラーにより失敗したアップロードを再開した際、影響を最小限に留めることができます。
- ファイルの最終的なサイズが不明な状態でもアップロードを開始できます。
注意点
マルチパートアップロードを開始しすると、完了するか停止しない限り、アップロードしたパートのストレージに対する課金を停止できません。マルチパートアップロードを完了または停止した後でのみ、パートのストレージに対する課金を停止します。
そのため不完全なマルチパートアップロードをそのままにしてしまうと、その間、不完全に残ってしまったパート分の課金がされ続けることとなってしまいます。
不完全なマルチパートアップロードの確認方法
GUI/CLI のどちらでも確認が可能となります。
GUI 上での確認方法
S3 Storage Lens のダッシュボードで確認ができます。
S3 Storage Lens とは
S3 Storage Lensはストレージの使用状況とアクティビティを組織全体で可視化できる機能となります。S3 Storage Lens メトリクスを使用することで、組織全体でどれだけのストレージがあるか、急速に増加しているバケットやプレフィックスは何かなど分析できます。
S3 Storage Lens は、メトリクスを分析して、ストレージコストを最適化し、データ保護に関するベストプラクティスに則った推奨事項を提供します。
Amazon S3 のコンソールから「Storage Lens」の「ダッシュボード」をクリックします。
「default-account-dashboard」がデフォルトで生成されているので、クリックします。
ダッシュボードの一番下の「yyyy/mm/ddの上位 N の概要」のメトリクスで、「不完全なマルチパートアップロードのバイト数」を確認することができます。
また「%(不完全なマルチパートアップロードのバイト数)」、「不完全なマルチパートアップロードのオブジェクト数」、「%(不完全なマルチパートアップロードのオブジェクト数)」も確認可能となります。
CLI 上での確認方法
下記の aws cli コマンドで不完全なマルチパートアップロードの一覧が表示されます。aws s3api list-multipart-uploads --bucket バケット名
不完全なマルチパートアップロードがあった場合は下記の例のようなメッセージで、結果が返ってくるようです。
参考:https://repost.aws/ja/knowledge-center/s3-multipart-upload-cli
{ "Uploads": [ { "Initiator": { "DisplayName": "multipartmessage", "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " }, "Initiated": "2016-03-31T06:13:15.000Z", "UploadId": "examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB_A-", "StorageClass": "STANDARD", "Key": "", "Owner": { "DisplayName": "multipartmessage", "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " } } ] }
特に無ければ、下記のメッセージで返されます。
{ "RequestCharged": null, "Prefix": null }
終わりに
今回は単純に不完全なマルチパートアップロードがないか調べる必要があっただけだったのですが、今後業務でマルチパートアップロードの状態を確認し、コスト最適化の提案などに繋げていきたいと感じました。また S3 Storage Lens の無料のメトリクスであれば、料金がかからずに使えるので、S3 Storage Lens も色々と試してみて、今後積極的に活用していきたいです。