2013年2月27日水曜日

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

0 件のコメント:

コメントを投稿