Chefの概要と基本的な使い方
chefとは
Chef is "Infrastructure as Code".
インフラの構成をコードで管理するためのフレームワーク
コマンドを実行するだけでセットアップの際に同様の環境を構築することができる
公式サイト: http://www.getchef.com/chef/
チュートリアル: https://learnchef.opscode.com/ 動画の説明が丁寧でとってもわかりやすい
大事な用語とその意味
用語 | 意味 |
---|---|
Workstation | cookbookを作成するknifeコマンドの実行, 作業サーバ |
Chef Server | chefの設定やcookbookを保存やノードに設定を反映させるなどchef全体を管理するサーバ |
Node | chef管理下に置かれているサーバ。ここに環境が構築される。仮想,物理サーバやクラウドのインスタンスなどが該当 |
Cookbook | サーバ構築のためのパッケージ。ファイル、テンプレート、ライブラリなどが含まれる |
Recipe | サーバ構築の流れを記述したファイル。Cookbookを構成する要素の一つ。複数のResourceと呼ばれる命令で構成される |
knife | workstationとchefサーバ間のインターフェースを提供するコマンドラインツール |
1つのアプリケーションに対して1つのcookbookを作るのが一般的
サーバに反映させるまでの流れ
今回はstand-aloneモードで実行するため、chefサーバの構築は省略
- workstationへの各種インストールと設定
- Nodeの設定
- cookbookの作成
- Nodeへの反映
workstationへの各種インストールと設定
chefのインストール(MacOSの場合)
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
インストールしたらすごいたくさん「......」がでた
knife-soloプラグインのインストール
$ sudo gem install knife-solo
knifeコマンドの設定
$ knife configure
nodeの名前やchefサーバのURLなどを設定できるが、とりあえずはデフォルトの設定にした
Nodeの設定
今回はNodeにはVagrantを使用 http://www.vagrantup.com/
Vagrantファイルの作成
$ mkir vagrant $ cd vagrant $ vagrant init centos64
インスタンスを起動
$ vagrant up
ログイン簡略化のため、sshの設定に追記
$ vagrant ssh-config --host hoge >> ~/.ssh/config
cookbookの作成
ワークステーション上のvagrantディレクトリと同じ階層にchef用のリポジトリ作成した
$ knife solo init chef $ tree chef . ├── cookbooks ├── data_bags ├── environments ├── nodes │ └── hoge.json ├── roles └── site-cookbooks
site-cookbooksディレクトリの中でcookbookを作っていくことになる
Nodeにchefをインストール。chefリポジトリ内で実行。hogeには仮想マシンを指定する。user@hostという感じ
$ cd chef $ knife solo prepare hoge
cookbookを作る。「hello」というcookbook名とする
$ knife cookbook create hello -o site-cookbooks/ $ tree site-cookbooks/ site-cookbooks/ └── hello ├── CHANGELOG.md ├── README.md ├── attributes ├── definitions ├── files │ └── default ├── libraries ├── metadata.rb ├── providers ├── recipes │ └── default.rb ├── resources └── templates └── default 11 directories, 4 files
recipesディレクトリのdefault.rbを編集
nodeのhoge.jsonで、nodeで使用するrecipeを指定。
{ "run_list":[ "recipe[hello]" ] }
recipeの作成
recipeには実行したいresourceを実行したい順番に記述していく。resourceの書き方については公式サイトに説明がある。
http://docs.opscode.com/chef/resources.html
resourceのフォーマットは以下のようになっている
<type> <name> do <attribute>(one or more) <action>(one or more) end
簡単に言うと、typeは実行したいresouceの種類、nameは何に対して実行したいか、attributeはデフォルト変数、actionは何を実行したいか
recipeの例
package "vim-enhanced" do action :install end # service iptables stop # chk config iptables off service "iptables" do action [:stop, :disable] end # php mysql-server httpd %w{php mysql-server httpd}.each do |p| package p do action :install end end service "httpd" do action [:start, :enable] end
Nodeへの反映
Nodeに反映させるコマンドを実行。cookbookの設定にエラーが無ければ成功して反映される
$ knife solo cook hoge Running Chef on hoge... Checking Chef version... Uploading the kitchen... Generating solo config... Running Chef... Starting Chef Client, version 11.10.0 Compiling Cookbooks... Converging 1 resources Recipe: hello::default * log[hello] action write Running handlers: Running handlers complete Chef Client finished, 1/1 resources updated in 0.918818871 seconds
ここまでがcookbookをnodeに反映させるための簡単な流れとなる
参考
特集 DevOps時代の必須知識:インフラストラクチャ自動化フレームワーク「Chef」の基本 - @IT http://www.atmarkit.co.jp/ait/articles/1305/24/news003.html
Chef入門 (全14回) - プログラミングならドットインストール http://dotinstall.com/lessons/basic_chef