LoginSignup
45
48

More than 5 years have passed since last update.

AWS EC2インスタンス起動時 cloud-initによりホスト名をNameタグ_インスタンスID_IPアドレスに設定する

Last updated at Posted at 2014-12-27

AmazonLinuxのECインスタンス起動時、cloud-initによりホスト名を[Nameタグ_インスタンスID_IPアドレス]に設定するメモになります。

EC2インスタンスを複数作成する場合、各インスタンスのホスト名にNameタグやインスタンスIDを付けて、操作対象のインスタンスを見分けやすくしたいといった事があるかと思います。EC2インスタンス起動時にホスト名を[Nameタグ_インスタンスID_IPアドレス]として設定するようにしたいと思います。

■概要
EC2インスタンス内の/var/lib/cloud/scripts/per-boot/配下にスクリプトを作成し、EC2インスタンスに設定しているTagsやmetadataからインスタンスIDやNameタグ等を取得し、EC2インスタンス起動の度、ホスト名を[Nameタグ_インスタンスID_IPアドレス]に設定します。

■EC2インスタンスに設定するNameタグとIAMポリシー例
EC2インスタンスのNameタグに、例えば「web-server-002」と設定します。

ホスト名変更対象のEC2インスタンスには、aws ec2コマンドで各種情報を取得できるよう以下のようなIAMポリシーを設定しておきます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:Describe*",
      "Resource": "*"
    }
  ]
}

■cloud-initにより実行するスクリプト
EC2インスタンス内に以下のようなスクリプトを作成します。

[ec2-user@ip-172-31-4-80 ~]$ hostname
ip-172-31-4-80
[ec2-user@ip-172-31-4-80 ~]$ sudo vi /var/lib/cloud/scripts/per-boot/001_setting_hostname.sh
#!/bin/sh

##### リージョン名を取得
REGION=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/.$//'`

##### インスタンス自身のインスタンスIDを取得
INSTANCE_ID=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id`

##### インスタンス自身のIPアドレスを取得
IP_ADDRESS=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/local-ipv4`

##### Nameタグを取得
NAME_TAG=`/usr/bin/aws ec2 describe-instances --region ${REGION} --instance-ids ${INSTANCE_ID=} --query 'Reservations[].Instances[].Tags[?Key==\`Name\`].Value' --output text`

##### ホスト名の一部に設定するIPアドレスの.を-に変換
IP_ADDRESS=`echo ${IP_ADDRESS} | sed -e "s/\./-/g"`

##### ホスト名を変更する
INSTANCE_NAME="${NAME_TAG}_${INSTANCE_ID}_${IP_ADDRESS}"

hostname ${INSTANCE_NAME}
sed -i -e "s/^HOSTNAME=.*\$/HOSTNAME=${INSTANCE_NAME}/g" /etc/sysconfig/network

スクリプトに実行権限を付与します。

[ec2-user@ip-172-31-4-80 ~]$ sudo chmod 755 /var/lib/cloud/scripts/per-boot/001_setting_hostname.sh
[ec2-user@ip-172-31-4-80 ~]$
[ec2-user@ip-172-31-4-80 ~]$ ll /var/lib/cloud/scripts/per-boot/001_setting_hostname.sh
-rwxr-xr-x 1 root root 969 Dec 28 00:32 /var/lib/cloud/scripts/per-boot/001_setting_hostname.sh
[ec2-user@ip-172-31-4-80 ~]$

■EC2インスタンスのホスト名を変更
先のスクリプトを実行する、もしくはEC2インスタンスを再起動すると次回起動時にホスト名が変更されます。

[ec2-user@ip-172-31-4-80 ~]$ hostname
ip-172-31-4-80
[ec2-user@ip-172-31-4-80 ~]$ grep -i hostname /etc/sysconfig/network
HOSTNAME=localhost.localdomain
[ec2-user@ip-172-31-4-80 ~]$ sudo reboot

EC2インスタンスが起動すると、ホスト名が[Nameタグ_インスタンスID_IPアドレス]に設定されます。

[ec2-user@web-server-002_i-9b6f5f82_172-31-4-80 ~]$ hostname
web-server-002_i-9b6f5f82_172-31-4-80
[ec2-user@web-server-002_i-9b6f5f82_172-31-4-80 ~]$ grep -i hostname /etc/sysconfig/network
HOSTNAME=web-server-002_i-9b6f5f82_172-31-4-80
[ec2-user@web-server-002_i-9b6f5f82_172-31-4-80 ~]$

今回は/var/lib/cloud/scripts/per-boot/にスクリプトを配置して、EC2インスタンスを起動する度にホスト名を設定するようにしていますが、/var/lib/cloud/scripts/per-once/にスクリプトを配置して、EC2インスタンス初回起動時にホスト名を設定するのでも良いかもしれません。

45
48
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
45
48