Chef-SoloとVagrantの導入(VPC環境)

こんにちは。プラットフォームの小宮です。
最近chef流行ってますね。
せっかくだからこの波に乗ってプロダクト環境に合わせてやってみよう的な記事を書こうかと思います。
さっさとServerspecまでたどり着きたいんですが、今回は導入のみの記事でレシピなどはまた次回以降に。
やってみよう的なレベルなのでリファクタリングし甲斐のあるレシピになる予感がします。

さて今回Chef化を試みる環境はVPC上に移行する話になってます。(構成はweb2、db2、stg1、nat1です。ELB利用。soloで十分な感じ。)
Vagrant-awsでVPCつかう方法が可能なようなので、Vagrantを使用して構成管理を行いつつKnife-soloも使うことにします。
vagrantとsahara連携でOSの状態を保存してロールバックということが可能となります。
knife-soloだと/sbin等の下のrubyを消して入れ替えようとしてしまうことがあるらしいので、アプリケーションにおいてrubyを使用しないことを確認しておきます。

vagrantを入れるのでruby1.8.7より上のバージョンをrbenvで入れます。
(CentOS5系の場合。6系や他のディストリビューションでは別途ruby -vで確認してください)

実は、Chef-Clientを/opt/chefの下に入れた段階で以下のようにPATHを通しておけばrubyのバージョンは気にしなくてもよいかもしれません。
[shell]# curl -L https://www.opscode.com/chef/install.sh | bash
# export PATH=$PATH:/opt/chef/embedded/bin/
# vi ~/.bashrc
PATHをとおしておく[/shell]
gemでchefを入れるのは古いやりかたみたいですね。

・最初にOracleVirtualBoxを導入
入れる理由はVagrant-awsでインスタンスの起動と管理を行うため。
[shell]cat /etc/redhat-release
CentOS release 5.8 (Final)
yum install libXmu libXt mesa-libGL qt qt-x11 SDL

wget http://download.virtualbox.org/virtualbox/4.2.12/VirtualBox-4.2-4.2.12_84980_el5-1.x86_64.rpm
rpm -ivh VirtualBox-4.2-4.2.12_84980_el5-1.x86_64.rpm[/shell]

・ruby-1.8.7より新しいバージョンを導入(必要な場合)
[shell]yum -y install zlib-devel readline-devel openssl-devel
yum install ruby ruby-devel rdoc irb rubygems
yum install git –enablerepo=rpmforge[/shell]

rbenvのインストール
[shell]git clone git://github.com/sstephenson/rbenv.git ~/.rbenv[/shell]

rbenvのパスを設定する為に以下2行追記
[shell]vi ~/.bashrc
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
source ~/.bashrc[/shell]
ここでのPATHは各環境に合わせてください(rbenvで入れない場合は/opt/chef/embedded/binに通す等)

ruby-buildのインストール
[shell]git clone git://github.com/sstephenson/ruby-build.git
cd ruby-build
sudo ./install.sh
Installed ruby-build at /usr/local

rbenv install -l
rbenv install 1.9.2-p290[/shell]

デフォルトで使うバージョンを指定する
[shell]rbenv global 1.9.2-p290
rbenv rehash[/shell]

バージョン確認
[shell]ruby -v[/shell]

ジェムの場所
~/.rbenv/versions/バージョン番号/lib/ruby/gems/バージョン番号/gems

・vagrant(1.1以上)とプラグインのインストール
gemでは入らないのでパッケージをダウンロードする
[shell]wget http://files.vagrantup.com/packages/7e400d00a3c5a0fdf2809c8b5001a035415a607b/vagrant_1.2.2_x86_64.rpm
rpm -ivh vagrant_1.2.2_x86_64.rpm
rpm -ql vagrant|grep bin

vagrant -v
yum install -y rubygem-nokogiri
yum install -y gcc ruby-devel libxml2 libxml2-devel libxslt libxslt-devel
vagrant plugin install vagrant-aws
vagrant plugin install sahara
vagrant plugin install vagrant-vbguest[/shell]

