S3は保存してくだけで料金を取られるので、余分なファイルは削除したい。
管理するためにもS3のバケット毎の容量とファイル数を取得する。
awkで高速化をしているので読みづらいが、AWS-CLIのプロファイルを設定すればそのまま使える。
結果は「バケット名 : ファイル数 容量」を容量が多い順に表示、最後に合計の容量を計算してくれる。
#AWSのプロファイル PROFILE= #日本語文字化け対応 export PYTHONIOENCODING=UTF-8 #バケット名取得 BUCKET_NAME_LIST=`aws s3 ls --profile ${PROFILE} | sed -E 's/[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} //g'` #CloudWatchからS3のバケット毎の容量とオブジェクト数を取得 start_time=`date -d "1 day ago" "+%Y-%m-%dT00:00:00Z"` end_time=`date "+%Y-%m-%dT00:00:00Z"` period=86400 #1日 cmd=' { "aws cloudwatch get-metric-statistics --profile '${PROFILE}' --output json --namespace AWS/S3 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value="$1" Name=StorageType,Value=StandardStorage --statistics Sum --start-time '${start_time}' --end-time '${end_time}' --period '${period}' | jq -r \".Datapoints[].Sum\"" | getline SIZE; "aws cloudwatch get-metric-statistics --profile '${PROFILE}' --output json --namespace AWS/S3 --metric-name NumberOfObjects --dimensions Name=BucketName,Value="$1" Name=StorageType,Value=AllStorageTypes --statistic Sum --start-time '${start_time}' --end-time '${end_time}' --period '${period}' | jq -r \".Datapoints[].Sum\"" | getline NUM; printf("%s %s %s\n", SIZE, NUM, $1); } ' RES=`echo "${BUCKET_NAME_LIST}" | awk "${cmd}" | sort -k 1nr` cmd='{ SUM+=$1; if($1 < 1024) printf("%s : %s [files] %s [Byte]\n", $3, $2, $1); else if($1 >= 1024 && $1 < 1024*1024) printf("%s : %s [files] %.2f [KB]\n", $3, $2, $1/(1024)); else if($1 >= 1024*1024 && $1 < 1024*1024*1024) printf("%s : %s [files] %.2f [MB]\n", $3, $2, $1/(1024*2014)); else if($1 >= 1024*1024*1024) printf("%s : %s [files] %.2f [GB]\n", $3, $2, $1/(1024*1024*1024)); } END{printf("\nTotal Size: %s [GB]\n",SUM/(1024*1024*1024))} ' echo "${RES}" | awk "${cmd}"