もくじ
- Chefとは
- インストールする
- Repositoryをつくる
- Cookbookをつくる
- Recipeをつくる
- 設定ファイルをつくる
- 実行してみる
- まとめ
1.Chefとは
Chefとはパッケージのインストールや設定ファイル変更を行うサーバ構築の自動化ツール(プロビジョニングツール)です。
手作業によるサーバ構築のオペミスを防ぐことができ、コードベースのためメンテナンスがしやすいことが特徴で、有名どころではFacebookが採用しています。
使うといいこと
・オペミスがなくなる
・複数台へ一括適用できる
・手順書がコードでできてる
・使い回しができる
今回はクライアントで単独コマンドが実行可能なChef Soloを使用して、Nginxのインストールを行なっていきます。
概要図
ざっとしたイメージはこんな感じです。
※今回やる範囲を元に作成しているので、これが全てではありません。。
2.インストールする
さっそく手を動かしましょう。
Chef のインストールは以下のコマンドを叩くだけです。
$ curl -L http://www.opscode.com/chef/install.sh | sudo bash
3.Repositoryをつくる
RepositoryとはCookbookをまとめたもので、一般的に1システム1レポジトリとなってます。
テンプレートとなるRepositoryをopscodeから落としてCookbookを作成していきましょう。
$ git clone git://github.com/opscode/chef-repo.git
4.Cookbookをつくる
CookbookとはRecipeやデータ、ファイルをまとめる本です。NginxのCookbookや、PostfixのCookbookなど
ミドルウェア別に管理します。
Chefをインストールしたらknifeというツールも一緒にインストールされるので、
このknifeでCookbookを作成していきます。
まずは以下のコマンドを叩いてknifeの初期設定をしましょう。
$ knife configure
いろいろ聞かれますが、エンターキー連打で問題ありません。
初期設定が終わったら、knifeを使ってCookbookを作成します。
$ cd chef-repo
$ knife cookbook create hello_nginx -o cookbooks
5.Recipeをつくる
cookbooks ディレクトリ内に hello_nginx というCookbookを作りました。
次はRecipeを作ります。Recipeとはざっくり言うと料理のレシピと同じで、作り方が書いてあります。
RecipeをもとにChefが料理をしてシステムの構築を行なってくれるわけです。
今回のRecipeではNginxのインストールと起動を行います。長くなるのでconf等の設定は端折ります。。。
Cookbookを作った時点でRecipeファイルのテンプレートができていますので、
以下のように編集してください。
$ vi cookbooks/hello_nginx/recipes/default.rb
#
# Cookbook Name:: hello_nginx
# Recipe:: default
#
# Copyright 2016, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
package "nginx" do
action :install
end
service "nginx" do
action [ :enable, :start ]
supports :status => true, :restart => true, :reload => true
end
packageやserviceは概要図にあったRecipeの命令単位で、
命令自体はResourceに定義されています。
補足)
package:パッケージのインストールや削除を行う。
service:サービスの実行や停止、再起動を行う。
6.設定ファイルをつくる
実行する前に、chef-repoディレクトリ直下に以下の二つのファイルを
作成しましょう。
Chef Solo実行時に実行するRecipeを記述するJSONファイルを用意します。
今回はhello_nginxというRecipeを作成したので、run_listに追加します。
vi localhost.json
// localhost.json
{
"run_list" : [ "recipe[hello_nginx]" ]
}
続いて、Chefが利用するtmpやCookbookのパスを指定する設定ファイルを作成します。
vi solo.rb
# solo.rb
file_cache_path "/tmp/chef-solo"
cookbook_path ["/home/user/chef-repo/cookbooks"]
7.実行してみる
chef-solo コマンドを実行して、Nginxをインストールしてみましょう。
先ほど作った設定ファイルを指定し、実行します。
実行にはsudoが必要なのでお忘れなく。
$ sudo chef-solo -c solo.rb -j ./localhost.json
実行結果
Nginxがインストールされて、
[root@d2f4b0fa1322 chef-repo]# rpm -qa | grep nginx
nginx-1.10.2-1.el6.ngx.x86_64
プロセスが立ち上がっているのが確認できます
[root@d2f4b0fa1322 chef-repo]# ps aux | grep nginx
root 9596 0.0 0.0 45052 896 ? Ss 06:44 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 9597 0.0 0.1 45432 2992 ? S 06:44 0:00 nginx: worker process
root 9604 0.0 0.0 6500 544 ? S+ 06:45 0:00 grep nginx
8.まとめ
今更ながらChef入門をやってみました。
今回は本当に触りの部分だけとなりましたが、雰囲気を感じていただければ幸いです。
学習コストが比較的高く、今回出てきていない用語もまだたくさんありますが、使いこなせれば非常に強力なツールです。