経緯
S3のストレージ費用ってバケット単位で確認するのであれば、CloudWatchを使用すれば確認できますが、フォルダ単位で確認しようと思うとどうやって確認するかわからないことがあります。
今回はAWS CLIにコマンド一発で指定したS3バケット、フォルダ配下のデータサイズとオブジェクト数が取得できるコマンドを実行してみました。
公式の説明はこちら
docs.aws.amazon.com
実施内容
最初に記載しまいますが、以下のコマンドを実行しました。
aws s3 ls s3://test-tmp-inventory/test-cloudberry/ --recursive --human-readable --sum
各オプションの説明はこんな感じです。
オプション | 説明 |
---|---|
--recursive | 指定したディレクトリ、プレフィックス配下のオブジェクトまで再帰的に実行する |
--human-readable | ファイルサイズを人が見やすい形式で表示 |
--sum | オブジェクト数や合計サイズなどの要約情報の表示 |
実施作業
コマンド実行
EC2でもローカルPCでもどこでも良いのですが、AWS CLIが実行可能かつS3へアクセス可能な端末からコマンドを実行します。
指定したフォルダ配下のオブジェクトの一覧が表示され、最後にオブジェクト数の合計とサイズが出力されているのがわかります。
コマンド自体は凄い簡単ですが、裏ではS3オブジェクトに対してLISTリクエストが実行されているので、S3に大量のオブジェクトが格納されている場合には費用面に気を付けてください。
一々オブジェクトの一覧を出力したくないという場合は、以下のコマンドでオブジェクト数、データサイズのみを出力できます。(ただのPowerShellですが)
aws s3 ls s3://test-tmp-inventory/test-cloudberry/ --recursive --human-readable --sum | Select-String "Total Size" | % { $($_ -split ",") } | % { $_.TrimStart() }
aws s3 ls s3://test-tmp-inventory/test-cloudberry/ --recursive --human-readable --sum | Select-String "Total Objects" | % { $($_ -split ",") } | % { $_.TrimStart() }
感想及び所感
シンプルに今S3上にどれだけのオブジェクトがあって、データサイズがどれぐらいかを知りたいときには有用なコマンドですね。
恒常的に取得して確認したいという場合には、ファイル出力してS3にアップしたりLambda経由でRedshiftに保存したりする必要があるかもしれません。