EC2のAmazon Linuxに Chef Solo をインストールした
最近AWSもVagrant経由での起動が多くなっている私ですが、物理サーバにOSをインストールしてというようなシチュエーションもあるっちゃーあるんだよねー。
ということでvagrant pluginのvagrant-omnibusを使わずにChef環境の構築に挑戦
Amazon Linux AMI に Chef Solo をインストールしてみたを参考にAmazon LinuxにChef Soloを入れるところまでやってみた。
Chefインストール
まずはChefのインストール
# curl -L https://www.opscode.com/chef/install.sh | bash
これでchefのインストール終了。
簡単ですねーー。
# chef-solo -v
Chef: 11.8.2
ちゃんと入っている。
クックブック作成
下記の例ではcookbooks/git というクックブックを作成します。
# knife cookbook create git -o cookbooks/
WARNING: No knife configuration file found
** Creating cookbook git
** Creating README for cookbook: git
** Creating CHANGELOG for cookbook: git
** Creating metadata for cookbook: git
レシピ作成
cookbooks/git/recipes/default.rbにレシピを書いていきます。
gitは普通にyum install git で入るのでレシピはすごく単純です。
package “git” do
action :install
end
これをdefault.rbに書けばOK
複数パッケージを同時にインストールする場合は
%w{httpd php php-mbstring php-common php-cli php-xml php-mcrypt php-mysql php-gd}.each do |pkg|
package pkg do
action :install
end
end
なんて書けばhttpdとphpとphp-mbstringとパッケージが入っていきます。
レシピファイルの書き方は色々調べたらすごく楽しい。
このレシピが秘伝のたれみたいにあとあと資産になるような*気がする*
localhost.jsonとsolo.rb作成
どのレシピを利用するとかサーバの変数設定を書きます。
今回の場合は変数がないので入れるレシピだけを書く
localhost.json
{
“run_list” :[
“git”,
“httpd”
]
}
複数のレシピを利用する場合には「,」で区切ります。
solo.rb
file_cache_path “/tmp/chef-solo”
cookbook_path [ “/root/cookbooks” ]
レシピの実行
chef-solo -c solo.rb -j localhost.json
Starting Chef Client, version 11.8.2
Compiling Cookbooks…
Converging 1 resources
Recipe: git::default
* package[git] action install
– install version 1.8.3.1-1.28.amzn1 of package git
Chef Client finished, 1 resources updated
これでchefでgitが入りました。
chefを使う理由
gitぐらいだったら手動でも良いんです。コマンド一発だし。
でもね、手動ってめんどくさいんです、手作業での間違いが怖いんです。手順書作るのが面倒なんです。
あとは冪等性かなーと言いつつ冪等性が担保出来ないようなレシピも^^;;
これでだいぶ楽になる。
どんな小さいパッケージでもとりあえずレシピを書くというのを習慣化したい。
そしたらそれは資産になる。
VagnratでならそれにServerspecのテストまでが込みの1セットを書かないとね。
そうやってInfrastructure as Codeにすると色々見えてくる。
たまにしか構築しないからこそCodeで管理した方がいいんです。
おすすめの本
あらゆるところで紹介されていますが入門Chef Solo – Infrastructure as Code
この記事を書いた本当の理由は私へのメモ^^;;
次はEC2に構築したサーバにserverspecでのテストだな