LoginSignup
8
8

More than 3 years have passed since last update.

AWSで発生したイベントを AWS Chatbot + Lambda で Slack にお手軽に通知する - ①準備篇

Last updated at Posted at 2020-05-10

はじめに

AWSアカウントを作成したその日から、 AWSアカウント上では様々なイベントが絶え間なく発生 します。これらのイベントを 適切にモニタリング することで、AWS上の システムやアプリケーションの健全性可用性追求することが可能となります。

そこで、2020年4月22日に晴れてGAとなった AWS Chatbot と、AWS Chatbot 登場までは主流な実装方法であったAWS Lambda とを組み合わせて、AWSで発生したイベントをSlackに通知 してみたいと思います。

もちろん、チャットサービスを介して、AWSで発生したイベントをリアルタイムにモニタリングすることが、全てのケースで正しいとは限りません。また、そもそも下記でご紹介するイベントが、イベントの特性上、リアルタイムに通知されるべきではない可能性や、ケースによってはSlackというサービス自体が不適な場合もあるかもしれません。あくまで、AWSをモニタリングするための手法の1つとご理解ください。

アーキテクチャ

今回作成したシステム のアーキテクチャは以下の通りです。いくつものアイコンが並んでいますが、実際に実装したのは、notification と書かれた点線部分のみで、システムを構成するサービスは、 AWS ChatbotAmazon SNSAmazon EventBridgeAWS Lambda です。

なお、上記のテンプレート等は、aws-cloudformation-templates/notification - GitHub にて公開しています。

準備

今回作成したシステムは、AWS SAM (Serverless Application Model) テンプレートで作成されており、後述のボタンから ワンクリックでデプロイ することが可能です。ただし、このテンプレートをAWS上で実行する前に、AWS Chatbotコンソール上で初回認証フローを行う必要があります

1. AWS Management Console (Chatbot) 上で Slack を選択

AWS Chatbotは、Slack と Amazon Chime に対応していますが、今回はSlackを選択します。

2. 通知先のSlackワークスペースとの間で認証を行う

次のページに進むとSlackとの認証画面が表示されますので、任意のワークスペースを選択した上で「許可するをクリック します。

3. Incoming Webhook URL の取得

AWS Lambda から通知を送信する際には、 Slack App の Incoming Webhook URL を取得する 必要がありますYour Apps - Slack API から既存のSlack App もしくは 新規のSlack App を選択し、Incoming Webhook URLを発行します

4. Slackの ワークスペースID と チャンネルID の取得

デプロイする際に使用する際に必要なSlackの ワークスペースIDチャンネルID は、SlackのURLの以下の部分に該当します。

TL;DR

上記の作業で全ての準備が整いました。以下のCloudFormationテンプレートを実行することで、 AWSで発生したイベントをSlackに通知するシステムをお手軽に実現 します。

順序 内容 実行
1 セキュリティ関連サービスを有効化 するテンプレート (オプション) cloudformation-launch-stack
2 Slack通知を有効化 するテンプレート cloudformation-launch-stack

なお、本テンプレートは、 2つのSlackチャンネルに対して通知を送信することが可能です。便宜上、アラーム用とデプロイ用のAmazon SNS トピック、およびSlackチャンネルとしていますが、それぞれに機能の差や用途の制限はありません。

パラメータ名 内容 備考
HookUrlForDeployment Slack デプロイ用チャンネルのIncoming Webhook URL 準備 の項の 手順3 を参照してください。https://を除いて入力してください。
HookUrlForAlert Slack アラート用チャンネルのIncoming Webhook URL 準備 の項の 手順3 を参照してください。https://を除いて入力してください。
SlackWorkspaceId ワークスペースID 準備 の項の 手順4 を参照してください。上の画像のXXXXXXXの部分に該当します。
SlackChannelIdForDeployment デプロイ用チャンネルID 準備 の項の 手順4 を参照してください。上の画像のYYYYYYYの部分に該当します。
SlackChannelIdForAlert アラート用チャンネルID 準備 の項の 手順4 を参照してください。上の画像のYYYYYYYの部分に該当します。

Slackメッセージ

上述した通り、本システムからSlackへは、2つの異なるルート で通知が送信されます。1つは AWS Chatbot を用いた方法、そしてもう1つは、 AWS Lambda を用いた方法です。前者は、AWS Chatbotによってあらかじめ定められたフォーマット(=英文)に基づいてメッセージが作成されます。

AWS Chatbotがリリースされたにも関わらず、従来のAWS Lambdaを経由した送信方法を残した理由は、本項執筆時点で、 AWS Chatbotが対応しているサービスが以下のサービスに限定される ためです。

  • AWS Billing and Cost Management
  • AWS CloudFormation
  • AWS developer tools
  • Amazon CloudWatch Alarms
  • AWS Config
  • Amazon GuardDuty
  • AWS Health
  • AWS Security Hub
  • AWS Systems Manager

一方で、今回作成した AWS Lambdaは、以下のサービスに対応しています

  • EventBridge Scheduled Events
  • Amazon EBS Events
  • Amazon EC2 Auto Scaling Events
  • Amazon EC2 State Change Events
  • AWS KMS Events
  • AWS Management Console Sign-in Events
  • Tag Change Events on AWS Resources
  • AWS Trusted Advisor Events

AWS Chatbot 経由で送信される通知の例

AWS Lambda 経由で送信される通知の例

以上で、AWS Chatbot, Amazon SNS, Amazon EventBridge, AWS Lambda を用いて AWSで発生したイベントをSlackに通知するシステムをお手軽に実現 することができました。次回は、このSAMテンプレートの中身とその挙動についてご説明します。

関連リンク

  1. 準備篇 - AWSで発生したイベントを AWS Chatbot + Lambda で Slack にお手軽に通知する
  2. EventBridge篇 - AWSで発生したイベントを AWS Chatbot + Lambda で Slack にお手軽に通知する
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8