ELBのEC2インスタンスの登録/解除のrcスクリプトを作ってみた

EC2でELBに登録していてインスタンスを停止して再度起動した場合、ELBは対象のインスタンスを 「Out of Service」にしたまま自動では復帰しません。チェック自体が行われないので、いくら待っても自動での復帰はされません。
これを解消するには停止時にELBから登録を削除して起動時に再度登録すればよいわけで、自動化するスクリプトはググればいくつか見つかると思います。

rcスクリプトで管理

停止時と起動時に特定の処理を実行させると言えばrcスクリプトを思いつくわけですが、探してもそっちのサンプルはさくっとは見つからなかったのでPythonのお勉強がてらserviceコマンドで実行できる形で作成してみました。
RHEL6(CentOS6)用にRPMにして以下で公開してます。

64bit用しか用意してないですが、32bit版が必要な場合はソースもsrc.rpmも用意してあるので自前でビルドすれば良いと思います。サービス名やパッケージ名を変えたい場合もspecファイルいじれば問題無いと思います。

使い方もREADMEに書いてある通りで、PythonのBotoモジュールが必要です。
インストールすれば自動でサービスに登録されるので、あとは /etc/sysconfig/aws-elb-reg に適切にIAMで権限設定したアカウント情報を記述すればOKです。登録ELBを判定するタグ名もこのファイルで設定できます(デフォルトは elb)。

簡単な使い方

まずはパッケージをインストールです。

# rpm -ivh aws-elb-reg-<version>.rpm

あとは以下の手順で。

  1. 入っていなければBotoモジュールをインストール。pipでもyumでepleからインストールでも。
  2. ELBの操作が可能なIAMユーザー情報を /etc/sysconfig/aws-elb-reg に記述。
  3. 対象のインスタンスにタグ(デフォルトはelb)を追加して、値としてELB名を設定します。ELBは ','(カンマ)区切りで複数指定可能です(例:elb-hoge,test-ap,foo)。
  4. serviceコマンドを実行します。
  • ELBへ追加
# service aws-elb-reg <start|add>
  • ELBから削除
# service aws-elb-reg <stop|delete>
  • ELBへの登録状況確認(タグの値ではなく実際に登録されているELBを検出)
# service aws-elb-reg status

サービスに登録されているのでサーバの起動と停止時に自動でstartとstopが実行されます。

おわり

RPMにしたのでdebian系だとそのまま使えないですが、スクリプトを修正すれば同じようにできると思います。自分の環境では必要ないのでそっちまで作ってないですが将来必要になれば作るかもしれません。

ファイルひとつで設置できるサンプルも転がっているのでわざわざめんどくさいかもしれないですが、Auto Scaling で使うのに簡単かなと思って作ってみました(実際にはまだ Auto Scaling では使ってないので何か問題あるかも)。
自社の環境で使って今のところ問題なく動いてます。何か気づいた点などあれば教えてください。