ELB配下のインスタンス全てにcapistranoでデプロイする
最近はもっぱらAWSでのサーバ運用ばかりしています。
で、AWS EC2を使ってる際にどうしようかなぁと思うことの一つに、IPが固定されない、
ということがあると思います。
EIPなりVPCなり使えばIPの固定自体は出来ますが、いちいち固定IP付けるの面倒だし…という時とか。
今回はアプリケーションをデプロイする時にそれを感じました。
capistranoを用いたデプロイ時にデプロイ先のサーバのアドレスを指定しますが、
ELBにぶら下がるインスタンスに固定IP付けてないんだよなぁ、というケースです。
そこで aws-sdk for ruby を使って、ELB配下のインスタンスを取得するように設定してみました。
今回はVPC内のインスタンスを対象にしてたので、通常のEC2インスタンスであれば、 instance.private_ip_address を instance.dns_name にすればいいと思います。
実行結果は以下です。
$ bundle exec cap test_web
triggering start callbacks for `test_web'
* 2013-02-27 08:46:42 08:46:42 == Currently executing `test_web'
* executing "echo 'Hi!'"
servers: ["10.0.102.11", "10.0.101.11"]
[10.0.102.11] executing command
** [out :: 10.0.102.11] Hi!
[10.0.101.11] executing command
** [out :: 10.0.101.11] Hi!
command finished in 4000ms
$ bundle exec cap test_app
triggering start callbacks for `test_app'
* 2013-02-27 08:46:56 08:46:56 == Currently executing `test_app'
* executing "echo 'Hi!'"
servers: ["10.0.102.11", "10.0.101.11"]
[10.0.101.11] executing command
** [out :: 10.0.101.11] Hi!
[10.0.102.11] executing command
** [out :: 10.0.102.11] Hi!
command finished in 945ms
$ bundle exec cap test_db
triggering start callbacks for `test_db'
* 2013-02-27 08:47:04 08:47:04 == Currently executing `test_db'
* executing "echo 'Hi!'"
servers: ["10.0.102.11"]
[10.0.102.11] executing command
** [out :: 10.0.102.11] Hi!
command finished in 1019ms
おぉ、出来た。ちゃんとdb roleの時は1つのインスタンス宛になってます。
もっと色々活用するためにruby勉強せねば…。
おしまい。
まだ途中までしか読んでないですが、この本結構分かりやすいです。オライリーならPDFもありますし。