伊藤直也さんがChef Soloの本を書かれたということで早速購入してみました。最近流行りのAmazon Kindle ダイレクト・パブリッシング(KDP)を使って出版されてます。
Chefは結構巨大な仕掛けになっており、はじめて取り組む人はどこから手をつけて良いのか分かりにくかったりします。日本語のリソースは今まではSoftware Designで並河さんらが書いた特集くらいだったと思いますし、色々やろうとするとopscodeのサイトの膨大なリファレンスを読まないといけない状況でした。 この本では、Chefの基本を、Chef Soloを使ったやり方を通じて、平易な日本語で説明しており、とっかかりとして非常に良い本です。簡潔にまとまっているのでとりあえず通読するなら1時間くらいでしょう。書いてある内容は、VagrantやAWSを使えば簡単に試すことが出来ます(オンプレじゃこうはいかない)。僕もよくやるのですが、Vagrantでsaharaを使って何度もプロビジョニングとロールバックを繰り返して実験できます。
伊藤さんのサイトから目次を引用して紹介します。
#0 はじめに
#1 Chef とは何かを知りたい ─ Chef Overview
#2 Chef Solo をインストールして試したい ─ Hello Chef!
#3 nginx を Chef Solo で立ち上げたい
#4 Chef Soloの試験環境を3分で用意する ─ Vagrant
#5 リモートから chef-solo を実行する ─ knife-solo
#6 レシピを作って実行する流れをおさらいしたい
#7 サードパーティの Chef クックブックを使いたい
#8 代表的なレシピのサンプルを見たい ─ td-agent のレシピを読む
#9 パッケージをインストールする ─ Package
#10 サービスを起動したい ─ Service と Notification
#11 テンプレートから設定ファイルを配置したい ─ Template
#12 ファイルやディレクトリを扱いたい ─ Cookbook File, Directory
#13 ユーザーを作成したい ─ User, Group
#14 git レポジトリからファイルを取ってくる ─ Git
#15 任意のシェルスクリプトを実行したい ─ Execute, Script
#16 その他の Resource
#17 レシピ落ち穂拾い ─ run_list, ファイル分け, include_recipe
#18 Resource を自分で定義したい ─ Definition
#19 Attribute と Data Bags
#20 ノードを役割ごとにグルーピングして管理したい ─ Role
#21 サードパーティのクックブックを Bundler 風に管理したい ─ Berkshelf
#22 Chef Server の様子を知りたい - 概要からセットアップまで
#23 どこまでを Chef でやるべきか
おわりに
ちなみに、いくつか気づいたことというか要望というか。
あと、
package "tar" do
action :install
source "/tmp/tar-1.16.1-1.rpm"
provider Chef::Provider::Package::Rpm
end
みたいに、一時領域の/tmpのパスがベタ書きされている箇所が何箇所かありますが、/tmpは処理系によっては再起動時にクリーンアップされてしまう可能性があるので、#{Chef::Config[:filecachepath]}を使って書き換えた方が良いと思います。この手の話はremote_fileを使って外部からファイルを持ってきてどこかに置く場合にも当てはまります。
package "tar" do
action :install
source "#{Chef::Config[:file_cache_path]}/tar-1.16.1-1.rpm"
provider Chef::Provider::Package::Rpm
end
追記。英語でChefの初歩を説明した本が出ています。こちらは598円。英語が苦にならない人はこちらも参照すると良いでしょう。
目次だけ参考までに野良翻訳して紹介します。
* Chefの簡単な始め方
* Chefってなに?
* 複数サーバ管理
* ユースケース 複数タイヤーにまたがるアプリケーションのためのインフラの管理
* コンセプトと用語
* コンポーネント
* 基本的な用語
* 目の前の問題に立ち戻る
* ロールの定義
* ノードの定義
* environmentの定義
* まとめ
* インストール
* Chefをインストールする
* インストール方法
* debian系ディストリビューションへのインストール
* OpscodeのレポジトリをAPTのソースに追加する
* GnuPGのキーを追加する
* APTレポジトリを更新する
* Chef Serverをインストールする
* 手動インストール
* RubyとRubygemsのインストール
* gemを使ってChefをインストールする
* CouchDBとRabbitMQをインストールする
* Chef Serverのコンポーネントをインストールする
* 設定ファイルを設定する
* Chefのサービスを起動する
* インストール結果を確認する
* knifeの設定
* knifeの設定を確認する
* クイックスタート
* Chefをつかって始める
* サーバを起動する
* プロセスはどのように動作するか
* 起動スクリプトを検査する
* 起動する
* 登録情報を確認する
* knife経由で確認する
* Web画面経由で確認する
* cookbookのダウンロードとインストール
* knifeをつかってopscodeのcookbookを取得する
* cookbookのインストール
* cookbookのアップロード
* アップロードの確認
* 依存性のあるものをダウンロードする
* ロールの作成
* ロールの設定
* 新たなロールを作成する
* ノードにロールを適用する
* runlistを確認する
* 設定を適用する
* 動作の確認
* 知っておくべき主な機能
* Chefについてより詳しく知る
* 自分でレシピやcookbookを作成する
* cookbookの内容
* cookbookのファイル構成
* レシピ
* メタデータ
* アトリビュート
* 読み込みの順番
* アトリビュートの使用
* テンプレート
* テンプレートファイルのフォーマット
* ERBの基礎
* テンプレートリソース
* テンプレート変数
* テンプレートの保存場所
* リソース
* リソースの利用
* 基本的なレシピを書いてみる
* Chefのもっとも基本的なツールであるknifeについて知る
* コマンド
* サーバをブートストラップする
* データの閲覧と操作
* ノードとロールの管理
* 既存データの編集
* 新しいエンティティの作成
* 1コマンドで複数サーバにデプロイする
* Chefのsearchクエリー
* マルチSSHセッション
* databugを使った一歩進んだデータ管理
* databugとはなにか?
* 構造
* レシピ内での利用
* データへのアクセス
* サンプルレシピ
* databugの検索
* まとめ