一定時間以上課金状態でバーストしている T 系インスタンスを把握できる CloudWatch アラームを作ってみた

2022.09.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

アノテーション、テクニカルサポートチームの村上です。

T 系インスタンスが課金状態でバーストしているかを把握するのに、CloudWatch メトリクス CPUSurplusCreditsCharged を確認すれば良いことを前回のブログでご案内しました。

今回は、CloudWatch アラームを利用して T 系インスタンスで一定時間以上課金状態でのバーストが発生したことを自動で通知する仕組みをご案内します。
とは言っても、"CPUSurplusCreditsCharged メトリクスが一定の期間発生 ⇒ 通知" といった、とても単純なアラームですので、気構えずにお付き合いいただければと思います。

前提

現状、月末と繁忙期以外で T 系インスタンスが課金状態でのバーストとなることは無いが、想定外のバースト継続による課金発生を把握する為に自動で通知する仕組みを作りたい。
上記内容を CloudWatch アラームで実装したい。

下準備

EC2インスタンス:t3.nano を起動
特に特別な設定は必要無く、ご自身の PC から EC2 に SSH 接続できれば OK。

アラームとトピックを作成してみた

1.マネジメントコンソール上で、サービス CloudWatch を選択します。

2.CloudWatch サービスの画面左ペインの「すべてのアラーム」を選択してから、画面右上にある「アラームの作成」ボタンを押下します。

3.「メトリクスの選択」ボタンを押下します。

4.各種メトリクスの中から EC2 を探し選択します。

5.次画面の「インスタンス別メトリクス」を押下します。

6.EC2 の各種メトリクスの中から、CPUSurplusCreditsCharged を探しチェックボックスにチェックを入れて、画面右下の「メトリクスの選択」ボタンを押下します。

7.「期間」のプルダウンメニューで 5 分を選択し、「しきい値」を 1 以上、「アラームを実行するデータポイント」を 2 / 2 に設定します。

※上記の設定は、10 分間の 2 つの評価ポイントで、CPUSurplusCreditsCharged が 1 以上となった場合にアラームが発砲される設定です。

8.アラームの送信先となる新規トピックを作成します。
「アラーム状態」「新しいトピックの作成」を選択し、新規トピックの名前と通知を受け取るメールアドレスを入力してから、「トピックの作成」ボタンを押下します。

画面を下へスクロールして、画面右下の「次へ」ボタンを押下します。

9.アラーム名とアラームの説明(-オプション)を入力し、画面右下の「次へ」ボタンを押下します。

10.画面右下の「アラームの作成」ボタンを押下します。

以上で、アラームの作成は完成しました!
残る作業は、アラームの送信先に指定したメールアドレスでサブスクリプションの確認をするのみです。

11.トピック作成の際に入力したメールアドレスの受信トレイで AWS Notification(no-reply@sns.amazon.com) というタイトルのメールを探し開封します。
メール内のリンク「Confirm subscription」を押下します。

12.ポップアップウィンドウが開き、サブスクリプションの完了が確認できました。

以上で、トピックについても準備が完了しました。
お疲れ様です!

アラームを発生させてみた

設定した CloudWatch アラームが意図したように働くかを試してみます!

アラームを発生させるには、CPU クレジットを枯渇させた後に CPUSurplusCreditsCharged を発生させる必要がある為、EC2 へ SSH 接続をしてから stress コマンドを実行し CPU 使用率を上昇させます。
なお、stress コマンドは、Amazon Linux 2 の標準リポジトリには無い為、EPEL リポジトリを有効にする必要があります。

Amazon Linux 2のEPELレポジトリを有効にする

EPEL リポジトリを有効にした後、下記ブログの手順で stress コマンドを実行します。

EC2でサーバーに負荷を発生させる stress ツールを使ってみる

オプションで設定できるワーカー数を 2 以上で指定すると CPU 使用率 100% が維持できます。
$ stress -c 2

1.stress コマンドを実行し CPUCredit を枯渇させ、CPUSurplusCreditBalance を発生させます。

2.更に負荷をかけ続けると CPUSurplusCreditBalance が頭打ちとなり、CPUSurplusCreditsCharged が発生しました。
10 分以上 CPUSurplusCreditsCharged が 1 以上となればアラームが発生するはずです。

3.CloudWatch アラームが発生しました!

4.指定したメールアドレスへもアラームメールが送信されていることを確認することができました。

Mission Complete!!!

※EC2 削除にあたっての注意点
アラームが発生した直後は CPUSurplusCreditBalance が溜まっている状態であり、この時点でインスタンスの終了を行うと未返済のクレジットが即座に課金対象となります。
即座にインスタンスを終了する必要がない場合は、CPU クレジットの前借り分を返済した後にインスタンスの終了を行うことをおすすめします。

まとめ

本ブログでは、CloudWatch アラームを使って EC2 での予定外の課金発生を把握する仕組みを作ってみました。 個々のインスタンスに対してアラームを設定する必要がある為、あまり実用的なアラームではないかもしれませんが、このブログをきっかけに自動通知の仕組みについて考えていただけたら幸いです。

参考資料