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

細かすぎて伝わらないテクニックです

Amazon LinuxやRHELを使っていると、ip-XXX-XXX-XXX-XXXが見つかりませんというアラート表示を良く見かけます。これは、単純に/etc/hostsにレコードが無いから。じゃぁなぜip-XXX-XXX-XXX-XXXって聞いてくるのか?これはホスト側が勝手に設定しているから。それじゃぁこのギャップを埋めよう。

起動時にスクリプトを実行

OS起動時にスクリプトを実行する下地を作ります。インクルード処理ですね。

$ sudo vi /etc/rc.local
if [ -d /etc/rc.local.d ]; then
  #パス内のシェルを全て実行する
  for i in /etc/rc.local.d/*; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

ホスト名を追加します

ホスト名を取得するにはhostnameコマンドです。これを/etc/hostsに追記します。

$ sudo mkdir /etc/rc.local.d
$ cd /etc/rc.local.d/
$ sudo vi add_hostname
sed -i -e "1s/ip-.*//g" /etc/hosts
sed -i -e "1s/$/ $(hostname)/g" /etc/hosts

最初の行で、ソースの1行目のip-で始まる文字列以降を削除します。次の行で、ソース1行名の最後にホスト名を追加します。これだけです。これにより、以下のような結果になります。

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain ip-10-0-0-10

これでホスト名に関するログやアラートが消えると思うんだなー。

まとめ

再起動のたびに自分のホスト名を調べて/etc/hostsに設定することができます。ノーメンテナンスっす。この細かさ伝わったなかぁ。。。細かいけどイイ感じと思った方は是非イイねをw