AWS_FAQ


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 정책을 설정 되어 있어야 함.

■ cloud-init에 의해 실행되는 스크립트
EC2 인스턴스에 다음과 같은 스크립트를 작성합니다.

$ hostname
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 인스턴스 처음 시작할 때
호스트 이름을 설정하하는 방법