LoginSignup
3
3

More than 5 years have passed since last update.

cloud-initを使ってホスト名を動的に設定する

Last updated at Posted at 2017-04-03

cloud-initを使ってホスト名を動的に設定したい

運用上、EC2インスタンスはstart/terminateしかしない。
これは、以前の記事で書いた構成のためである。

ホスト名を変えたいのは以下の点で困るから。
- Datadogに表示されるhostnameを分かりやすい物に変えたい
- Fluentdでoutputするレコードにhostnameをappendしているため、分かりやすい物に変えたい

何故cloud-initを使うのか

userdataを使わずにスクリプト置いてcloud-initから実行したい。

userdataでも出来る。出来るけど、userdataには極力何も置かない方針としたかった。
userdataに色々書くと追々混沌とするだろうなぁという恐怖があった。

設定後のイメージ

EC2.TagName-EC2.instance_id-EC2.private_ip_address
こんな形式でホスト名を設定したい。

cloud-initで設定するには

こうする。

/var/lib/cloud/scripts/per-boot/00_hostname.sh
readonly AWS_REGION="ap-northeast-1"

ip_address=$(/bin/curl -s http://169.254.169.254/latest/meta-data/local-ipv4 | sed -e "s/\./-/g")
instance_id=$(/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id)
tag_name=$(aws --region ${AWS_REGION} ec2 describe-instances \
               --instance-id ${instance_id} \
               --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value' \
               --output text)

hostname ${tag_name}-${instance_id}-${ip_address}
hostnamectl set-hostname ${tag_name}-${instance_id}-${ip_address}

exit 0

※実際にはこれをAnsibleで管理していて、マシンに置いている。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3