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 | |
ここまでがおおまかな流れとなる.
簡単!素晴らしい!!