この記事で紹介する内容
AWSでは、大抵のLinuxインスタンスに自動構成ツール「cloud-init」がインストールされています。
cloud-initの既定設定には、AMIの初回起動時に初期化を実行する項目があります。
既定設定をそのままにすると、通常利用時は問題ありませんが、リストア時にAMIから起動すると幾つかの項目が初期化されてしまいます。
この記事では、AMI起動時にユーザーデータが初期化する項目とそれを防ぐ方法を紹介します。
検証環境
- リージョン:ap-northeast-1
- AMI:RHEL-7.6_HVM-20190515-x86_64-0-Hourly2-GP2 - ami-04eb805483f5607a7
- インスタンスタイプ:t2.micro
AMI起動時にユーザーデータが初期化する項目
ホスト名(ip-XX-XX-XX-XXというPrivate IPを元にしたホスト名に設定される)
デフォルトユーザー(ec2-userが作成される)
ロケール(en_US.UTF-8に設定される)
パッケージ(セキュリティアップデートが実行される)
初期化を防ぐ方法
以下のコマンドで初期化防止用の設定ファイルを作成するだけです。
(タイムゾーン設定は念のため加えてますが、RHEL 7.6では初期化されませんでした)
cat >> /etc/cloud/cloud.cfg.d/99_preservesetting.cfg << EOF
repo_update: true
repo_upgrade: none
preserve_hostname: true
locale: ja_JP.UTF-8
timezone: Asia/Tokyo
system_info:
default_user:
name: cloudinit-user
lock_passwd: true
gecos: Cloudinit User
groups: [ adm, wheel, systemd-journal ]
sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
shell: /bin/bash
EOF
chmod 644 /etc/cloud/cloud.cfg.d/99_preservesetting.cfg
chown root:root /etc/cloud/cloud.cfg.d/99_preservesetting.cfg
解説
- repo_update:ローカルにキャッシュされたリポジトリのメタデータを更新する(true)/更新しない(false)
- repo_upgrade:(repo_upgrade_excludeの値を除く)全アップデートを適用する(all, on, true)/セキュリティアップデートを適用する(security)/アップデートを適用しない(none, off, false)
- preserve_hostname:ホスト名を維持する(true)/維持しない(false)
- locale:ロケール設定をする(ロケール)
- timezone:タイムゾーンを設定する(タイムゾーン)
- default_user:デフォルトユーザーを設定する(デフォルトユーザーの情報)
以上です。