Lambda Scheduled Event + Goで GlobalIP監視

  • 8
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

この投稿は 今年もやるよ!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を監視してみた結果)

スクリーンショット 2015-12-10 1.00.59.png

アクセス元の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側の問題ですが)。

この投稿は 今年もやるよ!AWS Lambda縛り Advent Calendar 201511日目の記事です。