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