Lambdaで定期実行するプログラムが、たまに落ちていることが有ります。
気づくまで放置状態になってしまうので、Slackに通知するように設定しました。
実現したいこと
Lambdaの定期実行で、本ブログの実績だったりを定期的にSlackにレポートしています。
これがたまに落ちていることがありまして、、、その場合、だれかが気づくまで放置になっちゃうんです。
なので、Lambdaの実行でエラーになったら、Slackにその旨通知しましょう!
ってのが、今回の目標です。
前提
- Lambdaので関数は何かしら有る前提で。
- Slackに通知受信用のチャネルを用意しておいてください。
全体の構成
ざっくりとこんな感じです。
Lambda
↓
CloudWatch (エラーを拾います)
↓
AWS SNS (通知を受け渡し)
↓
AWS Chatbot (Slackに通知します)
↓
Slack
設定していきます
AWS SNS
AWS SNS(Simple Notification Service)に、遷移してください。
まず先に、SNSトピックと呼ばれる物を作成しておきます。トピックの作成をクリック。
タイプの所は、スタンダードを選択します。
名前・表示名を入力
他はデフォルトで、トピックの作成ボタンをクリック
できました。
CloudWatch
CloudWatchに遷移して、左のメニューのアラーム → 全てのアラーム
そして、アラームの作成をクリック
メトリクスの選択をクリック
今回は、Lambdaのエラーを拾うので、Lambdaをクリック
そして、リソース別をクリック
登録している関数分、ズラーっと表示されますので、そのうち通知したい物にチェックをいれます。
今回は、エラー時に通知したいので、エラーのレコードにチェックを入れ、メトリクスの選択ボタンをクリック
統計を合計
期間を1分
に変更
Errorsが次の時… を以上に
…よりもを、1に
そして、次へ
通知の追加をクリック
通知の送信先の箇所で、ボックスをクリックすると、先ほど設定したSNSトピックが表示されるので、それを選択。
そして、下の方にある次へをクリック
分かりやすい、アラーム名と説明を記入して次へ
プレビューが表示されるので、確認してアラームの作成ボタンをクリック
AWS Chatbot
AWS Chatbotに移動して、ください。
ここでは、受け取った通知をSlackに通知します。
トップ画面右の、チャットクライアントでSlackを選択。そして、クライアントを設定ボタンをクリック
Slackとの連携認証をおこないます。
Slackにログインした状態だと、そのワークスペースが表示されるかと思います。通知したいのが別のワークスペースの場合は、右上のドロップダウンから通知したいワークスペースに変更してください。そして、許可するをクリック
承認が終了すると下の画面になるので、新しいチャネルを設定ボタンをクリック。
設定名は分かりやすい物を入力してください。
Slackチャネルで、通知したいチャネルを選択
そして
IAMロールはデフォルトで表示されている「テンプレーをを使用してIAMロールを作成する」で
ポリシーテンプレートも、デフォルトのままで
SNSトピックのリージョンは、AWS SNSで作成したリージョンを選択。
そうすると、下のトピックで作成したトピックが選択できるはずです。
そして、設定ボタンをクリック
お疲れ様でした。以上で設定は終了です。
通知を確認
Lambdaでエラーを出してみてください。
Slackの指定したチャネルに、下記のような通知が来ることが確認できるはずです。