Chefを使ってみる - お試し編(1)

[導入編](http://qiita.com/naoto-yoshida/items/51bba0a67addcea9f1f2)ではChefを使う準備を実施した。
お試し編ではEpelのレポジトリを指定し、Nginxを適用するようなレシピを記載し、実際にリモートサーバへデプロイを実施する。


#その前に#
###Chefを使うときのおおまかな流れの備忘録###
* [Cookbook作成]-[Berksfile記載（必要に応じて）]-[nodeオブジェクト作成]-[レシピ作成]-[Attribute作成]-[template作成]-[デプロイ準備]-[デプロイ]
* 順番の前後とかEnvironment設定などもあるけど、基本のフローはこんな感じ。

###前提###
* Chefの作業ディレクトリは/var/chef-repoとする
* リモートサーバ名はremote-hogehogeとする（名前解決はできているものとする）
* Chef実行ユーザはusr-fugafugaとする
* remote-hogehoge上には予めusr-fugafugaを作成し、sudores設定（sudoパスワード無し実行許可）を実施しておく


#Nginx用にクックブックなどを準備#
1. 作業ディレクトリ移動
<pre>
$ pwd
/var/chef-repo
</pre>

2. Berksfileを作成する
NginxはEPELリポジトリからインストールを実施するため、Nginxの依存関係としてEPELを指定する
<pre>
$ cat Berksfile
source "https://supermarket.getchef.com"
&emsp;
cookbook "yum-epel"
cookbook "nginx" , path: "./site-cookbooks/nginx"
</pre>

3. berks vendorを実行し、各クックブックなどを作成する
<pre>
$ berks vendor ./cookbooks
Fetching 'nginx' from source at site-cookbooks/nginx
Using nginx (0.1.0) from source at site-cookbooks/nginx
Using yum (3.4.1)
Using yum-epel (0.5.2)
Vendoring nginx (0.1.0) to cookbooks/nginx
Vendoring yum (3.4.1) to cookbooks/yum
Vendoring yum-epel (0.5.2) to cookbooks/yum-epel$ ls
berks-cookbooks  Berksfile  Berksfile.lock  site-cookbooks
</pre>

4. nginxのRecipeを作成
<pre>
$ cat site-cookbooks/nginx/recipes/default.rb
include_recipe "yum-epel"
package "nginx" do
   action :install
end
&emsp;
service "nginx" do
   action [ :enable, :start ]
   supports :status => true, :restart => true, :reload => true
end
</pre>

5. nodeオブジェクトを作成
<pre>
$ mkdir nodes
$ cat nodes/AP-Test.json
{
    "run_list": [
        "recipe[yum-epel]",
        "recipe[nginx]"
    ]
}
</pre>

6. .chef/knife.rb編集
knife-soloが利用するテンポラリディレクトリのパスを設定
<pre>
$ cat .chef/knife.rb
cookbook_path    ["cookbooks", "site-cookbooks"]
node_path        "nodes"
role_path        "roles"
environment_path "environments"
data_bag_path    "data_bags"
\#encrypted_data_bag_secret "data_bag_key"
&emsp;
knife[:berkshelf_path] = "cookbooks"
</pre>


#リモートサーバへデプロイ実施#
1. リモートサーバへChef-clientインストール
<pre>
$ knife solo bootstrap -i ~/.ssh/usr-fugafuga.pem usr-fugafuga@remote-hogehoge
</pre>

2. デプロイ実施
<pre>
$ knife solo cook -i ~/.ssh/usr-fugafuga.pem usr-fugafuga@remote-hogehoge
Starting Chef Client, version 11.16.4
Compiling Cookbooks...
Converging 3 resources
Recipe: yum-epel::default
  \* yum_repository[epel] action create
    \* template[/etc/yum.repos.d/epel.repo] action create
      \- create new file /etc/yum.repos.d/epel.repo
      \- update content in file /etc/yum.repos.d/epel.repo from none to 39e29f
      \--- /etc/yum.repos.d/epel.repo    2014-11-25 07:06:47.378441508 +0000
      \+++ /tmp/chef-rendered-template20141125-3626-rf9pee       2014-11-25 07:06:47.383441510 +0000
      @@ -1 +1,12 @@
      +# This file was generated by Chef
      +# Do NOT modify this file by hand.
      +
      +[epel]
      +name=Extra Packages for Enterprise Linux 6 - $basearch
      +enabled=1
      +failovermethod=priority
      +gpgcheck=1
      +gpgkey=https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
      +mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
      +sslverify=true
      \- change mode from '' to '0644'
    \* execute[yum-makecache-epel] action run
      \- execute yum -q makecache --disablerepo=* --enablerepo=epel
    \* ruby_block[yum-cache-reload-epel] action create
      \- execute the ruby block yum-cache-reload-epel
    \* execute[yum-makecache-epel] action nothing (skipped due to action :nothing)
    \* ruby_block[yum-cache-reload-epel] action nothing (skipped due to action :nothing)
&emsp;
Recipe: nginx::default
  \* package[nginx] action install
    \- install version 1.0.15-10.el6 of package nginx
  \* service[nginx] action enable
    \- enable service service[nginx]
  \* service[nginx] action start
    \- start service service[nginx]
&emsp;
Running handlers:
Running handlers complete
Chef Client finished, 7/7 resources updated in 14.866675586 seconds
</pre>