Vagrant + Knife-solo + chef-soloでHello Chef!
前々回取り上げたVagrantと,環境構築を自動化するツールであるChef Soloを利用して,インフラのコード化にチャレンジ.
はじめに
NLPな研究室に属するサーバ管理者が,各種マシンの設定を自動化する技術を学ぶためにChefに手を出した話.
今回は,VagrantとChefを実際に動かしてみて,Hello Chef!を実行するところまでをまとめる.
なお,これら一連の手順は,下記の文献を参考にしている.
参考:入門Chef Solo – Infrastructure as Code [Kindle版]
※大変良書.この記事を読むよりも,この本を買って読む方が何倍も理解が深まる.
環境
- Virtual Box 4.2.18
- Vagrant 1.3.3
Vagrant側の設定
Cent OS 6.4上に環境を構築する.
1 2 |
|
vagrant up
コマンドを実行する前に,ネットワーク設定を編集する.
ホストOS側からゲストOSへのネットワークアクセスをアクティブにし,かつゲストOSのIPを192.168.50.12に設定する.
※仕様変更により,参考書通りに書いても動作しないので注意.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
vagrant up
で起動する.
またknife-soloというツールを利用するために,ゲストOSにsshアクセス出来るようssh-configの設定をホスト側のconfigに書き加えておく(今回は,ホスト名:helloc).
1 2 3 4 5 6 7 8 9 10 11 12 |
|
ssh helloc
して,ログイン出来たら成功である.
さらに前回紹介した,saharaも入れておくと良い.
Chef の導入
Opscodeが提供しているスクリプトを利用することで,簡単にChefを導入することができる.
1
|
|
または,gem install chef
でインストールすることも可能.
次にknife
の初期設定を行う.
knife
とは,Chefをインストールすると自動でインストールされる,レポジトリ操作用のツールである.
以下のコマンドを実行する(色々聞かれるが,全てデフォルトでOK).
1
|
|
完了すると,~/.chef/knife.rb にknife
の設定ファイルが保存される.
knife-solo の導入
通常,Chef Soloの各種設定はゲストOS側にログインした上で行われる.
しかしこれだと煩雑なので,リモートからchef-solo
を実行できる,knife-solo
を導入する.
(knife-solo
を利用しない場合に関しては,参考図書の2章と3章で説明されているので,ご一読下さい).
knife-solo
は,knife
コマンドにchef-solo
向けのコマンドを多数追加するものである.
最新版である0.3.0を導入するために,Versionを指定する.
1
|
|
knife-solo + chef-solo でHello Chef!
大まかな流れは以下の通りである.
- レポジトリの作成
- ホストに
chef-solo
をインストール - クックブックの作成
- レシピの作成
- レシピ転送 & リモート実行
レポジトリの作成
キッチンとも呼ばれる.作業用ディレクトリ.
1システム1レポジトリ程度の粒度である.
1
|
|
0.3.0からは,テンポラリディレクトリやクックブックのパスを指定するsolo.rb
の設定ファイルは生成されない.
この下をバージョン管理しておく.
1 2 3 4 |
|
ホストにchef-soloをインストール
指定したサーバにchef-solo
をインストール.
このときサーバに必要なのは,ssh & sudoできるログインアカウントだけである.
1 2 3 4 5 6 7 8 9 10 |
|
これで,nodesディレクトリ以下にhelloc.jsonファイルが作成される.
これは,Chef Solo実行時に実行するレシピ群などを記載しておくファイルである.
各ディレクトリの説明を以下に示す.
- cookbooks, site-cookbooks クックブックを格納するディレクトリ.cookbooksには第三者の作ったクックブックを,site-cookbooksには自分の作ったクックブックを入れることが推奨されている.
- nodes ノード毎のjsonファイルの格納場所.
- data_bags, roles に関しては省略.
クックブックの作成
knife
コマンドを利用して,site-cookbooksディレクトリにhelloというクックブックを作成
1
|
|
レシピの作成
knife
コマンド実行時にレシピの雛形は作成されているため,これを編集する.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Resource
と呼ばれる様々な命令を与えることで,サーバの状態を決定できる.
主なコマンドの例を以下に紹介する.
- Package
Packageの状態を記述する(インストール) - Log
Chefのログを操作する - Service
サービスを操作する(サービスの起動/停止,OSブート時に起動するサービスとして登録) - Template
設定ファイルをChefでいじる 指定されたテンプレートを展開し,設定ファイルとして利用できる
Chef Solo実行時に実行するレシピも記述しておく.
helloc.jsonを編集する.
1 2 3 4 5 |
|
レシピ転送 & リモート実行
最後に,以下のコマンドを用いてホストでchef-solo
を実行する.
1
|
|
ここで,以下のような出力がえられれば成功である.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
ここまでがおおまかな流れとなる.
簡単!素晴らしい!!