Amazon CloudWatch × Amazon SNS で月額利用料金を管理しよう|AWSメール通知システム

AUTHOR :   ギックス

メール通知システムでAWSのコスト管理を実現する

AmazonのクラウドサービスであるAWSサービスは、利用(起動)時間ごとに課金されるため「使いたいときに使いたいだけ」利用できます。そのため、特にシステムの立ち上げ時にはコストを削減できます。しかし、この「従量課金」であるが故に、サービスをストップするのを忘れると、翌月に恐ろしい金額の請求書が届いて背筋が凍ることになります。

このような事態が発生しないように、監視システムを構築しておくと安心です。

システム概要

今回、構築する「AWSの月額利用料金の監視システム」では、ある一定の利用料金以上使ってしまった場合のアラートメールと、定期的に利用料金を通知する定期メールの2種類を送るシステムを構築します。

システムは、3種類のAWSサービスを使用します。Amazon CloudWatch(以下、CloudWatch)によって、AWSの利用料金を収集し、アラームを設定してメール通知できるようにします。Amazon EC2(以下、EC2)上の監視プログラムでは、バッチで定期的にCloudWatchの情報を収集し、メッセージを作成して、Amazon Simple Notification Service(以下、SNS)に送信します。そして、SNSでは、受信したメッセージをメール送信します。

非常に面倒な事をしているように見えますが、EC2の監視プログラム以外の設定は、全てAWSコンソール上で行えます。そのため、一度、監視システムを構築してしまえば、メール送信先の追加などは簡単に行えます。cloudwatch_img

請求メトリックスの作成

CloudWatchで請求メトリックスを作成するために、AWSコンソールの「請求とコスト管理」の設定画面で「請求アラートを受け取る」にチェックを入れます。チェックを入れると入れた時点から月額利用料金の監視が始まります。(過去に遡って月額利用料金の収集はやってくれません)aws_alert1

上記の設定を保存して、暫くするとCloudWatchのメトリックに「請求メトリックス」が追加されます。この時、リージョンは「バージニア北部」にしてください。この理由は、東京リージョンを含めて全てのリージョンの請求メトリックスデータは、バージニア北部に保存されているためです。aws_alert7

Amazon CloudWatchのアラーム作成してアラートメールの送信設定を行う

アラートメールメール用のアラーム設定は、AWSコンソールのCloudWatchの「アラーム」メニューからアラームの作成を行います。アラーム作成はウィザード形式で設定していきます。始めの「メトリックスの選択」画面では、上記で作成した請求メトリックスの「概算合計請求額」リンクをクリックします。クリックすると画面遷移しますので、1行だけ存在する「通貨:USD」を選択してください。aws_alert3aws_alert4

そして、「アラームの定義」画面では、「この金額以上になったらアラートメール送信する」金額とメール送信先を設定します。下記の例では$820以上になったら管理者のメールアドレスにメール送信される設定になっています。この画面の「アラームが次の時」項目の「状態:警告」は、アラームで設定している条件に一致した時にメールを送信する意味です。また、アラーム作成後、送信先の確認のためのメールが送信されますので、メール受信を行い、メール本文内のリンクをクリックしてください。aws_alert5

メール通知システムの開発と設定

Amazon SNSの設定

SNSサービスは、クラウド上のプッシュ通知サービスです。SNSに対してメッセージをプッシュ(送信)することで、SNSに設定した宛先にメッセージを送信するサービスです。最近では、Android端末のプッシュ通知などに使われているようです。今回は、SNSで受けたメッセージをメール送信できるように設定します。

SNSでメッセージ受けるためには、トピックを作成する必要があります。トピックの作成は、AWSコンソールのSNSから行えます。トピックを作成しましたらSubscriptionとして、送信先のメールアドレスを追加します。この時、送信先の確認のためのメールが送信されますので、メール受信を行い、メール本文内のリンクをクリックしてください。aws_alert8

AWS IAMでアクセスキーとシークレットキーを作成する

AWSサービスを外部から操作するためには、CloudWatchとSNSへのアクセスを許可されたユーザーのアクセスキーとシークレットキーが必要になります。ユーザーの作成は、AWSコンソールのIdentity and Access Management(以下、IAM)から行うことができます。IAMのユーザー作成後、ポリシーのアタッチ(権限の付与)を行いますので「CloudWatchReadOnlyAccess」などのCloudWatchへの読取ができるポリシーと、上記で設定したSNSへのメッセージ送信ができるポリシーを付与してください。

Amazon CloudWatchから情報を取得してAmazon SNSにメッセージを送信するプログラム開発

前回の記事でもご紹介しましたが、AWS SDKを使うことで、CloudWatchから情報を取得し、メッセージを作成して、そのメッセージをSNSにプッシュ(送信)することでメール送信を行うことができます。Ruby言語での実行環境の構築方法やバッチの設定方法については、前回の記事をご参照ください。

Amazon CloudWatchから情報を取得することで運用の幅は広がる

CloudWatchだけ使用した場合、AWSの月額利用料金は、料金のしきい値を超えた場合に送信されるアラートメールだけです。この対応だけでは、無駄に動いているAWSサービスの存在に気付くのが遅れてしまいます。そのため、今回のように定期的に利用料金をメールで知らせる必要があるのです。

更にCloudWatchから、様々な断面の利用料金を取得できるため、利用料金の前日比/先週比、前日増分からの今月の請求金額の予想など、様々な視点から利用料金の監視ができます。そして、これらのサービスは、EC2を除けば年間数千円という安価な利用料金で運用可能です。殆どすべての企業において費用対効果は十分だろうと思いますので、監視システムを構築・導入を検討してみると宜しいかと存じます。

SERVICE