CloudWatch의 Alerm을 Lambda를 통해 chatwork에 POST
3016 단어 Chatwork람다CloudWatchAWS
제가 관리하고 있는 서비스는 Zabbix 사용하고 있기 때문에 기본 그 곳에서 컨트롤하면 됩니다만, 거기까지가 아닌 & 캐주얼에 하고 싶을 때는 CloudWatch를 사용하고 싶습니다. CloudWatch는 설정이 매우 간단하며 Alerm의 알림 대상도 메일이나 SNS를 설정할 수 있어 매우 편리합니다.
그래서 이번에는 ELB를 감시하고 문제가 있으면 chatwork에 POST하도록 해 보았습니다.
참고로 chatwork의 API는 요청 헤더에
X-ChatWorkToken
라는 API 키를 포함해야하므로 SNS에서 직접 HTTPS 게시를 할 수 없습니다. 그래서 AWS Lambda의 등장입니다. SNS로부터의 통지를 일단 Lambda에서 받고 chatworkAPI에 POST하는 흐름입니다.
AWS Lambda 스크립트
request 모듈은 zip으로 올려야 하기 때문에 https 모듈을 사용하고 있습니다.
var https = require('https');
var querystring = require('querystring');
exports.handler = function(event, context) {
var message = JSON.parse(event.Records[0].Sns.Message);
var state = (message.NewStateValue == 'ALARM') ? 'error' : 'ok';
var post_message = "(" + state + ")\n"
+ "[code]\n"
+ message.NewStateValue + "\n"
+ "\n"
+ message.AlarmName + "\n"
+ message.AlarmDescription + "\n"
+ message.NewStateReason + "\n"
+ "[/code]\n";
var postData = querystring.stringify({
body: post_message
});
var options = {
host: 'api.chatwork.com',
port: 443,
method: 'POST',
path: '/v2/rooms/【部屋ID】/messages',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length,
'X-ChatWorkToken': '【APIキー】'
}
};
var req = https.request(options, function (res) {
res.on('data', function (d) {
process.stdout.write(d);
});
res.on('end', function () {
context.done();
});
});
req.on('error', function (err) {
console.log(err);
});
req.write(postData);
req.end();
};
【방 ID】와 【API 키】를 적절히 변경하십시오.
또, SNS로부터의 통지 메세지를 1건 밖에 취득하고 있지 않거나, 에러 핸들링 하고 있지 않은 것인가의 원숭이의 스크립트입니다만, 최소한 이것으로 움직이게 된다고 생각합니다.
CloudWatch 설정 이미지

AWS SNS 구성 이미지

chatwork 이미지
이런 식으로 POST됩니다.

이것으로 안심하고 밤에도 잘 수 있네요.
Reference
이 문제에 관하여(CloudWatch의 Alerm을 Lambda를 통해 chatwork에 POST), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zaru/items/bab992b9438f07740eb9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)