CloudWatchの通知をAmazonLambdaを使ってSlackに流す
CloudWatchの通知を Amazon Lambda 経由でSlackに流す方法です。
こんなFunctionを登録しておけば、使えるって備忘録。
Slackの設定
Integrations から incoming-webhook を追加しておきます。
Amazon SNSの設定
CloudWatchからLambdaに流すためのTopicを作っておきます。
Amazon Lambda に登録するコード
console.log('Loading function'); exports.handler = function(event, context) { var message = JSON.parse(event.Records[0].Sns.Message); var text = ""; if (message.NewStateValue === "ALARM") { text = ":exclamation: "; } else if (message.NewStateValue === "OK") { text = ":white_check_mark: "; } text = text + message.NewStateValue + ": " + message.AlarmName + "\\n" + message.NewStateReason; var exec = require('child_process').exec; var url = '<Webhook URL>' var cmd = 'curl -X POST --data-urlencode \'payload={"text": "' + text + '"}\' ' + url exec(cmd, function(error, stdout, stderr) { context.succeed(stdout); }); };
おもむろに curl を叩いてみたら動きました。便利。
動作確認の方法
EC2のインスタンスのCPU使用率のアラームを作っておいて、下記のコマンドを打てばお手軽にCPUの負荷を上げられます。
$ yes >> /dev/null
動作イメージ