S3の現在の総保存量を計算するスクリプトを書いた

こんにちは。望月です。
S3は非常に安いストレージとはいえ、保存する量が数GBやTBになると、課金額もそれなりに多くなっていきます。
ですが、Management Consoleからは、S3全体でどれだけの容量を使っているのかを確認することは出来ません。 *1
なので、現在の保存容量を確認するためのスクリプトを書いてみました。今は全バケットの合計を表示するだけしかできませんが、近いうちにバケットごとや特定のprefix以下の容量なども取得できるように対応したいと思います。
require 'aws-sdk'
require 'optparse'
bucket_name = nil
ARGV.options do |opt|
begin
access_key = nil
secret_key = nil
opt.on('-h', '--help') { puts opt.help; exit 0 }
opt.on('-k', '--access-key ACCESS_KEY') { |v| access_key = v }
opt.on('-s', '--secret-key SECRET_KEY') { |v| secret_key = v }
opt.on('-b', '--bucket SECRET_KEY') { |v| bucket_name = v }
opt.parse!
if !access_key or !secret_key
puts opt.help
exit 1
end
AWS.config({
:access_key_id => access_key,
:secret_access_key => secret_key
})
rescue => e
$stderr.puts e
exit 1
end
end
s3 = AWS::S3.new
size = 0
s3client = {}
s3.buckets.each do |bucket|
region = bucket.location_constraint.nil? ?
"us-east-1" :
bucket.location_constraint
s3client[region] = AWS::S3.new(:region => region)
size += s3client[region].buckets[bucket.name].objects.map(&:content_length).inject(:+) unless s3client[region].buckets[bucket.name].empty?
end
$stdout.puts "Total : #{size/1024/1024} MiB"
ファイルはGistにも置いてあります。
以下の様に使って下さい。
$ ruby count.rb -k <aws_access_key> -s <aws_secret_key>
脚注
- 料金CSVを読み解けば、現在の保存総容量が確認できますが、なかなかつらい作業です。 ↩