📝

CloudWatchで請求アラームを作成する

2021/07/11に公開

AWSの利用を考えるときに、「課金が怖い」という話をよく聞きます。
今回はその対策の1つとして、CloudWatchで請求額が一定額を超えたらメールに通知する方法を紹介します。

イメージ

CloudWatchアラームで請求額を監視し、一定額(しきい値)を超えたらSNS(Simple Notification Service)というサービスを通じて、指定のメールアドレス宛に通知するという流れです。

アラーム作成手順

1. CloudWatchアラームを作成

まずはCloudWatchアラームを作成するため、CloudWatchコンソールに移動しましょう。

サイドバーから「アラーム」をクリックします。

ここで1つ注意です!
請求アラームの設定はバージニア北部リージョンでしかできないため、リージョンを「バージニア北部」に変更します。

リージョンを変更したら、「アラームの作成」をクリックします。

「メトリクスの選択」→「請求」→「概算合計請求額」の順にクリックします。


「EstimatedCharges」というメトリクスが表示されるので、チェックを付けて「メトリクスの選択」をクリックします。

条件を指定します。
今回は10USDを超えたらという条件にしました。

「新しいトピックの作成」にチェックを付け、通知を受け取るメールアドレスを入力して、「トピックの作成」をクリックします。

その他の設定はスキップして「次へ」をクリックします。

アラーム名と説明(任意)を入力し、「次へ」をクリックします。

確認画面で問題なければ「アラームの作成」をクリックします。

これでアラームは作成されました!
ただし、SNSトピックの設定で入力したメールアドレスの承認が必要なので、「SNSのサブスクリプションの表示」をクリックします。

2. メールの承認

SNSコンソールに移動すると、CloudWatchアラームの作成時に入力したメールアドレスのステータスが「保留中の確認」となっています。
SNSからメールアドレス宛に通知を送信するためには、メールアドレスの承認を行う必要があるので、承認作業を行います。

アラーム作成時に指定したメールアドレス宛に、以下のようなメールが送信されているので、「Confirm subscription」のリンクをクリックします。

以下のような画面が表示されれば承認完了です。

SNSコンソールをリロードすると、ステータスが「確認済み」に変わります。

CloudWatchアラームの方も警告が消え、有効な状態になりました。

通知テスト

作成したCloudWatchアラームからSNS経由でメールが届くかテストしてみます。
アラームのしきい値を0UDSに変更します。

しばらく待つと、「アラーム状態」になりました。

SNSで指定したメールアドレス宛には、以下のようなメッセージが来ました。

これでしきい値を超えたときにメールが来ることも確認できました!
テストのために0USDにしたしきい値は任意の値に更新しておきましょう。

アラーム発動体験談

どうでもいい方は飛ばしてください。
過去にいくつか意図せず請求額が増加したことがあったので参考までに紹介します。

  • NAT Gatewayの消し忘れで約30USD
    • ハンズオン後にNAT Gatewayを2週間ほど放置していました。この時は請求アラームを設定しておらず、たまたま請求コンソールを見て気づきました。NAT Gatewayは結構なお値段なので気を付けましょう!
  • VPCエンドポイント(インターフェイス型)の消し忘れで約10USD
    • 検証で使用していたVPCエンドポイントを1週間ほど放置していました。先ほどのNAT Gatewayでの反省を踏まえて請求アラームを設定していたので、10USDを超えたところですぐに通知が来て、削除し忘れていたことに気づきました。
  • RDSのインスタンスクラスをxlargeにして約10USD
    • 検証用のRDS作成時にt2.microを選択したつもりがt2.xlargeを選択していました。これも請求アラームに捕捉されたのですぐに気づきました。

まとめ

今回はCloudWatchで請求アラームを作成してみました。
リソースの消し忘れや止め忘れ、意図しない挙動などで知らないうちに請求額が増えてもアラームで気づき、対応することができます。
マルチアカウント環境の場合、マスターアカウントでアラームをまとめて作成することもできます。また、メールだけでなくSlackなどにも通知できるので、そのあたりも別の記事で紹介したいと思います。

請求アラームで安心なAWSライフを送りましょう!

Discussion