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

AWS

こんにちは。望月です。 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>

脚注

  1. 料金CSVを読み解けば、現在の保存総容量が確認できますが、なかなかつらい作業です。