Rock'n'Hack ブログ

それなりハッカーを目指して、もろもろのメモ。bloggerから引っ越しました。

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もありますし。