AWS で CentOS7 AMI のホスト名を固定化する

AWS の EC2 で CentOS7 の AMI からインスタンスを作成した場合、/etc/hostname を修正してホスト名を手動設定しても再起動する度に元に戻ってしまいます。具体的には以下のようなホスト名に戻ってしまうはずです。

1
[root@ip-172-30-1-1 ~]#

これは CentOS7 の AMI イメージが cloud-init で制御されており、起動時にホスト名が再設定されるから、のようです。

そこで、cloud-init は実行するもののホスト名の再設定が実行されないように /etc/cloud/cloud.cfg 中の update_hostname をコメントアウトします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
users:
 - default

disable_root: 1
ssh_pwauth:   0

locale_configfile: /etc/sysconfig/i18n
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys:   0
ssh_genkeytypes:  ~
syslog_fix_perms: ~

cloud_init_modules:
 - migrator
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - set_hostname
# - update_hostname ← この部分をコメントアウト
 - update_etc_hosts
 - rsyslog
 - users-groups
 - ssh

その後にホスト名を設定します。

1
hostnamectl set-hostname HOSTNAME

または /etc/hostname にホスト名を設定します。但し、CentOS7 以降は設定ファイルを直接、修正するのは推奨されないようです。これで再起動してもホスト名が固定されるようになりました。