AmazonCloudWatchアラームのアラーム状態が続く限り、繰り返し通知されるように実装してみた
こんな方向けの記事です。
・CloudWatchAlarmを繰り返し通知させたい!
・CloudWatchアラームの1回の通知じゃ気付けない!
・CloudWatchがアラーム状態である限り、決められた間隔で何度も通知が来るようにしたい!
・CloudWatchアラームのリマインド通知を実装したい!
(全部同じこと言ってますね笑)
前提
・Yaml形式のCloudFormationで記述しています。
・Python3.12を使用しています。
・リマインド通知をさせたいCloudWatchアラームが存在していること。
・サブスクリプション登録済みのSNSトピックがあること
イメージ図
1、 CloudWatchアラームがアラーム状態が変わる。
2、EventBridgeEventsがCloudWatchアラームのイベントを受け取りLambdaに渡す
3、Lambdaが受け取ったデータを元に、EventBridgeSchedulerを起動する
4、EventBridgeSchedulerが決められた間隔でLambdaを起動する
5、LambdaがCloudWatchアラームのデータを取得してSNSにデータを送る
6、SNSが受け取ったデータを登録されているサブスクリプションに送信する。
今回のCloudFormationで作られるリソース
・IAMロール 3つ
・IAMPolicy 3つ
・EventBridgeEvents
・EventBridgeSchedulerGroup
・EventBridgeScheduler
・Lambda 2つ
さっそくご紹介
下記GitHubからYamlテンプレートを使ってCloudFormationのスタックを作成してください。
パラメータ補足
AWSAccountID:AWSのアカウントIDの12桁の数字を入力
CloudWatchAlarmArn:繰り返し通知させたいCloudWatchAlarmのARN
CloudWatchAlarmName:繰り返し通知させたいCloudWatchAlarmのアラーム名
RegionName:デプロイしたいリージョンID(東京Rの場合はap-northeast-1)
SNSTopicArn:メールを飛ばしたいSNSトピックのARN
検証
CloudWatchをアラーム状態にしてみましょう!
EventBridgeSchedulerがちゃんと有効化されましたね!
ちゃんと1分間隔でメールも届いています!(今回はschedulerを1分間隔にしています)
正常性が確認できたところで、今度はCloudWatchをOK状態にしてみましょう!
EventBridgeSchedulerがちゃんと無効化されてますね!
これでリマインドメールは止まります!
完璧ですね~。
補足
アラーム名とメール本文はLambdaのコードの改修が必要になりますが
お望みのものに柔軟に変更できると思います。
CloudWatch→SNSに直接飛ぶ構文と完全に同じにすることも可能でした。
※今回は「Alarm Details」のみ取得して本文に反映させています。
コードの補足
encoded_alarm_nameはアラーム名に日本語が入っている場合を想定して入れています。
アラーム名が英文の場合でも、そのまま使用できます。
あとがき
一応Amazon Web Services ブログにも繰り返し通知の記事があります。
今回の私の記事の方法とは異なりこちらの記事ではStepFunctionを使って行うものですが、
内包されているコード量が膨大で、読み解くのが面倒だったのと、カスタムするのが難しいな
と思ったので今回、作成しました。
今回も自己満足ですね笑
Discussion