AWS Billing Alerts を使った請求金額通知と、CLIを使った金額取得

AWS Billing Alerts を使った請求金額通知と、CLIを使った金額取得 はてなブックマーク - AWS Billing Alerts を使った請求金額通知と、CLIを使った金額取得


Amazon Web Services の課金情報は、新しい Billing Alert 機能を使うことで、おおよその見積もりが出来るようになった模様。一通り有効にする方法、CloudWatchでメール通知する設定、そして、CLIを使ってコマンドラインでデータを取得するまでの流れをまとめました。

◆ Billing Alerts

AWS Blog にて、新たに “Billing Alerts”(請求通知)なる機能が搭載された事を知る。何でも、おおよその利用料金を見積もりしてくれるようだ。しかも料金の閾値を設定し、越えた場合にメールで通知することも出来るとのこと。ほほう。

【AWS発表】 AWSクラウドの利用料金を監視・通知できるように – Amazon Web Services ブログ
http://aws.typepad.com/aws_japan/2012/05/monitor-estimated-charges-using-billing-alerts.html

◆ Billing Alerts を有効にしてみる

"Enable Now"をクリック

有効にするには Account Activity にアクセス。「どこに Billing Alertsがあるんだろ?」と思って画面を見渡すと…【 Enable Now 】のリンクを発見。

早速クリックをするものの、何だかダイアログが表示されてしまう。

どうやら、”秘密の質問”的なものを設定しないと、見積もりが出来ない模様。引き続き、【 Update this information now 】をクリック。

質問と答えを埋めて、【変更を保存】

すると、AWS アカウントの個人情報ページが表示される。そのページの一番下のほうに、なにやら該当する項目を発見。”Configure Security Challenge Questions” の項目を3つ埋めて、更新する必要があるようだ。

“Question”で質問項目を選び、”Answer”に答えを記入。3つ分、しっかり埋めます。そして【変更を保存】。

クリックすると、”アカウントアクティビティ”の画面に戻ります。ここで再び【 Enable Now 】をクリックすると、有効になったと画面に表示される。

あとは、15分くらい待てば料金の見積もりが終わり、アラートが使える模様。

