AWSのEC2インスタンスを構築する際、インスタンス起動と同時にOS内部の設定を実施してほしいことがあるかと思います。
そんな要望をかなえるのが、「ユーザデータ」です。
EC2インスタンスを生成する際に、ユーザデータに情報を入力することでコマンド実行等ができます。
下記はサンプルコードです。
RHELベースで記載しております。
RHELベースで記載しております。
■サンプルコードの内容
・SELinuxを無効化
・IPv6を無効化(カーネルレベルで無効化)
・タイムゾーンをAsia/Tokyoに変更
・ホスト名をtestserver に変更
・LANG変更(ja_JP.utf8)
・キーマップ変更
・kdumpサービス無効化
・net-tools,bind-utils,vimをインストール
・net-tools,bind-utils,vimをインストール
・OSリブート ※ホスト名変更の為
■サンプルコード(RHEL7系、AmazonLinux2系)
#cloud-config
timezone: "Asia/Tokyo"
runcmd:
- sed -i -e 's!SELINUX=enforcing!SELINUX=disabled!' /etc/selinux/config
- touch /etc/sysctl.d/disable_ipv6.conf
- chmod 644 /etc/sysctl.d/disable_ipv6.conf
- chown root:root /etc/sysctl.d/disable_ipv6.conf
- echo "net.ipv6.conf.all.disable_ipv6 = 1" > /etc/sysctl.d/disable_ipv6.conf
- echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/disable_ipv6.conf
- hostnamectl set-hostname testserver --static
- localectl set-locale LANG=ja_JP.utf8
- localectl set-keymap jp106
- systemctl stop kdump
- systemctl disable kdump
- yum -y install net-tools
- yum -y install bind-utils
- yum -y install vim
- reboot
■サンプルコード(RHEL6系、AmazonLinux1系)
#cloud-config
timezone: "Asia/Tokyo"
runcmd:
- sed -i -e 's!#Port 22!Port 443!' /etc/ssh/sshd_config
- sed -i -e 's!SELINUX=enforcing!SELINUX=disabled!' /etc/selinux/config
- touch /etc/sysctl.d/disable_ipv6.conf
- chmod 644 /etc/sysctl.d/disable_ipv6.conf
- chown root:root /etc/sysctl.d/disable_ipv6.conf
- echo "net.ipv6.conf.all.disable_ipv6 = 1" > /etc/sysctl.d/disable_ipv6.conf
- echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/disable_ipv6.conf
- echo "HOSTNAME=amazonlinux" > /etc/sysconfig/network
- echo "NETWORKING=yes" >> /etc/sysconfig/network
- echo "LANG=\"ja_JP.utf8\"" >> /etc/sysconfig/i18n
- echo "LANG=\"ja_JP.utf8\"" >> /etc/sysconfig/i18n
- echo "KEYTABLE=\"jp106\"" > /etc/sysconfig/keyboard
- echo "MODEL=\"jp106\"" >> /etc/sysconfig/keyboard
- echo "LAYOUT=\"jp\"" >> /etc/sysconfig/keyboard
- echo "KEYBOARDTYPE=\"pc\"" >> /etc/sysconfig/keyboard
- yum -y install net-tools
- yum -y install bind-utils
- yum -y install vim
- reboot
■ユーザデータの処理結果確認
EC2インスタンス起動後に、/var/log/cloud-init.log を確認することで処理内容の結果を確認することができます。
■ユーザデータとLaunch Templatesの違いについて
Launch Templatesは、インスタンス起動時にAWS設定項目をテンプレート化し、使いまわすことができるものです。
ユーザデータ同様、インスタンス起動時に適用されますが、AWS項目に限った内容(例:インスタンスタイプやキーペア、サブネット、セキュリティグループ等)をテンプレート化することができます。
■ユーザデータとLaunch Templatesの違いについて
Launch Templatesは、インスタンス起動時にAWS設定項目をテンプレート化し、使いまわすことができるものです。
ユーザデータ同様、インスタンス起動時に適用されますが、AWS項目に限った内容(例:インスタンスタイプやキーペア、サブネット、セキュリティグループ等)をテンプレート化することができます。
以上です。