CloudWatchアラームをSlackに通知させてみた
CloudWatchアラームをSlackに通知させたい
おのやんです。
みなさん、Amazon CloudWatch(以下、CloudWatch)のアラームをSlackに通知させたいと思ったことはありませんか?私はあります。
CloudWatchを使えば、Amazon EC2(以下、EC2)やAmazon RDS(以下、RDS)のメトリクスが閾値をこえたところでアラームを発出できます。このアラームをSlackなどのツールに送信できれば、即座に対応に移すことができます。
ということで、今回はCloudWatchアラームをSlackに通知させる方法を紹介したいと思います。
構成
今回使用する構成がこちらです。
今回はCloudWatchでEC2のメトリクスを監視します。CloudWatchの方で閾値を設定しておいて、監視対象のメトリクスが上限を超えた場合、アラームを出します。このアラームはAmazon SNS(以下、SNS)に渡されます。そしてSNSからAWS Chatbot(以下、Chatbot)にアラームが渡され、Slackチャンネルに通知されます。
構築手順
それでは構築に移ります。今回はマネジメントコンソールを操作して構築していきます。なおEC2インスランスはすでに構築してあるものとします。
CloudWatchアラームの設定
まずEC2インスタンスに対してCloudWatchアラームを設定します。
CloudWatchの画面に移動します。左側の「全てのアラーム」を選択します。
するとCloudWatchアラームの一覧画面に移動します。記事を執筆している時点では、何もアラームを作成していません。ここで「アラームの作成」を選択します。
すると作成したいアラームの設定画面に移動します。ここでは「メトリクスの選択」を選択します。
ここではEC2のCPU使用率を対象にして、80%以上になったらアラームを生成する設定にします。まずEC2を選択します。
メトリクスはCPUUtilizationを指定します。また監視したいEC2インスタンスも指定します。
こちらの画面で、EC2インスタンスのCPU使用率が80%以上になったらアラームを生成する設定にします。
ここではアラーム状態を選択しておきます。SNSのトピックが作成されていない場合は、ここで作成してしまいます。SNSトピックの名前とメールアドレスを指定するだけなので、そこまで手間はかからないのでは、と思います。
ちなみにここでSNSトピックを作成しているため、今回はSNS画面でコンソール操作を行うことはありません。SNSトピックをイチから作成する場合は、CloudWatchアラームを作成する前にやっておきましょう。
アラームの名前と説明を適宜追加して、CloudWatchアラームを作成します。
アラーム詳細画面でこのように表示されれば、CloudWatchアラームは作成完了です。
Chatbotの設定
次にChatbotの設定を行います。
Chatbotの設定にはSlackの通知先チャンネルのIDが必要になります。ですので、まずSlackチャンネルIDを取得します。
CloudWatchアラームを通知させたいSlackチャンネルに移動します。チャンネル名を右クリックすると、チャンネルに対する操作一覧がポップアップで表示されます。ここの「コピー」から「リンクをコピー」を選択できますので、こちらを選択します。これで、チャンネルIDを含むURLがコピーできます。
Chatbotの画面に移動すると、「チャットクライアントの設定」という項目があります。今回はSlackにアラームを通知させたいので、Slackを選択します。その後「クライアントの設定」を選択します。
するとどのSlackワークスペースと連携させるか選択する画面に移ります。ここで追加したいワークスペースを選択し、「許可する」を選択します。
正常にワークスペースを追加できると、こちらのようにワークスペース詳細画面に遷移します。ここで「新しいチャネルを設定」を選択します。
ここでさきほどコピーしたURLを用いてSlackチャンネルIDを入力します。
先ほどコピーした値は、SlackワークスペースURLの末尾にチャンネルIDが続いている値となります。そのためChatbotの設定画面でチャンネルIDを記述する場合は、URLの部分を除いてチャンネルIDのみにする必要があります。ここは気をつけましょう。
アクセス制御は各自で適切なものに設定してください。今回は検証目的で作成するため、IAMを新規で作成する設定にします。
最後にどのSNSトピックから通知を受け取るかを設定します。現在のAWSリージョンと、先ほど作成したSNSトピックを選択します。
上記の設定が済んだら「設定」を選択します。
Slackのワークスペースが適切に追加されれば、こちらのようにSlackワークスペース情報が追加されます。
Slack通知の検証
それでは実際にEC2インスタンスのCPUに負荷をかけて、CloudWatchアラームのSlack通知を検証してみましょう。
今回はAmazon FIS(以下、FIS)にて操作を行い、CPU負荷を意図的に発生させます。まずはFISのシナリオを作成します。ここでは「EC2ストレス:CPU」のシナリオを選択します。次に「シナリオ使用してテンプレートを作成」を選択します。
今回は検証用途で1アカウント上に構築しているため、「このAWSアカウント」を選択し「確認」を選択します。
ここでは具体的なCPU負荷イベントの内容を設定していきます。
その他、具体的な設定を行います。これらの設定が完了したら、「実験テンプレートの作成」を選択します。
正常に設定がされていれば、このようにテンプレートの詳細画面が表示されます。ここの「実験を開始」を選択して、EC2インスタンスのCPUに負荷をかけます。
事件が開始されたら、CloudWatchからEC2のCPU使用率の推移を見てみます。
EC2インスタンスのCPU使用率が80%に達しました。ここでSlackのチャンネルを見てみます。うまく動けば、このようにCloudWatchアラームがSlackチャンネルに投稿されます。
さいごに
SNS、Chatbotを使えば、CloudWatchアラームを簡単にSlackチャンネルに通知させることができます。これ、結構やりたい方多いのではないでしょうか?
急なメトリクス変化に対応するためにも、CloudWatchアラームをSlackなどの普段使いするチャットツールに通知させておきましょう。では!