AWSのEC2イベントを検知してslackへ通知するBotを作ってみた!
週末、ハンズラボは花見でした。
吉田です。
いやー、楽しかったです(笑)
花を見た記憶がほとんどありませんが・・・
桜も2−3分咲きでしたが、テンションは最高でした。外でご飯を食べて酒を呑む。最高ですね!
さて、今回のブログネタはslack × Lambda です。
みなさん、Amazonから来る英語の謎メール、読んでますか?
凄い嫌なんですけど、これ凄い大事な内容が書いてあるんですよね。
EC2 scheduled event
AWS側の都合でEC2がシャットダウンされたりするやつですね。
遭遇したことが無かったので都市伝説位に思ってましたが、普通にあるんです。
(゚д゚)!<メール来たぞ!?
だがしかし、英語メール非常にめんどくさい。
アカウントも沢山あるし確認面倒!
ってことで、Botを作ってみました。
構成図はこちら
いままでブログで書いてきたことを盛り込みました。
前提としてLambdaを作るアカウントとその他のアカウントをSTSで結ぶ準備をしておく必要があります。
やりたいこと
1,EC2Events情報を取得しに行きます。
2,その結果イベントがあればslackへ通知します。
問題
①アカウントが数十個、インスタンスが数百個あると取得が終わる前にLambdaの活動限界が来る
Lambdaには5分の壁があります。
まずはここを突破しなければなりません。
今回の構成では、クーロンで回しているLambdaから実際に動くLambdaをキックして動かしています。
アカウント分Lambdaを作るとかそんな無意味なことはしたくありません。
大丈夫です。
LambdaからLambdaをキックするときもちゃんとJSONで情報を渡すことが出来ます。
これで1つ関数を定義しておけば数十並列でLambdaが動いてくれます。
各Lambdaは1アカウント分の情報を扱うだけなので活動限界に引っかかることはありません。
問題②
何度も通知が来るのは邪魔だから1回だけ通知して2回目以降は通知したくない
メールもそうですが通知が何度も飛ぶのはウザ過ぎます。1度でいいのです。
でもその送ったかどうか判定どうするの・・・?
S3を使うことで解決しました。
S3をデータストアとして利用することで送った判定します。
(Dynamo好きだけど流石に無駄すぎる・・・)
これで情報はどこから見ても一意の情報を取得できます。
そして実際に動いた結果が
こんな感じでどのアカウントのどのインスタンスが日本時間の何時にどうなりますという情報が流れてきます。
個人的には日本時間変換したのがちょっと鼻高ですw
ビバ・サーバーレス!
管理不要で楽をしましょう!
やみのま〜ノシ