EC2サーバーへhostsを一斉配信する方法メモ。
EC2サーバーへhostsを一斉配信する方法
EC2サーバーは一度停止するとIPアドレスが変わってしまう。その対策はいくつかあるが、一番確実・安心だと私が思うのはhostsの一斉配信。その方法を紹介します。
他の方法について、どこがダメだと思うのか一応紹介。
Elastic IPを割り当てておく
EIPの数は有限なため全サーバーにEIPを割り当てるのは現実的でない。
起動時にhostsを編集する
サーバー一覧取得(describe-instances)に失敗すると面倒、サーバー一覧取得のためのSecurity Credentialsを全サーバーに置くのは面倒、後から追加したサーバーが反映されない。
cronでhostsを編集する
起動時にhostsを書き換えるのと同じ懸念、定期的に変更(複数回)hostsを書き換えるのは不安。
専用のDNSを用意する
面倒。
参考リンク
Amazon EC2で/etc/hostsに自動でホスト名を書き込む
EC2インスタンスのIPアドレスを自動でローカルDNSに登録する
EC2で同じリージョンの全ホストのプライベートIPを起動時にhostsに自動登録
Amazon EC2上で、内部IP(Private IP)をベースにhostsファイルを作成するスクリプト。
fabricを使ってhostsを配布する
fabricをあらかじめインストールしておくこと。fabricのインストールはコマンド1~2回だけで出来る。fabricに依存することを面倒に思う人がいるかもですが、たぶんこれが一番簡単かつシンプルです。
fabricのインストールが終わったら、以下の内容でfabfile.pyを作る。
# vi fabfile.py from fabric.api import run,local,sudo,env from fabric.operations import put def development(): env.hosts = ['host_a', 'host_b'] env.user = 'ec2-user' env.key_filename = '/home/ec2-user/.ssh/id_rsa' def deploy_hosts(): sudo('cp /etc/hosts /etc/hosts.bak') put( local_path='/etc/hosts', remote_path='/etc/hosts', use_sudo=True, mirror_local_mode=True )
hostsの配布。localhostの/etc/hostsを指定されたホストへ配布する。
fab development deploy_hosts
管理しているEC2サーバーのIPアドレスと使いたいホスト名一覧は、事前にlocalhostの/etc/hostsに書いておく必要がある。
インスタンス一覧から自動でhostsファイルを作成する方法は下記の記事に書きました。