LambdaのエラーをSlackに通知

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の指定したチャネルに、下記のような通知が来ることが確認できるはずです。