LoginSignup
1
1

More than 5 years have passed since last update.

cloud-initで初回起動時、スクリプトを流す

Last updated at Posted at 2016-06-19

目的

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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1