OSイメージはいらないがboxは必要なのでダミーのboxをadd
[shell]vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
vagrant box list[/shell]
つづけてvagrant initで設定ファイルを作成するが別で書きます

・knife-soloの導入
[shell]gem install bundler
gem install knife-solo –pre
gem install knife-solo_data_bag
gem list
chef-solo –version
Chef: 11.4.4[/shell]

あたらしいknife-soloを入れた場合以下記載する(knife-soloが利用するテンポラリディレクトリの設定)
[shell]mkdir -p ~/.chef
vi ~/.chef/knife.rb
knife[:solo_path] = ‘/root/chef-solo’
cookbook_path [‘/root/chef-repo/site-cookbooks’, ‘/root/chef-repo/site-cookbooks’]
data_bag_path ‘/root/chef-repo/data_bags’
encrypted_data_bag_secret ‘/etc/chef/encrypted_data_bag_secret’

mv ./*rpm /usr/local/src/[/shell]

rubyの環境変数設定
[shell]vi /root/.bashrc
export PATH="$HOME/.rbenv/bin:$PATH:/root/.rbenv/versions/1.9.2-p290/bin"
eval "$(rbenv init -)"
export EDITOR=vi

bash[/shell]

opscodeCommunityのクックブックを使う場合、gitのリポジトリ作成しcommitしておきます

以下ページでサインアップ
https://community.opscode.com/users

以下から新しい秘密鍵をゲットして保存
http://community.opscode.com/users/your_userid/user_key/new
[shell]vi /root/.chef/pkey.pem
秘密鍵をはりつける
vi /root/.chef/knife.rb
cookbook_path [‘/root/chef-repo/site-cookbooks’,’/root/chef-repo/cookbooks’]
client_key ‘/root/.chef/pkey.pem'[/shell]

OpsCodeCommunityのクックブックはknifeコマンドで取得可能だが、その際にgitでリポジトリ管理されてコミット済みである必要があります
[shell]cd /root/chef-repo
git init
Reinitialized existing Git repository in /root/chef-repo/.git/
git config –global user.email "hoge@isao.co.jp"
git config –global user.name "hoge hoge"
git add .
git commit -m ‘first commit'[/shell]
これでknifeでクックブックを取得できるようになりました(レシピの取得は別途つづきを書きます)

参考:
Vagrant1.1 + vagrant-awsで複数インスタンスを作る方法
VirtualBoxのインストール・設定・使い方を詳しく解説
virtualbox.org
Vagrant 1.1 で EC2 を vagrant up
Vagrant1.1を使ってAmazon EC2にCentOSのインスタンスを立ち上げる方法
僕が使っている vagrant plugins

つづきます。次はVagrantfileとrecipeやroleなどの構成について書く予定です。

こんにちは。プラットフォームの小宮です。
最近chef流行ってますね。
せっかくだからこの波に乗ってプロダクト環境に合わせてやってみよう的な記事を書こうかと思います。
さっさとServerspecまでたどり着きたいんですが、今回は導入のみの記事でレシピなどはまた次回。
やってみよう的なレベルなのでリファクタリングし甲斐のあるレシピになる予感がします。

さて今回Chef化を試みる環境はVPC上に移行する話になってます。(構成はweb2、db2、stg1、nat1です。ELB利用。soloで十分な感じ。)
Vagrant-awsでVPCつかう方法が可能なようなので、Vagrantを使用して構成管理を行いつつKnife-soloも使うことにします。
vagrantとsahara連携でOSの状態を保存してロールバックということが可能となります。
knife-soloだと/sbin等の下のrubyを消して入れ替えようとしてしまうことがあるらしいので、アプリケーションにおいてrubyを使用しないことを確認しておきます。

vagrantを入れるのでruby1.8.7より上のバージョンをrbenvで入れます。(CentOS5系)

最初にOracleVirtualBoxを導入
入れる理由はVagrant-awsでインスタンスの起動と管理を行うため。
[shell]cat /etc/redhat-release
CentOS release 5.8 (Final)
yum install libXmu libXt mesa-libGL qt qt-x11 SDL

wget http://download.virtualbox.org/virtualbox/4.2.12/VirtualBox-4.2-4.2.12_84980_el5-1.x86_64.rpm
rpm -ivh VirtualBox-4.2-4.2.12_84980_el5-1.x86_64.rpm[/shell]

ruby-1.8.7より新しいバージョンを導入
[shell]yum install ruby ruby-devel rdoc irb rubygems
yum install git –enablerepo=rpmforge[/shell]

rbenvのインストール
[shell]git clone git://github.com/sstephenson/rbenv.git ~/.rbenv[/shell]

rbenvのパスを設定する為に以下2行追記
[shell]vi ~/.bashrc
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
source ~/.bashrc[/shell]

ruby-buildのインストール
[shell]git clone git://github.com/sstephenson/ruby-build.git
cd ruby-build
sudo ./install.sh
Installed ruby-build at /usr/local

rbenv install -l
rbenv install 1.9.2-p290[/shell]

デフォルトで使うバージョンを指定する
[shell]rbenv global 1.9.2-p290
rbenv rehash[/shell]

バージョン確認
[shell]ruby -v[/shell]

ジェムの場所
~/.rbenv/versions/バージョン番号/lib/ruby/gems/バージョン番号/gems

・vagrant(1.1以上)とプラグインのインストール
gemでは入らないのでパッケージをダウンロードする
[shell]wget http://files.vagrantup.com/packages/64e360814c3ad960d810456add977fd4c7d47ce6/vagrant_x86_64.rpm
rpm -ivh vagrant_1.2.2_x86_64.rpm
rpm -ql vagrant|grep bin

vagrant -v
yum install -y rubygem-nokogiri
yum install -y gcc ruby-devel libxml2 libxml2-devel libxslt libxslt-devel
vagrant plugin install vagrant-aws
vagrant plugin install sahara
vagrant plugin install vagrant-vbguest[/shell]

OSイメージはいらないがboxは必要なのでダミーのboxをadd
[shell]vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
vagrant box list[/shell]
つづけてvagrant initで設定ファイルを作成するが別で書きます

・knife-soloの導入
[shell]gem install bundler
gem install knife-solo –pre
gem install knife-solo_data_bag
gem list
chef-solo –version
Chef: 11.4.4[/shell]
あたらしいknife-soloを入れた場合以下記載する(knife-soloが利用するテンポラリディレクトリの設定)
[shell]mkdir -p ~/.chef
vi ~/.chef/knife.rb
knife[:solo_path] = ‘/tmp/chef-solo’
cookbook_path [‘/root/chef-repo/site-cookbooks’, ‘/root/chef-repo/site-cookbooks’]

mv ./*rpm /usr/local/src/[/shell]

rubyの環境変数設定
[shell]vi /root/.bashrc
export PATH="$HOME/.rbenv/bin:$PATH:/root/.rbenv/versions/1.9.2-p290/bin"
eval "$(rbenv init -)"

bash[/shell]

参考:
Vagrant1.1 + vagrant-awsで複数インスタンスを作る方法
VirtualBoxのインストール・設定・使い方を詳しく解説
virtualbox.org
Vagrant 1.1 で EC2 を vagrant up
Vagrant1.1を使ってAmazon EC2にCentOSのインスタンスを立ち上げる方法
僕が使っている vagrant plugins

つづきのシリーズ記事はこちらからどうぞ↓
 Chef-Soloでレシピを書く前の環境について(Vagrantfile,role,node,data_bags)
 Chefで既存手順のレシピを書く1(初期設定)
 Chefで既存手順のレシピを書く2(ユーザ作成)
 Chefで既存手順のレシピを書く3(WEBサーバ)
 Chefで既存手順のレシピを書く4(DBサーバ)
 Chefで既存手順のレシピを書く5(munin、zabbix)
 Chefで書いたレシピをテストする(serverspec)

おすすめ記事