CloudWatchアラームをSNS経由でEメールアドレスに通知する
はじめに
こんにちは。AWS事業本部コンサルティング部に所属している和田響です。
今回は、CloudWatchアラームの通知先の中で最もオーソドックスだと思われる、SNS経由でEメールアドレスに通知する方法について記載します。
概要
今回はEC2インスタンスのCPU使用率を監視し、閾値を超えた場合にCloudWatchアラームを発生させ、SNS経由でEメールアドレスに送信します。
やってみる
SNSトピックの作成
まずはCloudWatchアラームの通知先である、SNSトピックを作成します。
「Simple Notification Service」のコンソールを開きます。
サイドタブから「トピック」をクリックします。
「トピックの作成」をクリックします。
タイプには「スタンダード」を選択し、名前には任意の文字列(今回はcloudWatch-alerm-topic)を記載します。
※「FIFO (先入れ先出し、先出し)」はSNSのサブスクリプション(通知先)がSQSの場合にのみ使用できます。
その他はデフォルト設定のままで「トピックの作成」をクリックします。
補足
今回は特に設定しませんでしたが、SNSトピックは以下の設定も可能です。
- 暗号化
- サーバー側の暗号化を有効にできます。(転送中はデフォルトで暗号化されます)
- アクセスポリシー
- SNSトピックにアクセスできるユーザやリソースを定義できます。
- アーカイブポリシー
- メッセージ保持期間を設定できます。(デフォルトではメッセージは保持されません)
- 配信ステータスのログ記録
- CloudWatch Logsへのログ配信を設定できます。(SQSへの転送のみサポートしています)
- タグ
- タグをKey:Value形式で指定できます。
- アクティブトレース
- AWS X-Rayのアクティブトレースを有効にできます。
サブスクリプションの設定
続いてサブスクリプションの設定を行います。
先ほど作成したSNSトピックを開き「サブスクリプションの作成」をクリックします。
プロトコルに「E メール」を選択し、エンドポイントには通知先のEメールアドレスを記載し、「サブスクリプションの作成」をクリックします。
エンドポイントに指定したEメールアドレスに承認依頼のメールが来ているはずなので、「Confirm subscription」をクリックします。
「Subscription confirmed!」の表示がされれば完了です。
※なんとなくクリックしてしまいそうな見た目ですが、「click here to unsubscribe.」はサブスクリプションを解除するリンクのため、勢いでクリックしないようにしましょう。
補足
今回はプロトコルとして「E メール」を選択しましたが、それ以外にも以下のプロトコルをサポートしています。
- HTTP/HTTPS
- E メール/E メール -JSON
- Amazon Data Firehose
- Amazon SQS
- AWS Lambda
- プラットフォームアプリケーションエンドポイント
- SMS
参照:https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html
また、今回は設定しませんでしたが以下のオプションも設定可能です。
- サブスクリプションフィルターポリシー
- サブスクライバーがメッセージを受信できる条件を定義できます。
- Redrive ポリシー (デッドレターキュー)
- 送信できなかったメッセージをデッドレターキューに送信するか選択できます。
CloudWatchアラームの設定
続いてCloudWatchアラームの設定を行っていきます。
今回は事前に用意したEC2インスタンス(CloudWatch-Alerm-test)のCPU使用率に対して閾値を設定したアラームを作成します。
「CloudWatch」のコンソールを開きます。
サイドタブから「すべてのアラーム」をクリックします。
「メトリクスの選択」をクリックし、
「EC2」を選択し、
「インスタンス別メトリクス」選択し、
監視対象のEC2インスタンス(今回はCloudWatch-Alerm-test)の「CPUUtilization」を選択し、「メトリクスの選択」をクリックします。
※CPU使用率はデフォルトで取得可能なメトリクスですが、メモリ利用率やディスク空き容量などCloudWatchエージェントの設定が必要なメトリクスも存在します。
今回は必ずアラートを発生させたいため、「CPU使用率が1%より大きい」ことを指定し、「次へ」をクリックします。
(要件に合わせて適切な数字を入力してください)
「既存の SNS トピックを選択」にチェックを入れ、通知の送信先となるSNSトピック(今回はcloudWatch-alerm-topic)を選択します。
その他の設定はデフォルトのまま「次へ」をクリックします。
「アラーム名」および「アラームの説明」を入力し、「次へ」をクリックします。
※「アラーム名」は後から変更できませんが、「アラームの説明」は後から変更可能です。
内容を確認し、「アラームの作成」をクリックします。
少し待つと状態が「アラーム状態」になっていました。
SNSのサブスクリプションに設定したEメールアドレスにも以下のようなアラートメールが送信されていました。
補足
統計方法や期間もカスタマイズ可能です。
今回はデフォルトの「5分間の平均」としていましたが、統計方法は「平均」に加えて「合計」「最大」「最小」などさまざまな条件をサポートしています。
期間は最小10秒から設定可能です。
CloudWatchアラームの変更
ここまでで、CloudWatchアラームの設定は完了ですが、このままだとアラート状態が続いてしまうので、閾値を変更します。
対象のアラームを選択し、「アクション」-「編集」をクリックします。
閾値を変更し「次へ」をクリックします。今回は80%としています。
変更内容を確認し「アラームの更新」をクリックします。
最後に
今回はCloudWatchアラームの設定方法について記載してみました。
ポチポチと数分作業するだけでアラームを設定できて、CloudWatchは非常に便利なサービスだと再認識できました。
オブザーバビリティ(可観測性)という言葉が注目される中で、CloudWatchのさらに利用頻度は高まっていく気がしますね。