こんにちは、エンジニアの君島です。
大きいオブジェクトなどのマルチパートアップロードを行っていると、不完全なマルチパートアップロードが残ってしまっていて予期せず無駄コストが発生しているかもしれません。
そのような時にAmazon S3 Storage Lensを使えば、不完全なマルチパートアップロードを確認することができます。視覚的に確認できるのもいいですし、削除マーカーの数や他の指標を確認することも簡単にできます。
今回は、これをコマンドラインで実行してすぐに確認できるようにしてみましょう。
目次
最初に結論
権限があるユーザーでAWS CloudShellを開いて、以下のコマンドをコピーして実行しましょう。
1 |
aws s3 ls | awk '{print $3}' | xargs -t -I@ aws s3api list-multipart-uploads --bucket @ | jq '.Uploads | length' |
実行すると、アカウントにあるS3バケット内に残ってしまっている不完全なマルチパートアップロードの数が出力されます。実行したコマンドを出力しているので、どのバケットが対象か分かるようになっています。
1 2 3 4 |
aws s3api list-multipart-uploads --bucket kimishima-dev-log 2 aws s3api list-multipart-uploads --bucket kimishima-dev-log2 0 |
0より大きい数字になっているS3バケットには不完全なマルチパートアップロードが残っているので、そのバケットに対してバケットライフサイクル設定がなされてるかを確認します。バケットライフサイクル設定がなければ、設定を追加するようにしましょう。
なお、バケットの不完全なマルチパートアップロードを削除するライフサイクル設定があるかどうかは以下のコマンドでも確認することができます。
1 |
aws s3 ls | awk '{print $3}' | xargs -t -I@ aws s3api get-bucket-lifecycle-configuration --bucket @ | jq '.Rules[] | select(.Status=="Enabled" and .AbortIncompleteMultipartUpload != null)' |
コマンドの解説
S3バケットの一覧を出力する
コマンドの理解を深めるために、細かく見ていきましょう。
1 |
aws s3 ls |
上記のコマンドの出力は以下のような形式で出力されます。
1 2 3 |
<DATE____> <TIME__> <BUCKET_NAME> 2024-01-16 04:58:15 kimishima-dev-log 2024-01-16 05:00:10 kimishima-dev-log2 |
バケット名だけ抽出したいので、awkで3列目だけ表示します。
1 |
aws s3 ls | awk '{print $3}' |
これによって出力は3列目のバケット名だけ表示をすることができます。
1 2 3 |
<BUCKET_NAME> kimishima-dev-log kimishima-dev-log2 |
xargsで引数を受けよう
1 |
xargs -t -I@ |
-tオプションは-verboseオプションで、コマンドを標準エラーに出力するようにします。
また、-Iオプションで後ろに続く文字列をplaceholderとして扱い、後続のコマンドの引数に充てることができます。
マルチパートアップロードを表示する
マルチパートアップロードを表示しましょう。@をplaceholderとして利用していますが、本来はバケット名を指定することになります。
1 |
aws s3api list-multipart-uploads --bucket @ |
jqで表示をフィルタリングする
list-multipart-uploadsの結果はjsonで出力されるので、jqでフィルタリングしましょう。lengthは値の長さを取得するjqのビルトインコマンドです。
1 |
jq '.Uploads | length' |
まとめと告知
AWSアカウント内のS3バケットに残っている不完全なマルチパートアップロードをワンライナーで確認できる方法をまとめました。併せて不完全なマルチパートアップロードを削除するライフサイクルルールが有効になっているかを確認するワンライナーも用意しておきました。
もし、コマンド実行の結果、不完全なマルチパートアップロードが残っていたり、ライフサイクルルールを設定していなかった場合は、バケットに設定を加えるようにしましょう。
例えばマネジメントコンソールからは以下のようにライフサイクルルールを設定することができます。
カジュアル面談も実施中
ギークフィードではAWSエンジニアなどの職種で一緒に働く仲間を募集しています。
弊社に興味を持っていただいたり、会社のことをカジュアルに聞いてみたいという場合でも、ご気軽にフォームからお問い合わせください。その場合はコメント欄に、カジュアルにお話したいです、と記載ください!
- CLIでAmazon S3にあるファイル内の文字列検索をしてみる - 2024-02-01
- 不完全なマルチパートアップロードをCLIで確認してS3の無駄コストを無くそう - 2024-01-29
- AlmaLinux9.3にPHP8.3を入れてLaravel9から10にバージョンアップする - 2024-01-12
- AWS CloudShellの表現力を確認してみよう - 2024-01-01
- AWSのアーキテクチャーを学べるAWS Card Clash攻略Wiki - 2023-12-26