Kumogata(CloudFormation)+Serfでサーバ群構築+内部名前解決

しつこくKumogataの記事です。

個人的なAWS環境で検証用のサーバ群を構築するとき、内部の名前解決の設定が少々面倒でした。

CloudFormationを使う場合はテンプレートでFn::GetAttすればいいかなー、と思ったんですが後続の要素をFn::GetAttすると循環参照でエラーになりますね。でも、テンプレートにDNSの設定を入れたくない…

で、serf-hostsが使おうと思ったんですが、hostsを書き換えるノードが複数いるとうまくいかず。joinでエラーになることがあるんですが、原因は不明。

仕方ないので、イベント発生時点のメンバーをすべてhostsに追加するイベントハンドラを書いたところ、一応動作しました。

追記

って、デモのhostsのホスト名/IPアドレスが逆になってる…orz

テンプレート

Kumogata+Serf - template.rb

イベントハンドラ

Kumogata+Serf- event_handler.rb

デモ

所感

中〜大規模な環境で使った場合はなにか穴がありそうですが、個人的な検証用途には十分そうでした。 Serfのエラーはもう少し調べねば…