• home
  • AWSの各種アラートをSlackで受け取る

AWSの各種アラートをSlackで受け取る

多分みんなやっているとは思うけど、自分のためにメモ。

AWSの各種アラートをSNSで設定して、とりあえずSNSに自分のメールを追加して、深夜にひとりメールでアラートを受け取ってるみなさん、それSlackでやりましょう。
CloudwatchからSNSに投げているのであれば、Lambda functionをBlue Printからサクッと作るだけでお手軽にSlackに投稿できますよ!(多分)
~~もうメールとかつらいし駆逐していこう~~

実装の全体の流れ

  1. Slackのアラートを流したいチャンネルにIncoming Webhooksを追加
  2. Lambdaに与えるパラメータの暗号化用にKMSで暗号化キーを作る
  3. Lambdaの実行用にRoleを作る
  4. Slack投稿用のLambda functionを作る
  5. おもむろにアラートを上げる。
  6. みんな幸せ(?)

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. みんな幸せ

市民、あなたは幸せですか?