[小ネタ] Amazon S3 マルチパートアップロードの状況をサクッとコマンドで確認したい

[小ネタ] Amazon S3 マルチパートアップロードの状況をサクッとコマンドで確認したい

Amazon S3のマルチパートアップロードが結構溜まりがちな環境へ捧ぐ

こんにちは、クラウド事業本部 コンサルティング部の荒平(@eiraces)です。

Amazon S3に100MB以上のオブジェクトをアップロードする際は、マルチパートアップロードの利用がベストプラクティスとされています。(参照
ユーザーが意図していなくても、CLIなどアップロード手法によっては 自動でマルチパートアップロードが開始 されますが、そのステータスを確認するのはコンソール上だとS3 Storage Lensなどを利用する必要があり少し煩雑です。
Trusted Advisor以外に手軽に確認できるものがあればよいのですが、一旦コマンドを確認することにしました。

公式のドキュメントはこちら:

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/list-mpu.html

なお、マルチパートアップロードは7日以上掛かるものに関してライフサイクルルールを設定することが推奨されており、Trusted Advisorでも検知されます。以下のブログもご参考ください。

https://dev.classmethod.jp/articles/trusted-advisor-s3-multipart-upload/

環境上に存在するS3バケットのマルチパートアップロードを確認する

以下のコマンドで、アカウントに存在するマルチパートアップロードを一発確認できます。

for bucket in $(aws s3api list-buckets --query 'Buckets[*].Name' --output text); do
  echo "Checking bucket: $bucket"
  aws s3api list-multipart-uploads --bucket $bucket
  echo "-----------------------"
done

以下のような出力が得られます。

-----------------------
Checking bucket: qtransform-vmware-target-xxx
{
    "RequestCharged": null,
    "Prefix": null
}
-----------------------
Checking bucket: sample-bucket-xxx
{
    "RequestCharged": null,
    "Prefix": null
}
-----------------------
Checking bucket: backup-xxx
{
    "RequestCharged": null,
    "Prefix": null
}

マルチパートアップロードがある場合は、UploadIdや開始時刻などと共に報告されます。

-----------------------
Checking bucket: bucketname-xxx
{
    "Uploads": [
        {
            "UploadId": "xxx9V4L8qjTtnuNNXsCGqgJ2YKjzqK5AI7F3gCiPzQg5_J4ZZYFDjjn.v2M6jMYhyg.MxmKkfht0OwvwNm9we2.U6edP1v0gKXuxeNw9U5oEavAa1xV7pqs4DW.219d02NuBpho2ixxx",
            "Key": "test-multipart-file",
            "Initiated": "2025-05-21T07:15:42+00:00",
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "members-80686",
                "ID": "30830a155ce930c8a0f2affd45220cfedb33bb59592b7fd4b948f9231b2xxx"
            },
            "Initiator": {
                "ID": "arn:aws:iam::0000000000000:user/xxx",
                "DisplayName": "xxx"
            }
        }
    ],
    "RequestCharged": null,
    "Prefix": null
}
-----------------------

マルチパートアップロードを手動で中断する

マルチパートアップロードの終了には以下コマンドを利用します。なお、自動化する場合は冒頭に引用したライフサイクルルールを利用することをお勧めします。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/abort-mpu.html

aws s3api abort-multipart-upload --bucket バケット名 --key オブジェクトキー --upload-id アップロードID

コマンド例:

aws s3api abort-multipart-upload \
  --bucket bucketname-xxx \
  --key test-multipart-file \
  --upload-id "xxx9V4L8qjTtnuNNXsCGqgJ2YKjzqK5AI7F3gCiPzQg5_J4ZZYFDjjn.v2M6jMYhyg.MxmKkfht0OwvwNm9we2.U6edP1v0gKXuxeNw9U5oEavAa1xV7pqs4DW.219d02NuBpho2ixxx"

おわりに

S3のマルチパートアップロードについて問い合わせを受けたので執筆してみました。
管理者側からすると、ユーザーが意図して放置しているのか、それとも不要なのか判別が付きづらいとのことで開始した時間・ユーザー名・オブジェクトキーが分かるのは有用ですね。

このエントリが誰かの助けになれば幸いです。
それでは、クラウド事業本部 コンサルティング部の荒平がお送りしました!

参考

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/mpuoverview.html

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.