knife ec2でインスタンスの初期設定(RVM+Ruby1.9.2編)
前回はnodeのchef-clientを動かすためにrbelリポジトリのRubyを使っていた。特にこだわりがなかったり、動かすシステムでRubyを使うわけじゃなければ、RPMだと楽でいいですよね。
ただ、セットアップするnodeでRubyを使いたい、RVMで複数バージョンのRubyを使いたいなんてことがある場合もあると思う。
であれば、bootstrapでインストールするRubyもRVMでインストールしちゃえばいいじゃない。
という訳で、基本的には前回と同じで、bootstrapの中身を変えればOK。セットアップ対象はCentOS6で、Ruby1.9.2をインストールしてデフォルトRubyにします。
$CHEF_REPO/.chef/bootstrap/centos6-rvm.erb を以下のように作成。
bash -c ' <%= "export http_proxy=\"#{knife_config[:bootstrap_proxy]}\"" if knife_config[:bootstrap_proxy] -%> yum install -y gcc bison autoconf patch git curl readline-devel libxml2-devel libxslt-devel wget man if [ ! -f /usr/local/rvm/bin/rvm ]; then bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) source /etc/profile.d/rvm.sh rvm install 1.9.2 rvm use 1.9.2 --default fi gem install ohai --no-ri --no-rdoc gem install chef --no-ri --no-rdoc ln -nfs $(which chef-client) /usr/bin/chef-client mkdir -p /etc/chef ( cat <<'EOP' <%= validation_key %> EOP ) > /tmp/validation.pem awk NF /tmp/validation.pem > /etc/chef/validation.pem rm /tmp/validation.pem ( cat <<'EOP' <%= config_content %> EOP ) > /etc/chef/client.rb ( cat <<'EOP' <%= { "run_list" => @run_list }.to_json %> EOP ) > /etc/chef/first-boot.json <%= start_chef %>'
上記bootstrapテンプレートが出来上がったら、前回使用したknife ec2コマンドの -d オプションでの指定を今回作ったものに変えてあげる。
$ knife ec2 server create -G security_roup -I ami-12345678 -f t1.micro -S key-pair-name -i ~/.ssh/private-key.pem -x ec2-login-user -d centos6-rvm -r 'rolw[rails_server]' --region ap-northeast-1 -Z ap-northeast-1a
しばらく待てば、はい完成。(microだとちょっと時間がかかります。)