オートスケールにしたときに全く同じタグホスト名で起動するのが気に入らないので起動時にタグ名を変更するスクリプトを仕込んでみました。
番号を重複させたくないのでIPアドレスの第3、4ブロックの数字を末尾に付加しています。
web-012111みたいなホスト名がAWSコンソールのインスタンス一覧に表示されるようになります。
Amazon Linuxの場合はec2コマンドラインツールがはじめからインストールされているので以下の環境変数を設定してコマンドラインツールを利用できるようにしておきます。
環境変数はローカルマシン全体に登録するとよろしくない(アカウントがあれば誰でも同じキーとシークレットを利用することになる)のでrootの.bashrcに記述しました。
export JAVA_HOME=/usr/lib/jvm/jre
export AWS_ACCESS_KEY="Your key"
export AWS_SECRET_KEY="your secret"
export EC2_HOME=/opt/aws/apitools/ec2
export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
JAVA_HOMEはデフォルトのインストール状況なら/usr/lib/jvm/jre-1.6.0に設定するとそのまま動きます。私の環境はJDK 1.7.0を入れて切り替えできるように上記パスからリンクを貼っているのでこうしています。自分の環境に合わせて置き換えてください。
JDK1.7を入れた手順についてはこちら
http://qiita.com/mychaelstyle/items/2a5b26e80cd5b0559625
動作するか確認します。
ec2-describe-instances
インスタンス一覧が表示されたらOKです。
/root/bin/renamehostスクリプトを作ります。
#!/bin/sh
#
# rename tag with ip for web servers
#
# [required env]
# write to root .bashrc
#
# export JAVA_HOME=/usr/lib/jvm/jre
# export EC2_HOME=/opt/aws/apitools/ec2
# export AWS_ACCESS_KEY=key
# export AWS_SECRET_KEY=secret
# export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
#
# definitions
PREFIX="web-"
# Source global definitions
if [ -f /root/.bashrc ]; then
source /root/.bashrc
fi
# watch info of this instance
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
LOCAL_IP=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4`
HOSTNUM=`echo $LOCAL_IP | sed -e "s/10\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.//"`
HOSTNUM=`printf "%03d" ${HOSTNUM}`
HOSTRG=`echo $LOCAL_IP | sed -e "s/10\.[0-9]\{1,3\}\.//"`
HOSTRG=`echo $HOSTRG| sed -e "s/\.[0-9]\{1,3\}\$//"`
HOSTRG=`printf "%03d" ${HOSTRG}`
NAME="${PREFIX}${HOSTRG}${HOSTNUM}"
echo $INSTANCE_ID
echo $LOCAL_IP
echo $HOSTNUM
echo $HOSTRG
echo $NAME
hostname $NAME
ec2-create-tags ${INSTANCE_ID} --tag Name=${NAME}
exit
実行権限付与して動作確認
chmod u+x /root/bin/renamehost
/root/bin/renamehost
ログインし直してホスト名がかわっていれば成功です。
/etc/rc.localファイルの末尾にこのスクリプト実行を追加します。
echo "/root/bin/renamehost" >> /etc/rc.local
インスタンスを起動し直して変更されているか確認してください。