4/25にインフラ環境の構築や構成管理の自動化ツールである「Chef」に関する書籍「Chef活用ガイド」が発売されました。私もこのTech-SketchでChefの記事( 【Chef】Custom LWRPsで独自のResourceを作る方法 )を書いていたこともあり、とても興味があったので読んでみたいと思っていたところ、なんと書籍の監修であるクリエーションライン株式会社様より書籍を頂きました!このようなとても嬉しいサプライズをありがとうございます。僭越ながら書籍の紹介と共に読んだ感想を少し書かせて頂こうと思います。
「Chef活用ガイド」とはどんな本か
この「Chef活用ガイド」を手にとった方は誰もがこう思うでしょう。「重いっ!」「分厚いっ!」総ページ数はなんと671ページもあります。ページ数を見るだけでも濃い内容だということが伺えますが、実際に読んでみると、Chefの概要や理念やアーキテクチャ、出てくる用語や基本的な使い方から実践的な使い方、各パラメータやコマンドのオプションの解説など、とても一言では言い切れないようなChefに関する様々な内容が事細かに書かれています。この本の内容をすべて把握出来ればChefの達人になれると言っても過言ではないと感じました。
なお、書籍は以下のサイトで紹介・販売されています。
「Chef活用ガイド」の概要
この書籍は2部+付録で構成されています。書籍の目次を以下に記載します。
第1部 Chefってなに? 第1章 Chefの概要 第2章 Chefの利用形態 第3章 Ohai 第4章 Chef-Server 第5章 Chef-Client 第6章 Workstation 第2部 もっと詳しく 第7章 Search API 第8章 Data Bag 第9章 Environment 第10章 Role 第11章 Cookbookの基本 第12章 他のCookbookコンポーネント 第13章 Lightweight Resources and Providers(LWRP) 第14章 テスト 第15章 Cookbookの管理ツール 第16章 Chefの運用 付録A Chef-ClientのEventDispatcherイベント一覧 付録B Chef公式LWRP 付録C ResourcesとProvidersの一覧 付録D IaaS系Knifeプラグイン
第1部 Chefってなに?
第1部ではChefの概要や利用形態、主要なコンポーネントなどについて書かれています。Chef-Serverを使ったことがある人が目次を見れば、どのような話をしているのか想像出来るかと思います。しかし、もしChef-Serverを使ったことがある人でも第1部の内容は読み飛ばさないことをおすすめします。冒頭で述べたとおり、Chefに関する様々な内容について深く書かれているため、第1部を読むことでChef-Serverを使った運用を改善するヒントなど、何かしらのプラス要素となるものが必ず得られると思います。もちろん、Chefを使ったことがない人が読めば、Chefについて体系的に知ることが出来るでしょう。また、Chef-Serverの使い方だけでなく、Chef-ServerとChef-Soloを比較してどちらをどのような場面で使うべきか、といった内容についても言及されているので、Chef-Serverを使ったことがない人でも導入するための検討材料にもなります。
第2部 もっと詳しく
第2部ではChefのコンポーネントについて更に深く書かれています。特にChefの根幹となるCookbookについては第11章、第12章と2章にわたって書かれています。またChefを使う方法だけでなく、Cookbookに対するテストや Travis CI を使って継続的インテグレーションを実践する方法、作成したCookbookを管理するための方法やツールの紹介、実際にChefを使って運用するためのノウハウやChefの導入事例など、多岐にわたった内容が書かれています。第2部を読むことで実際の現場でChefを使うイメージをつかむことが出来るかと思います。
付録
冒頭で総ページ数が671ページあると記載しましたが、第2部は449ページで終わっています。そうです、この書籍は付録が200ページ超書かれています。付録の中でも「付録B Chef公式LWRP」と「付録C ResourcesとProvidersの一覧」がページ数の大半を占めています。これらは Chef社が公式に保守しているCookbook に付属されているLWRPや Chef公式ドキュメントに記載 されているResourceやProviderの内容に関する日本語訳となっています。英語が苦手な人が参考にしたり、公式ドキュメントを体系的に把握するのに役立つでしょう。
「Chef活用ガイド」を読んで思ったこと
この書籍を読んでいると気づくと思いますが、Chef用語以外に2つのキーワードが頻出します。それは「Infrastructure as Code」と「収束(コンバージェンス)」です。「Infrastructure as Code」とはこの書籍の表紙にも記載してあるくらい重要な概念です。一部、書籍から言葉を抜粋します。
Chefと"Infrastructure as Code"という概念は、ノウハウをコードに作り変えて資産として再利用するという意識を推し進めてくれることでしょう。あなたの仕事やノウハウを、そのままコードに変え、それらがプログラムであるという特性を活かして広く展開することができるようになります。
Recipeには「このようになっているべき」という内容を記述し、Chefの実行によってサーバの設定を調整、つまりあるべき状態に収束させるのです。
このようにChefを使えばサーバをコードで表現した状態に設定することで、必ずコードが正しい状態となります。Chefに限らず、昨今はInfrastructure as Codeを実践したインフラ環境の構築や構成管理の自動化が加速していっています。そんな中、この書籍を読むことでChefについて体系的に理解することができるため、Chefを使った自動化の流れを更に加速させてくれるのではないでしょうか。なお、「Infrastructure as Code」については書籍内でも数ページにわたって解説されているので、興味がある方は是非書籍を手にとってご覧下さい。
この書籍の使い方のおすすめ
前述しましたが、この書籍では各パラメータやコマンドのオプションについても詳細に説明されています。第1部と第2部についてひと通り目を通したあとは手を動かして実践しながら、躓いたり、不明点があった場合などに書籍を引っ張りだして、リファレンスとして使うと有効活用出来るように思います。
ただし、注意事項としてはChefは今後も継続して開発されていくということです。付録の和訳は2013年9月時点のChef公式ドキュメントのものであり、開発が進むにつれて仕様が変わってしまう可能性があります。リファレンスとして使う場合はこのことを意識した方がよいでしょう。
各章の概要
最後に各章について簡単に概要をまとめます。何度も記載していますが、とても内容が濃いので全ては紹介しきれません。書籍を読むきっかけになればと思います。
第1部 Chefってなに?
第1章 Chefの概要
この章では、Chefの概要と共に、なぜChefを使う必要があるのか、といったことについて書かれています。この章で「設定の収束」や「Infrastructure as Code」の概念、Chefとの関係性について記載されています。この章を読むことで、Chefを使ってInfrastructure as Codeを実践する意義を理解することが出来るでしょう。
第2章 Chefの利用形態
ChefにはChef-Serverを使い、クライアントサーバ形式で運用する形態とChef-Soloを使い、サーバ単体で利用する形態の2通りの使い方があります。第2章ではそれぞれの形態をどのような場面で使うべきか、といったことについて記載されています。また、Infrastructure as CodeをChefで実践する上で重要なChef-Repoの運用管理方法に関して記載されています。
第3章 Ohai
第3章ではChefにとって重要なツールであるOhaiについて書かれています。ChefではOhaiが収集する様々なサーバの状態に関する情報を利用してサーバの状態を収束させます。この章ではOhaiの使い方に加え、独自にOhaiのプラグインを開発する方法について記載されています。
第4章 Chef-Server
Chef-ServerにはOSSのChef-Serverと商用版であるEnterprise Chefの2種類が提供されています。この書籍では基本的にはOSS版のChef-Serverについて解説されているため、書籍の内容を実践する場合にEnterprise Chefを購入する必要はありません。この章ではChef-Serverの導入方法やアーキテクチャ、各種設定項目などについて記載されています。
第5章 Chef-Client
第5章ではNode(Chefで管理する対象のサーバ)の状態を収束させる役割を担う、Chef-Clientについて記載されています。Chef-Clientの導入方法や動作の流れ、設定項目や実行方法、拡張やカスタマイズの方法まで解説されています。
第6章 Workstation
第6章ではChef-Serverを利用する際の作業端末となるWorkstationについて記載されています。Workstationを利用する上ではknifeコマンドが重要となるため、knifeコマンドに関する説明が中心となっています。その他、Workstationの導入や設定や利用方法、Workstationを使った運用ワークフロー、knifeコマンドの拡張方法や独自のプラグインを作成する方法まで記載されています。
第2部 もっと詳しく
第1部を読むだけでChef-Serverを使った実践方法についてある程度理解することが出来ます。第2部ではChefについて更に詳細に解説されています。
第7章 Search API
Chef-Serverでは様々な情報を管理しています。Chef-Serverでは管理している情報を検索するためにSearch APIを備えています。第7章ではSearch APIを用いてどのように情報を検索すればよいか、といったことについて記載されています。
第8章 Data Bag
状況によってはChefで重要なデータ(DBのパスワードやサーバへの認証キーなど)を管理する必要があります。そのような場合には暗号化したData Bagを使用します。この章ではData Bagの使い方について詳細に記載されています。
第9章 Environment
第9章では"環境"特有(開発環境/テスト環境/本番環境など)の設定をすることが出来る、Environmentについて、定義したパラメータがどこで反映され、最終的にはどのパラメータが有効になるか、といった内容が記載されています。
第10章 Role
第10章ではChefで実行する対象を定義することが可能なRoleについて、設定可能なパラメータの説明や取り扱い時の注意事項などの内容が記載されています。
第11章 Cookbookの基本
第11章、第12章では多機能なCookbookについて記載されています。中でも第11章ではCookbookのコンパイル順序やRecipeの記述方法、ResourceやProviderの使い方、Attributeの記述方法などについて詳細に解説されています。
第12章 他のCookbookコンポーネント
第12章は引き続きCookbookに関する解説が記載されています。この章ではMetadataの使い方、CookbookのVersionの記述方法、fileリソースやtemplateリソースの使い方、Libraryの使い方、Definitionの使い方について解説されています。11,12章を読むことでCookbookの使い方は理解出来るでしょう。
第13章 Lightweight Resources and Providers(LWRP)
第13章では独自のリソースを定義することが出来る、LWRPについて記載されています。LWRPの定義方法や定義サンプルなどが解説されています。なお、Tech-Sketchでも過去の記事に LWRPの作成方法に関する記事 を書いているので、合わせて読んでみてください。
第14章 テスト
第14章ではInfrastructure as Codeを実践する最大のメリットとなるテストについて記載されています。Chefのテストは様々なやり方があると思いますが、この章ではfoodcriticコマンドを使ったスタイルチェック方法、knife cookbook testコマンドやChefSpecやtest-kitchenを使ったテスト方法、Travis CIを使った継続的インテグレーション方法などについて解説されています。
第15章 Cookbookの管理ツール
第15章ではCookbookが増えてきた際に効率よく管理できるツールについて紹介されています。紹介されているツールはBerkshelf、Librarian-Chefです。また、Cookbook管理のアンチパターンについても記載されているので、参考になります。
第16章 Chefの運用
最後の章である第16章ではこれまでに紹介してきたChefを具体的に実践に導入するにはどうすればよいか、といった内容について記載されています。また、これまではOSS版のChef-Serverについて解説していましたが、この章ではEnterprise ChefについてOSS版にはない機能を解説しています。更に、Chefを実際の運用に取り入れているFacebookなどの事例紹介が記載されています。
おわりに
この記事の中で、Chefに関する用語が多数出てきますが、あまり解説はしていません。もしChefの用語がわからず、理解出来ないことがあれば、何も考えずにまずは「Chef活用ガイド」の書籍購入ボタンをポチり、本記事でわからなかった用語などについて、書籍で調べてみてはいかがでしょうか。購入する前のアドバイスとしては、書籍がとても重いので、持ち運びたい派の人は電子書籍を購入することをおすすめします。
最後に、このような素晴らしい書籍を執筆してくださった筆者の方々、及び監修であるクリエーションライン株式会社の方々には大変感謝します。また、書籍を提供してくださったクリエーションライン株式会社様、本当にありがとうございました。