AWSの各種アラートをSlackで受け取る
多分みんなやっているとは思うけど、自分のためにメモ。
AWSの各種アラートをSNSで設定して、とりあえずSNSに自分のメールを追加して、深夜にひとりメールでアラートを受け取ってるみなさん、それSlackでやりましょう。
CloudwatchからSNSに投げているのであれば、Lambda functionをBlue Printからサクッと作るだけでお手軽にSlackに投稿できますよ!(多分)
~~もうメールとかつらいし駆逐していこう~~
実装の全体の流れ
- Slackのアラートを流したいチャンネルにIncoming Webhooksを追加
- Lambdaに与えるパラメータの暗号化用にKMSで暗号化キーを作る
- Lambdaの実行用にRoleを作る
- Slack投稿用のLambda functionを作る
- おもむろにアラートを上げる。
- みんな幸せ(?)
1. Incoming Webhooksを追加
Slackのアラートを流したいチャンネルに、App DirectoryからIncoming WebHooksを追加。
追加した際に出てきたWebhook URLをメモる。
2. KMSで暗号化キーを作る
IAMのKMSのページに行って、後述するLambdaのパラメータの暗号化用にKMSでキーを作ります。
IAMのページはリージョンがグローバルになるので、KMSのページで作るキーはリージョン毎に作りますので、keyを作るリージョンを間違えないように。
キー管理者とキーユーザーはなくても大丈夫です。
作ったキーのARNをメモる。
3. Lambdaの実行用にIAMのRoleを作る
LambdaでKMSのkeyを使って復号化出来るように、IAMで新しいRoleを作ります。
作るRoleにアタッチするポリシーは以下の通り。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1443036478000",
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": [
"2でメモったARN"
]
}
]
}
4. Lambda functionを作る
Lambdaを作ります。
Blue Printの選択で、’cloudwatch-alarm-to-slack’を選択しましょう。
幸せになります。
環境変数の設定項目で、
slackChannelにSlackのチャンネル名を、
kmsEncryptedHookUrlには暗号化したURLを入れます。
暗号化したURLは次の手順で作ります。
1. Enable Encryption Helpersのチェックボックスをチェック
2. 暗号化キーの選択で、2で作った暗号化キーを選択
3. kmsEncryptedHookUrlのvalueに、1で作ったSlackのWebhookのURLを入れる
4. おもむろに暗号化ボタンを押します。
5. 暗号化されます。
Lambdaのロールはもちろん3で作ったRoleを設定。
5. アラートを上げる
CloudWatchのしきい値を変更してアラートを上げてください。
6. みんな幸せ
市民、あなたは幸せですか?