📘

EC2に設定されているNameを自動でhostnameに設定する

2024/11/25に公開

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