AWSの現在の使用料金をメールでお知らせ

先月、700時間もインスタンス上げちゃいましたよー
ねえ聞いてくださいよー

AWSの支払額は従量課金制なので、現時点でいくらのお金が
発生しているか気になりますよね?

ec2ツールにそれらしいのが見つからなかったので、自力でとってくるしかなさそうです。

現時点の使用料金はログイン⇒Activity Reportで見れるので、
perlで同じことをさせればOKです

以下の$E_MAIL$PASSWDを正しく変更して下さい

#!/usr/bin/perl
######################################
my $E_MAIL='hoge@yourdomain.jp';
my $PASSWD='hogehoge';
######################################

use warnings;
use strict;
use feature qw(say);
use utf8;
use Encode;
use WWW::Mechanize;
use HTML::TreeBuilder;

my $mech = new WWW::Mechanize (autocheck => 1);
$mech->agent_alias("Linux Mozilla");
$mech->get("https://aws-portal.amazon.com/gp/aws/developer/registration/index.html");
$mech->field(email => $E_MAIL);
$mech->field(create => '0');
$mech->field(password => $PASSWD);
$mech->submit_form();
$mech->follow_link(text => "Account Activity");
my $tree = HTML::TreeBuilder->new;
$tree->parse(decode("UTF-8",$mech->content));
$tree->eof();

my ($PLAN,$USD);
format =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<
$PLAN,$USD
.

$PLAN="Total";
$USD = $tree->look_down(class => "taupeHeader bordgreybot bordgreytop")->find('span')->as_text;
$USD=~s/^/ /;
write;

my @plan;
for ($tree->look_down(class => 'bordgreybot padbot2')){
    push (@plan,$_->find('span')->as_text);
}
my @charge;
for ($tree->look_down(class => 'bold bordgreybot alignrt')){
    push (@charge,$_->as_text);
}
for (0..$#plan){
    $PLAN=$plan[$_];
    $USD=$charge[$_];
    write;
}

$tree = $tree->delete;

上記のスクリプトをamazon.plとして保存し、以下のコマンドでメール送信します(root@localhost宛て)

$ amazon.pl | mail -s `date +%Y/%m/%d`" AWS Activity Report" root@localhost

こんな感じでメールがくればOK

あとはcronとかに登録しておくと良いんじゃないでしょうか

利用料金が一定額を超えたらアラートを出すなどの監視については
billing alertをお使い下さい

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

yamasita

東京電機大学工学部→3年間某SIerにて銀行システムの開発→bpsに入社

yamasitaの書いた記事

インフラ
現場で使うansible

2014年12月25日

インフラ
検証環境の作り方

2014年08月14日

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