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これでしょう。

これを読みながらchefを勉強した方が圧倒的に楽です。

この記事を書いた本当の理由は私へのメモ^^;;

次はEC2に構築したサーバにserverspecでのテストだな