LoginSignup
7
0

More than 5 years have passed since last update.

Chefをさわってみる

Last updated at Posted at 2016-12-15

もくじ

  1. Chefとは
  2. インストールする
  3. Repositoryをつくる
  4. Cookbookをつくる
  5. Recipeをつくる
  6. 設定ファイルをつくる
  7. 実行してみる
  8. まとめ

1.Chefとは

Chefとはパッケージのインストールや設定ファイル変更を行うサーバ構築の自動化ツール(プロビジョニングツール)です。
手作業によるサーバ構築のオペミスを防ぐことができ、コードベースのためメンテナンスがしやすいことが特徴で、有名どころではFacebookが採用しています。

使うといいこと
・オペミスがなくなる
・複数台へ一括適用できる
・手順書がコードでできてる
・使い回しができる

今回はクライアントで単独コマンドが実行可能なChef Soloを使用して、Nginxのインストールを行なっていきます。

概要図

ざっとしたイメージはこんな感じです。

chef.png

※今回やる範囲を元に作成しているので、これが全てではありません。。

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入門をやってみました。
今回は本当に触りの部分だけとなりましたが、雰囲気を感じていただければ幸いです。
学習コストが比較的高く、今回出てきていない用語もまだたくさんありますが、使いこなせれば非常に強力なツールです。

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0