ちょっと一息、コーヒータイム( ´∀`)

席に戻ると、先ほどのアカウントアクティビティの画面に、課金見積もりの監視が有効になっっとメッセージが表示されてる。早速 Billiing Alerts を有効にすべく、【 Set your first billing alarm 】(はじめてのアラームを有効にする)をクリック。

閾値に達したらメールを送るという事と、Free Tier(10アラート、1000通のメールまで無償)の説明が出ている。アラームの作成【 Create Alarm 】をクリック

◆アラームの作成

次は、”Alarm details for AWS billing estimated charges” が表示される。ここでは、【 Create Alarm 】をクリック

長々と説明が出ているが、要は Free Tier が適用されるので、アラーム10個と、メール1,000通までは無償ですよという内容。

ここでアラームを作成することも可能だが、一旦「Close」をクリックして保留しても構わない。保留した場合は、Management Console 上の “CloudWatch” から、Metrics →”Billing” をクリックすることで、現状の確認やアラートの追加が可能になる。

"CloudWatch" -> "Metrics" -> "Billling" の画面。サービス毎にグラフ化が可能

ちなみに、Metrics のリージョンは”US East (N. Virginia)” ですが、ここでは全リージョン分が表示されています。今のところ、各リージョン毎のデータは出せないみたいなので、注意(FAQ参照)。

さて、特定の閾値を超えたら、メールを送りたい。もう一度アラートの設定に戻る。

アラームを作成するには、”CloudWatch” -> “Alarms” -> “Billing Alarms”をクリックする。

先ほどの画面と同じように、ダイアログが表示されるので、ここでは【 Create Alarms 】をクリックする。

画面をクリックすると、詳細入力のダイアログが出てくる。アラートを出すには、合計費用のほか、EC2やRDS毎やデータ転送量(Data Transfer)など、サービス毎・紐づけられているアカウント毎に設定することが出来る。

とりあえず、ここではトータル $15 にし、【 Create Alarm 】をクリックする。

正常に処理されると、上図のように表示される。

また、”With thease recipients”で指定したメールアドレスには、次のような確認メールが届く。本文をクリックしておくこと。

AWSから届く確認用のメール。"Confirm subscription"を押すと…

このように完了した旨が表示される。

◆ CLI を使って見積もり金額データを取得する

見積額のデータを参照するためには、CloudWatch 用の CLI を使う事が出来る。なお、この CLI を使うためには、Java 1.5 以上の環境が必要。

Amazon CloudWatch Command Line Tool : Developer Tools : Amazon Web Services
http://aws.amazon.com/developertools/2534

これをダウンロード・展開。

$ wget http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip
$ unzip CloudWatch-2010-08-01.zip
$ cd CloudWatch-1.0.12.1/

次は、環境変数を指定する。 JAVA_HOME と AWS_CLOUDWATH_HOME 等々で、それぞれのパスを明示(各々の環境にあわせること)

$ export JAVA_HOME=/usr/local/jdk1.6.0
$ export AWS_CLOUDWATCH_HOME=/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1
$ export PATH=$PATH:/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1/bin
$ export EC2_REGION=us-east-1

そして、AWS キーの指定(X.509 Certsを使う方法もある)。環境変数 AWS_CREDENTIAL_FILE の指定も忘れずに。

$ cp ./credential-file-path.template ./credential
$ chmod 600 ./credential
$ export AWS_CREDENTIAL_FILE=このcredentialファイルのパス
$ vi credential

AWSAccessKeyIdと、AWSSecretKeyを指定。ファイルの取り扱いには要注意。

※詳細は、付属の “README.TXT” を参照のこと。

コマンドの実行テスト。エラーが無ければ問題無し。

$ mon-cmd --help
Command Name                       Description
------------                       -----------
help
mon-delete-alarms                  Delete alarms
(snip)
version                            Prints the version of the CLI tool and the API.

 For help on a specific command, type '<commandname> --help'

次はbillingに関するmetricsを取得する。

$ mon-describe-alarms --headers
ALARM                                 STATE  ALARM_ACTIONS                             NAMESPACE    METRIC_NAME       PERIOD  STATISTIC  EVAL_PERIODS  COMPARISON            THRESHOLD
awsbilling-AWS-Service-Charges-total  OK     arn:aws:sns:us-eas...1177877630:NotifyMe  AWS/Billing  EstimatedCharges  21600   Maximum    1             GreaterThanThreshold  15.0

このように、先ほど設定したアラームの情報が表示される。

捕捉:CloudWatchのCLIについては、@mikeda さんの blog 記事が参考になります。

実際にデータを取得するには、mon-get-stats コマンドを使う。

$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "Currency=USD"
2012-05-19 07:31:00  13.88  None

これは、コマンドを実行した時点で、全ての合計推定金額が $13.88。EC2や、RDS等のデータを取得したい場合は、dimensions のオプションを変更する。利用可能なdimensionsを調べるには、mon-list-metrics コマンドで取得可能。

$ mon-list-metrics | grep Billing
EstimatedCharges                AWS/Billing  {ServiceName=AmazonEC2,Currency=USD}
EstimatedCharges                AWS/Billing  {ServiceName=AmazonRDS,Currency=USD}
EstimatedCharges                AWS/Billing  {LinkedAccount=xxxxx,Currency=USD}
EstimatedCharges                AWS/Billing  {ServiceName=AmazonS3,LinkedAccount=xxxxx,Currency=USD}
(snip)
EstimatedCharges                AWS/Billing  {ServiceName=AmazonRoute53,Currency=USD}
EstimatedCharges                AWS/Billing  {ServiceName=AWSDataTransfer,Currency=USD}
EstimatedCharges                AWS/Billing  {ServiceName=AmazonSimpleDB,Currency=USD}LinkedAccc

※”LiinkedAccount”は、アカウント毎にmetricsを取得可能。

EC2等、個別のリソース毎のデータを取得するには、次のようにコマンドを実行する。

mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonEC2,Currency=USD"
mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonRDS,Currency=USD"
mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonS3,Currency=USD"
mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonRoute53,Currency=USD"
mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonSimpleDB,Currency=USD"
mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonSNS,Currency=USD"
mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AWSDataTransfer,Currency=USD"

以上、実際にコマンドを実行すると、それぞれのサービス毎に料金がわかる。

$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonEC2,Currency=USD"
2012-05-19 07:31:00  13.33  None
$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonRDS,Currency=USD"
2012-05-19 07:31:00  0.0  None
$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonS3,Currency=USD"
2012-05-19 07:31:00  0.03  None
$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonRoute53,Currency=USD"
2012-05-19 07:31:00  0.51  None
$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonSimpleDB,Currency=USD"
2012-05-19 07:31:00  0.0  None
$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AmazonSNS,Currency=USD"
2012-05-19 07:31:00  0.0  None
$ mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "ServiceName=AWSDataTransfer,Currency=USD"
2012-05-19 07:31:00  0.01  None

ここまで出来れば、Munin に取り込むだけ。

ところで、Munin を何故使うのか?CloudWatch はデータの保管期間が2週間であり、過去に遡って確認することができない。そこで、普段からサーバのリソースを監視している Munin でもって、確認や通知をできるようにする。

まず、事前検証。Munin のプラグインを作る前に、スクリプトレベルで EstimatedCharges が取得可能か確認する。スクリプトは次の通り。

#!/bin/sh

export AWS_CLOUDWATCH_HOME=/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1
export PATH=$PATH:/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1/bin
export EC2_REGION=us-east-1
export JAVA_HOME=/usr/local/jdk1.6/
export AWS_CREDENTIAL_FILE=/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1/credential

echo -n "EstimatedCharges.value "
/home/zem/develop/aws/cloudwatch/CloudWatch-1.0.12.1/bin/mon-get-stats EstimatedCharges --statistics "Maximum" --namespace "AWS/Billing" --dimensions "Currency=USD" | cut -f4 -d' '

実行結果がこちら。

$ sh check.sh
EstimatedCharges.value 13.88

あとは、プラグインを書けば、グラフ化出来るはず。今日はここまで。

続きはこちら。

AWS利用料金グラフ化Muninプラグインを書いてみた( ^ω^) | Pocketstudio.jp log3
http://pocketstudio.jp/log3/2012/05/21/aws-estimated-charge-munin-plugin/

◆ 参考:

Billing Alerts
https://aws-portal.amazon.com/gp/aws/developer/account?ie=UTF8&action=billing-alerts

Monitor Your Estimated Charges Using Amazon CloudWatch – Amazon CloudWatch
http://docs.amazonwebservices.com/AmazonCloudWatch/latest/DeveloperGuide/monitor_estimated_charges_with_cloudwatch.html

mon-get-stats Command – Amazon CloudWatch
http://docs.amazonwebservices.com/AmazonCloudWatch/latest/DeveloperGuide/cli-mon-get-stats.html

 

5 thoughts on “AWS Billing Alerts を使った請求金額通知と、CLIを使った金額取得

  1. ヒライ

    これは是非やりたいのですが、今もUS East (N. Virginia)のみで、東京リージョンが対応するのを待っています。※おそらくそのうち対応するはずですよね……

    1. ヒライ

      TotalはEC2-Tokyoの料金も含まれているようですので、Totalは使えますね。

      ※以下、こちらの環境だけかもです
      mon-get-stats の結果が–start-timeを指定しないと(12時間前くらい)結果が返ってこないということがありました。なんだろう。
      /etc/localtimeを無くしたりしても変わらず

      1. ヒライ

        今まで書いて引っかかってきたところはmuninプラグインでは吸収してあってグラフ化成功しました。失礼しました。

  2. Pingback: サーバ監視ツール「munin」の使い方 | 各路