はじめに
こんにちは、すぎもんです
今回はHULFT10のCloudWatchの監視アラームをAmazon SNSトピックを使用してSlackに通知してみます。
以下のようにアラームをSlackに通知する方法は複数あります。
・Slack AWS Chatbotを使用したセットアップ
・Lambda関数を作成してAmazon SNSメッセージをSlackに変換する
・SlackによるEメールからチャンネルへの統合を使用する。 etc.
今回はSlackによるEメールからチャンネルへの統合の方式(without Lambda)で実現します。
今回やること
今回は、ECSサービスの実行タスク数が1未満になった場合にアラームをSlackに通知してみます。
最初にCloudWatchのコンソールでアラームを作成します。
アラームは指定した条件でAmazon SNSのトピックに通知を出すように設定します。
次にSlackで、Webhook受信時に指定したチャンネルにメッセージを書き込むワークフローを作成します。作成したワークフローはAmazon SNSトピックのサブスクリプションに登録します。
これでアラーム状態になったときにAmazon SNSからSlackに通知するようになります。
それでは早速やってみましょう!
実施手順
<AWS側の設定>
① CloudWatchでのアラーム設定
以下の通りに設定を進めていきます。
・ステップ1:メトリクスと条件の設定
・ステップ2:アクションの設定
・ステップ3:名前と説明を追加
・ステップ4:プレビューと作成
<Slack側とAWS側の設定>
② Slackワークフローの作成
以下の通りに設定を進めていきます。
・Slack側手順① ワークフロー作成(Subscribe承認用)
・AWS側手順(作成したSlackワークフローをAmazon SNSトピックのサブスクリプションに登録)
・Slack側手順② ワークフロー編集(アラーム通知用)
AWS側の設定
① CloudWatchでのアラーム設定
CloudWatchのコンソールのナビゲーションペインの[▼アラーム]→[すべてのアラーム]を選択し、右上の[アラームの作成]を押下します。
ステップ1:メトリクスと条件の指定
アラームで使用するメトリクスとアラームの条件を指定します。
[メトリクスの選択]を押下します。
ECSのContainer Insightsのメトリクスを使用します。
[ECS/ContainerInsights]をクリックします。
[ClusterName,ServiceName]をクリックします。
対象メトリクスにチェックを入れて[メトリクスの選択]を押下します。
今回は「RunningTaskCount」というメトリクスを指定します。
今回指定した「RunningTaskCount」は現在RUNNING状態のタスクの数を保持するメトリクスです。
アラームの条件を設定して[次へ]を押下します。
今回は下記の通りに条件をデフォルトから変更します。
アラーム条件の定義 : RunningTaskCount<しきい値
しきい値の定義 : 1
ステップ2:アクションの設定
アラームのアクションを設定します。
今回は、新しいトピックを作成し、作成したトピックに通知を送信するようにします。
[新しいトピックの作成]にチェックを入れ、トピック名と通知を受け取るEメールアドレスを入力し、[トピックを作成]を押下します。
[トピックの作成]を押下したタイミングでEメールエンドポイントにサブスクライブのメールが送信されます。
作成したトピックはAmazon SNSコンソールのトピックで確認できます。
ステップ3:名前と説明を追加
アラーム名とアラームの説明を入力します。アラームの説明は省略可能です。
アラーム名を入力して[次へ]を押下します。
ステップ4:プレビューと作成
プレビューで設定内容を確認し、[アラームの作成]を押下してアラームを作成します。
Slack側とAWS側の設定
② Slackワークフローの作成
Slack側手順①
以下の手順により、Slackのワークフロー(Subscribe承認用)を作成します。
Slackでアラームを通知するチャンネルの詳細設定を開きます。
[Add Automation]を選択し、自動化機能を追加します。
[Create Workflow]を押下し、ワークフローを作成します。
ワークフローの開始方法を選択します。
[From a webhook]を選択します。
ワークフローに名前を付けるため、[Untitled Workflow]をクリックします。
[Name]に任意のワークフロー名を入力し、[Save]を押下します。
[Starts with a webhook]を開き、編集を行います。
[Copy Link]を押下し、[Web request URL]をコピーします。
次に[Set Up Variables]を押下し、データ変数を設定します。
この後のAWS側手順で使用するため、コピーしたWeb request URLは控えておいてください。
[Key]に「SubscribeURL」を入力し、[Data type]に「Text」を入力します。入力後、[Done]を押下します。
[Key]には「SubscribeURL」という固定の文字列を入力してください。任意の値を入力しないでください。
Slackチャンネルにメッセージを投稿するため、ワークフローに[Send a message to a channel]ステップを追加します。
[Select a channel]で投稿するチャンネルを選択します。
[Add a message]でチャンネルに投稿するメッセージを入力します。
入力後、[Save]を押下して保存します。
[insert a variable] で[Add a message] に、[SubscribeURL]を追加してください。
この後の手順で、チャンネルに投稿された[SubscribeURL]をクリックすることで、サブスクライブを承認することができるようになります。
ワークフローの設定が終わったため、[Finish Up]を押下します。
AWS側手順
作成したSlackワークフローをAmazon SNSトピックのサブスクリプションに登録します。
アラーム通知対象のトピックを表示し、[サブスクリプションの作成]を押下します。
以下を設定し、[サブスクリプションの作成]を押下します。
プロトコル:HTTPS
エンドポイント:Slackで作成したワークフローのWeb Request URLの値
トピックのサブスクリプションに追加されていることを確認します。
ステータス:保留中の確認
Slackの投稿先チャンネルに、SubscribeURLが送信されているので、URLをクリックしてブラウザで開きます。
URLにアクセスすることで、サブスクライブが承認されます。
トピックの画面をリロードし、ステータスが確認済みに更新されていることを確認します。
Slack側手順②
Slackのワークフローをアラーム通知用に編集します。
データ変数[SubscribeURL]を使用した、サブスクリプションの承認手順が完了したため、投稿メッセージの[SubscribeURL]を削除します。
操作イメージはSlack側手順①とほぼ同じなので割愛します。
WorkflowのSend a message to a channelステップを以下のように編集して、Saveします。
・メッセージ本文からSubscribeURL変数を削除
・アラーム通知が来た旨のメッセージを記載
Finish Up→Publish
これでアラーム通知用のワークフローが動作するようになります。
最後に
HULFT10 for Container Services でCloudWatchの監視アラームをAmazon SNSからSlack通知してみましたが、いかがでしたでしょうか。監視アラームをSlackに通知することで、アラームに気づきやすくなると思います。皆様もぜひためしてみてください。
SNSトピックの通知内容を表示したい場合は、SNSトピックで使用されている項目名をKeyとする変数を使用することで、メッセージに含めることができます。必要な場合は設定してみましょう。
このブログでは、今後も様々なTopics記事や接続検証等、皆さんの役に立つような記事を投稿していきたいと思います!ここまで読んでいただきありがとうございました。それでは、また!