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から「cloudwatch_remind.yaml」を取得してください。
CloudFormationコンソールから取得したyamlファイルを使ってスタックを作成してください。
パラメータ補足
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 ブログにも繰り返し通知の記事があります。
内包されているコード量が膨大で、読み解くのが大変だったのと、カスタムするのが難しいな
と思ったので今回、作成しました。
繰り返し通知させたい要望は結構あると思うので、今回の記事で多くの方が助かるのではないかと思います。
AWSって楽しいですね。
今回の記事で一人でも多くの方がAWSを好きになってもらえると嬉しいです。
Discussion