EC2サーバーへhostsを一斉配信する方法

EC2サーバーへhostsを一斉配信する方法メモ。



EC2サーバーへhostsを一斉配信する方法


EC2サーバーは一度停止するとIPアドレスが変わってしまう。その対策はいくつかあるが、一番確実・安心だと私が思うのはhostsの一斉配信。その方法を紹介します。


他の方法について、どこがダメだと思うのか一応紹介。


Elastic IPを割り当てておく

EIPの数は有限なため全サーバーにEIPを割り当てるのは現実的でない。


起動時にhostsを編集する

サーバー一覧取得(describe-instances)に失敗すると面倒、サーバー一覧取得のためのSecurity Credentialsを全サーバーに置くのは面倒、後から追加したサーバーが反映されない。


cronでhostsを編集する

起動時にhostsを書き換えるのと同じ懸念、定期的に変更(複数回)hostsを書き換えるのは不安。


専用のDNSを用意する

面倒。


参考リンク

EC2 - 動的プライベートIPアドレスをどうにかする

Amazon EC2で/etc/hostsに自動でホスト名を書き込む

EC2インスタンスのIPアドレスを自動でローカルDNSに登録する

EC2で同じリージョンの全ホストのプライベートIPを起動時にhostsに自動登録

Amazon EC2上で、内部IP(Private IP)をベースにhostsファイルを作成するスクリプト。



fabricを使ってhostsを配布する


fabricをあらかじめインストールしておくこと。fabricのインストールはコマンド1~2回だけで出来る。fabricに依存することを面倒に思う人がいるかもですが、たぶんこれが一番簡単かつシンプルです。


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


EC2のインスタンス名からhostsファイルを作成する方法


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール