📘
EC2に設定されているNameを自動でhostnameに設定する
AmazonLinuxにて、インスタンスに設定されているNameの値を、hostnameに設定するTIPS。
hostnameをNameで書き換え
手動で実行する場合
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& INSTANCE_ID=`curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id` \
&& NAME=`aws ec2 describe-tags --filters Name=resource-id,Values=$INSTANCE_ID Name=key,Values=Name --query 'Tags[0].Value' --output text` \
&& sudo hostnamectl set-hostname $NAME
起動時に自動でhostnameをNameで書き換え
ec2-userのcrontabに以下を設定する。
始めにsleepをしているのは、sleepがないとタイミングの問題なのかhostnameが書きかわらない事があるため。
# hostnameをEC2のタグのNameに変更
@reboot sleep 10 && TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && INSTANCE_ID=`curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id` && NAME=`aws ec2 describe-tags --filters Name=resource-id,Values=$INSTANCE_ID Name=key,Values=Name --query 'Tags[0].Value' --output text` && sudo hostnamectl set-hostname $NAME
自身のNameを取得している方法の解説
# TOKEN取得
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
# 自身のinstanceID取得
INSTANCE_ID=`curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id`
# Nameタグの値を取得
NAME=`aws ec2 describe-tags --filters Name=resource-id,Values=$INSTANCE_ID Name=key,Values=Name --query 'Tags[0].Value' --output text`
# 出力
echo $NAME
Discussion