VagrantとChef Soloを使った環境構築

概要
1. Chefについて
1-1. Chefでできること
1-2. Chefの構成
1-3. Chefで出てくる専門用語
1-4. Cookbookの構成要素
2. Chefのセットアップ
2-1. VagrantとChef Soloの関係
2-2. Vagrant Pluginのインストール
2-3. chef-soloのインストール
2-4. knife-soloの設定
2-5. Berkshelfのインストール
2-6. Vagrantfileの編集
2-7. vagrant provisionコマンド

1. Chefについて

1-1. Chefでできること

システム構築を自動化するためのソフトウェアツールあるいは枠組み(フレームワーク)の一種。
システムの各種設定を変更したり、アプリケーションやミドルウェアコンポーネントなどのソフトウェアをインストールしたりする作業を自動化できる。
WindowsLinuxMac OS Xなど複数のプラットフォームに対応している。

引用: Windows Insider用語解説:Windows/Linuxで使えるシステム構築・設定の自動化ツール「Chef」とは? - @IT

Chefを使うと以下のようなことができます。

  • 複数台のサーバに同時に、同一の設定を反映する
  • サーバの設定の集中管理(一元化)

VagrantでChefを使うと、

  • プロビジョニングが更に容易になる

OSのインストールから、サーバのアップデート、プログラムのインストールや設定をコマンド一発で行えるようになる。

  • 一度設定を作ってしまえば、何回でも仮想マシンの削除、作成をしてもいつも同じ設定で作成することができる(冪等性)

1-2. Chefの構成
Chefは次の2つの構成を組むことができます。

  • クライアント/サーバ型

設定ファイルをChefサーバで一元管理する方式。
管理するサーバ台数が多い場合に有効な構成。

仮想マシン一台ごとに設定を管理する方式。

f:id:eno0514:20150620235951p:plain
参照: chefでらくらくインフラ構築

Chefは次の3つの役割で構成されています。

Chef Server クライアントの管理
Chef Node Chefの管理対象
Chef Workstation 構築・管理する方法(cookbook)のコーディングの作成、更新

f:id:eno0514:20150620231931p:plain
参照: http://www.idcf.jp/blog/cloud/chef-11/

1-3. Chefで出てくる専門用語

  • Recipe(レシピ)

設定情報をひとまとめにしたもの

  • Resource(リソース)

Recipeで状態を定義するために作成された言語(DSL

  • CookBook(クックブック)

Recipeの管理単位。次の情報が含まれる。
設定ファイルを作成するための「Template
環境に応じてその値を変更できる変数を定義した「Attribute

  • Knife(ナイフ)

Chefを管理するコマンドラインツール

1-4. Cookbookの構成要素
ChefはClientの構築手順をRubyで記述します。
この構築手順書を「Cookbook」と呼びます。

Cookbookの構成要素は以下の通りとなっています。
f:id:eno0514:20150620231943p:plain
参照: http://www.idcf.jp/blog/cloud/chef-11/


2. Chefのセットアップ

作業環境
OS: MacOS X 10.9.5
VirtualBox: 4.3.22
Vagrant: 1.7.2

2-1. VagrantとChef Soloの関係
ローカルのVagrantfileがあるディレクトリと仮想マシン上の/vagrantフォルダが同期するようになっています。
f:id:eno0514:20150720024227p:plain

2-2. Vagrant Pluginのインストール
Chef Soloを使用するためには、Vagrantで作成した仮想マシン上にchef-soloがインストールされている必要があります。Vagrant仮想マシン作成時に、chef-soloを自動的にインストールするためのプラグインが用意されています。

$ vagrant plugin install vagrant-omnibus

プラグインをインストールしたら、VagrantfileにChefを自動的にインストールするための設定を行います。

$ cat Vagrantfile | grep -v '#'
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
      config.vm.box = "centos65-x86_64-20140116"
      config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"

      config.omnibus.chef_version = :latest
      config.vm.network :forwarded_port, host: 10080, guest: 80
end

2-3. chef-soloのインストール
以下のコマンドを実行し、chef-soloをインストールします。

$ sudo gem install chef -v "11.12.8"

2-4. knife-soloの設定
インストールしたら、Vagrantfileのあるディレクトリで次のコマンドを実行し、knifeのリポジトリ(cookbookやrecipeの格納先)を作成します。

$ sudu gem install knife-solo
$ knife solo init chef-repo

2-5. Berkshelfのインストール
cookbookやrecipeは一から作成する必要がありますが、汎用性のあるものをあらかじめ準備しているものを使用することもできます。Berkshelfを使うと、あらかじめ公開されているレシピを使用して、容易にChef環境を準備することができるので、今回はBerkshelfを使用します。

$ sudo gem install berkshelf

chef-repo ディレクトリ以下に「Berksfile」が存在します。
それを次のように編集します。

$ cat Berksfile
source "https://supermarket.getchef.com"
cookbook "apache2"
cookbook "yum-epel"

Apacheyum-epelのcookbookを取得することを意味します。
記述したら次のコマンドで、cookbookを取得します。

$ berks vendor cookbooks

注)
version2: berks install --path cookbooks
version3: berks vendor cookbooks
になります

2-6. Vagrantfileの編集

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
     config.vm.box = "centos65-x86_64-20140116"
     config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"

     config.vm.network :forwarded_port, host: 10080, guest: 80
     config.omnibus.chef_version = :latest
     config.vm.provision :chef_solo do |chef|
       chef.cookbooks_path = "chef-repo/cookbooks"
       chef.add_recipe "apache2"
       chef.add_recipe "yum-epel"
    end
end

2-7. vagrant provisionコマンド
すでに vagrant upで仮想マシンが動作している状態で、Vagrantfileでプロビジョニングを編集後、反映させるときに使用するコマンド。
Vagrantfileを再読み込みし、設定が反映されます。

$ vagrant provision

すでに仮想マシンが作成され、起動していない状態で Vagrantfileでプロビジョニングを編集した場合には、次のオプションで起動して設定を反映します。

$ vagrant up --provision

* Chef supermarket
Chefのcookbookが公開されており、ダウンロードすることができます。
Welcome - The resource for Chef cookbooks - Chef Supermarket

f:id:eno0514:20150620233419p:plain
参照: Welcome - The resource for Chef cookbooks - Chef Supermarket

Chef supermarketから必要なcookbookを見つけていけば、
LAMP環境も簡単に構築することができます。

以上になります。