menu
Webを活用してお客様のビジネス課題を解決します。札幌・東京を拠点にWebコンサルティングをコアにした、Web制作・システム開発・サーバ構築会社です。
現場ブログ

CloudWatchから送られてくる内容をChatworkに投稿したい件

fシェアする
ツイートする
ブックマーク
タイトルとURLをコピー

最終更新日:2020/12/30   公開日:2017/10/02

こんにちは、中村です。

まずいまずい全然ブログ書いてなかった。。

おかげさまで公私共々忙しくしています。

 

本日はこのネタ、CloudwatchをChatworkに送っちゃうやーつ。

使うのは、Cloudwatch, AmazonSNS, Amazon Lambdaです。

・CloudwatchはAWSのクラウドリソースやアプリケーションをモニタリングするやつです。

・AmazonSNSは通知サービスです。(今回はCloudwatchのアラームをLambdaに送信してくれます)

・Amazon LambdaはSNSから送られたJSONの中身をChatworkAPIを使って送信してもらいます。

 

まずJSONを取得して、APIぶっ叩くLambdaを書きます。

下記のスクリプトは、エラーハンドリングもしてないのであかんやつですがとりあえず動きます。

(なぜならさっき書いたからリファクタリングしていないのDA)

ちなみにSNSから渡されるJSONデータは、テストの時に全部見れる。

(ドキュメント読まずともテスト行おうとすれば確認できる)

 


 

var https = require (‘https’);
var querystring = require(‘querystring’);

exports.handler = function(event, context) {
var SnsMessage = event.Records[0].Sns.Message;
var postData = querystring.stringify({
body: “[To: USERIDを入れます]” + SnsMessage
});

var options = {
host: ‘api.chatwork.com’,
port: 443,
method: ‘POST’,
path: ‘/v2/rooms/ROOMIDが入ります/messages’,
headers: {
‘Content-Type’: ‘application/x-www-form-urlencoded’,
‘Content-Length’: postData.length,
‘X-ChatWorkToken’: ‘APIKEYが入ります’
}
};

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();
};


 

作成の後、Amazon SNSでTopicを作成して、Subscriptionを追加します。

Protocol: Amazon Lambda

Endpoint: さっき作ったLambda

Version or alias: ご自由に

 

ここまでで仕込みはできました。

あとはEC2なりでアラーム(auto scalingとかで使ってそうなCPU utilizationとか)を作成して、

通知の送信先をさっき作ったSNSにします。

 

そうすれば出来上がり、かなり端折ったけど、lambdaのソースを乗せたので普通にできますよね?w

と思ってるのでこれ以上は書きません。

 

こいつには(というかAPIの問題なのか)、弱点があってAPI経由で投稿すると通知こないんですよね。

(*もはやメールの方がいいんじゃないか説)

ちょっとまだ解決できてないんですが、何か策がないかなーと思って調べてます。

 

自分のAPIKEYで自分にToすると通知がこないだけでした。

Chatworkさんごめんなさいm(_ _)m

 

チャットワークAPIはこちらから