インフラ屋の皆様、年末年始に向けたサーバ増強はお済でしょうか。そんな貴兄に EC2 関連の小ネタです。
スケールアウトなんかを目的としてクローン・サーバー・パターンを実施するとき、同じ AMI から立てたインスタンスだと bash のプロンプトもぜんぶ同じになっちゃうのですが、やっぱりこれはインスタンス毎に変えておきたい。でないと思わぬ操作ミスをしちゃいそうですもんね。
さて、どうするか。まず、起動したインスタンスで自分のメタデータ(インスタンスIDとか)を取得するには、こうすれば良いみたい。
ふむふむ、
wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
とすれば良いのですな(チョー簡単で嬉しいけどなんで生の IP なんだろ?)。
インスタンス名が判ればあとは AWS CLI でインスタンスに付けた名前(タグの Name の値)を取得出来ますね。こんな感じ?
aws ec2 describe-instances --instance-ids <インスタンスID> --query "Reservations[*].Instances[*].[Tags]" --output table
これで問題は解決。perl で 上記出力からインスタンス名だけ抜き取って PS1 にセットすればよしっと。
export PS1="["$(/usr/bin/aws ec2 describe-instances --instance-ids $(/usr/bin/wget -q -O - http://169.254.169.254/latest/meta-data/instance-id) --query "Reservations[*].Instances[*].[Tags]" --output table | /usr/bin/perl -n -e 'print $1 if / Name \|\s*([^\s]+)/')" \W]\$ "
これを .bash_profile でも追記して完了! ムキになってワンライナーにしちゃいましたが、可読性が悪くていやんという場合は、
INSTANCE_ID=`/usr/bin/wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` MYNAME=`/usr/bin/aws ec2 describe-instances --instance-ids $INSTANCE_ID --query "Reservations[*].Instances[*].[Tags]" --output table | /usr/bin/perl -n -e 'print $1 if / Name \|\s*([^\s]+)/'` export PS1="["$MYNAME" \W]\$ "
でも良いと思います。さあ、紅白歌合戦でも除夜の鐘でもどんと来い!(うそ、なるべく来ないで)。