CloudWatchアラームをSlackに通知させてみた

CloudWatchアラームをSlackチャンネルに通知させてみました。Amazon CloudWatch、Amazon SNS、AWS Chatbotをそれぞれ連携させれば、アラームをSLackに通知させることが可能です。
2023.12.08

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などの普段使いするチャットツールに通知させておきましょう。では!