Amazon EC2の /etc/hosts は通常 localhost のエントリしかない。eth0のアドレスに対して自分自身からアクセスさせたい場合など、vimでhostsのエントリを書いたりしてもよいのだが、 www.example.com などの1つのFQDNを複数台でクラスタ化するときなどは面倒だしオペミスするのもつまらない。そこで、EC2インスタンスのhostsを簡単に書き換えるシェルスクリプトを作ってみた。
#!/bin/bash LANG=C HOSTSFILE=/etc/hosts T_DIR=${HOME}/tmp E_DIR=${HOME}/etc TMP=$(basename $0).$$ MASTER=${T_DIR}/tmp_${TMP}_hosts.master UNAME=${T_DIR}/tmp_${TMP}_hosts.uname H_FILE=${E_DIR}/hosts [ ! -d ${T_DIR} ] && mkdir -p ${T_DIR} [ ! -d ${E_DIR} ] && mkdir -p ${E_DIR} case $1 in [[:alnum:]]*) if [ 0 = $(uname -n | egrep '(^ip-[[:digit:]-]?)' > /dev/null 2>&1 ; echo $?) ]; then cat ${HOSTSFILE} | grep ^127.0.0.1 > ${MASTER} uname -n | sed -e 's/-/./g;s/ip.//g' | awk --assign FQDN=$1 '{print $1,"t"FQDN}' > ${UNAME} cat ${MASTER} > ${H_FILE} cat ${UNAME} >> ${H_FILE} sudo chown root. ${H_FILE} sudo mv ${H_FILE} /etc/ rm -f ${MASTER} ${UNAME} fi ;; *) ;; esac
引数にFQDNを与えてあげれば、 /etc/hosts のエントリに追加してくれる。こいつをPATHの通ったどこかに置いておいてAMI化しておけば、楽ちんなことこの上ない。
[amazonjs asin="4822211967" locale="JP" title="Amazon Web Services クラウドデザインパターン 設計ガイド"]