Chef を使ってみた
- Chef を使用するとサーバの環境構築が自動化できると聞いて、初歩的なパッケージインストールまでをやってみた
- AWS EC2(Ubuntu) に Apache をインストールする
簡単な用語説明
- node : 環境設定をしたい対象となるサーバ
- workstation : 設定内容を記載するファイルの作成や管理をするクライアント
- Recipe : 設定内容を記載するファイル、Ruby で書く
事前準備
workstation
- Mac を使用
- インストールするもの
- chef
- knife-solo
- chef のインストール
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
- knife-solo のインストール
$ sudo gem install knife-solo
-
$ gem list
で 2 つがインストールされていることを確認 - knife コマンドの初期設定を行う
$ knife configure
node
- AWS EC2 の Ubuntu Server を対象とする
- インスタンスは作成済みとする
準備
Chef レポジトリの作成
- Workstation 側で作業
- 任意のレポジトリを下記コマンドで作成する(今回は testchef というリポジトリにする)
$ knife solo init “作成するレポジトリ名”
- 実行後に、testchef ディレクトリが出来る
- ディレクトリ構成
testchef/
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks
workstation の chef solo を使用し、node に Chef をインストール
- 作成した Chef レポジトリに入り、下記コマンドを実行
$ knife solo prepare -i ~/.ssh/xxx.pem ubuntu@xx.xxx.xxx.xx
- 下記ログが表示されれば、OK
Thank you for installing Chef!
Cookbook の作成、Recipe の記載
- Chef レポジトリ(testchef)に移動し、下記コマンド入力
$ knife cookbook create test -o site-cookbooks
- 実行後、site-cookbooks/test/recipes/default.rb ができるので、これを編集する
- 今回は apache をインストールするように編集
default.rb
package "apache2" do
action :install
end
- 編集後、testchef/nodes/xx.xxx.xxx.xx.json を編集し、recipe を呼ぶようにする
xx.xxx.xxx.xx.json
{
"run_list":[
"recipe[test]"
]
}
chef の実行
- 下記コマンドで実行する
$ knife solo cook -i ~/.ssh/xxx.pem ubuntu@xx.xxx.xxx.xx
- 以下のログが出力される
Running Chef on xx.xxx.xxx.xx...
Checking Chef version...
Uploading the kitchen...
Generating solo config...
Running Chef...
Starting Chef Client, version 11.10.4
Compiling Cookbooks...
Converging 1 resources
Recipe: test::default
- package[apache2] action install
- install version 2.2.22-1ubuntu1.4 of package apache2
Running handlers:
Running handlers completeChef Client finished, 1/1 resources updated in 18.333540242 seconds
まとめ
- AWS の EC2(Ubuntu) を対象に chef を使用してみた。
- 一度 recipe を作成すると使い回しが効く
- EC2 などと組み合わせると同じ環境を作成しやすくなる
- Vagrant などとも相性は良さそう