自由気ままに書いちゃおう

好きなことをつらつらと・・・

インスタンス作成時のユーザデータについて

AWSのEC2インスタンスを構築する際、インスタンス起動と同時にOS内部の設定を実施してほしいことがあるかと思います。

そんな要望をかなえるのが、「ユーザデータ」です。


EC2インスタンスを生成する際に、ユーザデータに情報を入力することでコマンド実行等ができます。

下記はサンプルコードです。
RHELベースで記載しております。

■サンプルコードの内容
・SELinuxを無効化
・IPv6を無効化(カーネルレベルで無効化)
・タイムゾーンをAsia/Tokyoに変更
・ホスト名をtestserver に変更
・LANG変更(ja_JP.utf8)
・キーマップ変更
・kdumpサービス無効化
・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項目に限った内容(例:インスタンスタイプやキーペア、サブネット、セキュリティグループ等)をテンプレート化することができます。

以上です。