こんにちは!虎の穴ラボのNSSです。今回はCloudWatchアラームが異常を検知した時、Slackに通知する手順をご紹介します。前回私が投稿した「AWS Cloud Watchでディスク容量を監視する」という記事の続きとしてご覧ください。
1. CloudWatchアラームの作成
Slackに通知するアラームを作成します。 CloudWatchアラーム作成手順は、前回の記事に記載していますのでご確認ください。
2. Incoming Webhooksの作成
SlackでIncoming Webhooksを作成するときは、今までカスタムインテグレーションを利用していましたが、カスタムインテグレーションが廃止予定という注意書きが出ています(2019/08/28現在)。
いつ廃止になるかわからないので、注意書きの「アプリとの置き換え」から新たな作成方法で作成します。
Incoming Webhooksの新旧比較の詳細はここでは省きますが、
大きな変更点は旧方式は送信先チャンネルがパラメータで指定できたのに対し、
新方式はURLを発行した際のチャンネルにのみ送信できるようになっています。
3. Slack通知の設定
本来であればLambdaでSlack通知ロジックを一から実装していくのですが、今回はServerless Application Repositoryを使う方法をご紹介します。
3-1. Serverless Application Repositoryとは
Serverless Application Repository(以下SAR)とは、チームや個人が作成したサーバーレスアプリケーションを、Githubのように保存し共有することができる、サーバーレスアプリケーション用のマネージド型リポジトリです。SARに自分の欲しい機能のサーバーレスアプリケーションが公開されていれば、実装することなく利用することができます。
※ご利用の際はライセンスにご注意ください。
3-2. AWS Lambdaの設定
AWS Lambdaコンソールを開き、ナビゲーションペインから「関数」を選択し、「関数の作成」をクリックします。
関数の作成画面で「Serverless Application Repositoryの参照」を選択します。
検索フォームが表示されるので、「cloudwatch slack」等のキーワードで検索すると いくつか公開されているアプリケーションがヒットします。 今回はAWSが自ら公開している「cloudwatch-alarm-to-slack-python3」を使用します。
ソースコードURL github.com
「cloudwatch-alarm-to-slack-python3」を選択すると設定とデプロイ画面に遷移します。ここでアプリケーションの設定を入力しデプロイを行います。
アプリケーション名:
cloudwatch-alarm-to-slack-python3がデフォルトで設定されています。変更したい場合は別の名称を設定します。
KeyIdParameter:
後述するAWS Key Management ServiceのIDを設定します。
kmsEncryptedHookUrlParameter:
SlackのincomingWebHookのURLを"https://"を除いた値で設定します。デプロイ後も変更可能です。
slackChannelParameter:
通知するSlackのチャンネル名を"#"抜きで設定します。デプロイ後も変更可能です。
設定値の入力が終わったら「デプロイ」ボタンを押します。
3-3. CloudWatchアラーム送信先変更
デプロイが完了すると、新しくAmazon SNSのトピックが作成されます。
これをCloudWatchアラームの通知の送信先に指定します。
4. AWS Key Management Service (KMS) の設定
4-1. KMSとは
KMSとは、データの暗号化に使用するキーの容易な作成および管理を行うことができるサービスです。 多くのAWS のサービスやアプリケーションで暗号化の使用を制御できるようになります。
4-2. キーの作成
KMSコンソールからキーを作成をクリックし、手順に従いキーを作成します。
ステップ1:エイリアスと説明の追加
キーのエイリアスと説明を設定します。
ステップ2:タグの追加
タグの設定は任意です。
ステップ3:キーの管理アクセス許可を定義
キーの有効化や削除などができるユーザーを定義できます。必須ではありません。
ステップ4:キーの使用アクセス許可を定義
暗号化・複合化を許可するユーザーを定義できます。必須ではありません。
ステップ 5:キーポリシーの確認と編集
ステップ3・4で定義したアクセス許可の確認です。特に編集する必要はありません。
設定が完了するとキーが作成され、キーIDが発行されるので3-2のKeyIdParameterに設定します。
4-3. 環境変数の暗号化
Lambdaコンソールで環境変数を設定します。
kmsEncryptedHookUrlに2.で作成したIncoming WebHooksのURLの"https://"以下を設定します。
slackChannelに通知するチャンネルを設定します。ただ、2.で述べたようにチャンネルは固定に変更されているので、この設定に意味はありません。
それぞれ値を入力し、暗号化の設定で「伝送中の暗号化のためのヘルパーの有効化」をチェックします。
「伝送中に暗号化するAWS KMS キー」に4-2.で作成したキーを指定します。
「保管時に暗号化するAWS KMS キー」でデフォルトかカスタマーマスターキーかを指定します。例ではカスタマーマスターキーを選択し、4-2.で作成したキーを指定しています。
環境変数の設定に「暗号化」というボタンが表示されていますので、kmsEncryptedHookUrlの暗号化」ボタンをクリックして暗号化します。slackChannelは暗号化しません。
最後にLambdaコンソールの「保存」ボタンをクリックして設定は完了です。
動作確認して、CloudWatchアラームのメッセージが飛べば成功です。
5. まとめ
Cloud Watchアラームの異常をSlack通知する方法をご紹介しました。 今回の対応でシステムに異常があったことをチーム全体で検知できるようになりました。 システムエラーはない方がいいですが、万が一発生してしまったときに、誰かが気づいて早く対応できるようにしておくと安心ですね。
P.S.
虎の穴では一緒に働く仲間を絶賛募集中です! この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。 yumenosora.co.jp
また、9/11(水)には御茶ノ水にて会社説明会を開催いたします。ご興味のある方は是非ご応募ください! yumenosora.connpass.com