この投稿は 今年もやるよ!AWS Lambda縛り Advent Calendar 2015 の 11日目の記事です。
LambdaがScheduled Eventに対応したので使ってみたい
だがしかし、
- 運用しているアプリがrubyなのでcronサーバーの代替としては辛い
- 何か色々と制限があるみたいよ AWS Lambda のココが惜しい
という事で、何か使い道が無いかなと考えていましたがGoでGlobalIP監視するには丁度使い勝手が良いのではと思い試してみました。
GoならLinux用にコンパイルすればLambdaで動く
Amazon Linuxで動くようにコンパイルしてあげれば問題ない。kickするnode.jsとまとめてzipにしてlambdaにアップロードすれば完了。
参考) http://blog.0x82.com/2014/11/24/aws-lambda-functions-in-go/
以前、Goでhttp監視scriptを書いていた
前にこんな感じのhttp監視を作っていた。
golangでhttpを監視するscriptを書いて結果をslackにpostする
VPC対応してないなら逆にGlobalIP監視をさせれば良いのでは
普通の監視の場合には、VPC内のEC2やらRDSやらにアクセスしたいところだが、GlobalIP監視では逆に外からアクセスしたい。
そう、逆に都合が良い。
ということで、現段階では自分にとってはGlobalIP監視としての利用が一番しっくり来たので試してみた
http監視をGoで用意
殆ど以前書いたQiitaのものを用意。
https://github.com/kenjiszk/go-scripts
Lambdaで動かしてみる。
Linux用にコンパイルして、kickするjsファイルとともにzipをアップロード。
slackにちゃんと通知してくれた!
(ちなみにこれは5分間隔でgoogleの存在しないURLを監視してみた結果)
アクセス元のIPはしっかりGIP
自分のサーバーに向けてみたところしっかりとGIPの52.193.72.170でアクセスが来ていた。予定通り!
time:[09/Dec/2015:13:32:07 +0000] forwardedfor:52.193.72.170 host:172.31.30.183 req:GET /aaa HTTP/1.1 status:404 size:22507 referer:- ua:Go 1.1 package http reqtime_microsec:220268 cache:- runtime:- vhost:test.co.jp
良いところ
GlobalIP監視って実は結構面倒なところがある。
- 複数拠点もっているようなデカい会社なら良いけど、1拠点しか無い場合どこからグローバル監視叩けば良いのだ?
- VPCをそれ用に立ててそこから監視をたたくとか、結構コスト。しかもそのサーバーの死活監視ってどうするんだ?
- クラウドサービスでいくつか出来そうだけどその為だけに導入するのってどうなの?有料だと辛い
で、その点、Lambdaでやらせれば基本解決。
まとめ
かなり簡単に動いた。
エンジニアじゃない人でもURLを追加出来るインターフェースがあるともっと便利(Script側の問題ですが)。