目的
EC2を普通に立ち上げ、ログインして手動でミドルウェアなりアプリケーションをインストール、
できあがったAMIを大切に使い回す、という運用方法もあるかと思いますが、
別のアプローチとしては『まっさらなOSからセットアップする時間、手間を極力減らす』というアプローチもあります。
セットアップが自動化されていれば、OSのバージョンアップの対応コストを減らせます。
インスタンスの初回起動時、--user-data オプションを用いると スクリプトを実行できます。
管理コンソールから Configure Instance Details の下の Advanced Details で設定できます。
( RHELのkickstartで %post 配下にコードを書いていくイメージに近いです )
使い方
例えばこんな--user-dataの使い方
--user-data file://スクリプトのパス
立ち上げ例
インスタンス立ち上げ例
$ AMIID="ami-f80e0596" TYPE="m4.large" KEY="tin-machine" SECURITYGROUPS_ID="" USER_DATA="../../cloud-init/chef-setup.bash"
$ aws ec2 run-instances --associate-public-ip-address --count 1 --instance-type "${TYPE}" --image-id="${AMIID}" --key-name="${KEY}" --subnet-id="${SUBNETID}" --security-group-ids ${SECURITYGROUPS_ID} --user-data file://"${USERDATA}" | jq -r '.Instances[].InstanceId'
--user-data のオプションに渡すファイルで下記のことをしてみます。
( Amazon Linuxを想定しています )
* git, chef-clientインストール
bashスクリプトのサンプル
chef-setup.bash
#!/bin/bash
# /root配下にログ出力
exec 2> /root/cloud-init-chef-client_install.$$.log
echo -e '\n\nネットワークに出れるか、curl -s -m 2 http://google.com で確認します'
# 自分のネットワークで確認した方が望ましいですが
while ! curl -s -m 2 http://google.com > /dev/null 2>&1
do
echo -n '.'
sleep 3
done
echo -e '\n\nネットワーク接続を確認'
# chefがインストールされていなければインストールする
[[ ! -d /opt/chefdk ]] && echo -e '\n\nchefをインストールします' ; curl -L https://www.opscode.com/chef/install.sh | bash -s -- -P chefdk
# CodeCommit用gitインストール
yum -y install git