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ファイルを作成する方法は下記の記事に書きました。
