これなんだ
インフラやるならGo書けると色々嬉しいことあるよと聞くので挑戦してみました。
今回作った理由は、AWSでサーバ台数減らす時にAutoScalingだと、いきなりシャットダウンされるので
td-agentとかに残ってるバッファが飛んでしまうのを対応したかったため作りました。
ツール名は exodia
です
https://github.com/a4t/exodia
何故Goなのか?
Rubyとかでこういったツールを書いてたこともあるのですが、Rubyのバージョンであったりgemのバージョンとかで動かなくなることがあります。
その辺りの管理が全く必要なく、バイナリ一つで動くGoは非常に使いやすいです。
exodiaの使い方
yamlもそれほど項目ないのと、先ほどの説明とサンプルのyaml見れば大体どんなことができるかわかると思います。
wait: 30 # check の項目に移動するまでの待機時間
interval: 5 # check で失敗した場合のリトライまでの待機
checkretry: 5 # check で失敗した場合のリトライ回数
scripts:
pre:
- service nginx stop
- service td-agent stop
check:
- ps aux | grep [t]d-agent && exit 1 || exit 0
- ps aux | grep [n]ginx && exit 1 || exit 0
post:
- shutdown -h now
pre で 事前に何か実行して
check で pre で実行したことが失敗することなく実行されているか確認し
post で本当にやりたかったことを実行する
といった感じになっています。
使い道
結構色々な用途に使えるようになっているかと思っています。
よくあるパターンはプロセスをチェックして、ちゃんと終了してからpostを実行するというパターンだと思います。
今回はサーバの停止なので実際のフローは以下のような形になると思います。
何らかの方法でサーバの台数を減らすという状態を取得
↓
何らかの方法で停止するサーバへ通知
↓
exodiaを実行
最後に
webhook受け付けるようにしたらもっと便利になったりするんだろうかと思いつつも、機能をシンプルにしたいという思いがあり付けてません。
Goの作法全然把握してないのでプルリクお待ちしてます!