「Chef実践入門」という書籍を出します

Chef実践入門



全国1000万人の・・・からはじまるエントリでおなじみのRyuzeeさんのブログエントリで既に紹介されていますが、数日後となる5/22に「Chef実践入門 -コードによるインフラ構成の自動化-」という書籍が出ます。(5名による共著です)

Chef実戦入門

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)


本書は"実践入門"という名の通り、これからChefを触ろうとされている方から、既にChefを触っている方でよりChefを活用していきたい方まで幅広く、Chefに関しての知識を習得できる内容になっていると思います。
書籍の細かい内容に関しては、エントリの下部に細かい目次を貼り付けておきますので、是非参考にしてください。(節レベルまで記載しているので、おおまかな内容が掴めると思います)

この書籍を片手に、Cookbook開発や実際の運用の基本であったりコツみたいなものをつかんでいただければ、あとはChef社の公式ドキュメントで細かい仕様を確認して幅を広げたり、ネット上の情報をみても自然と理解・感覚がつかめてくるようになるんじゃないかと思います。


尚、僕自身が執筆したのは、第9章と第10章の主にChef Serverを使った運用部分で、基本的にはChef Serverを使うメリット/デメリットから、その基本的な利用フロー、そして大規模サービスをどのように運用しているかを事例ベースで紹介しています。
大規模サービスでの事例というのは、Chefに限らず何でもそうなのですが、大規模運用になると、多くの人が絡んだり運用上多少のゆがみが生じ、綺麗な教科書/銀の弾丸は存在しないのもあって、具体的な細かい内容が少なく感じるかもしれませんが、そこから何か設計のヒントや参考になれば幸いです。

執筆について

Ryuzeeさんがブログエントリに書いている通りですが、

5人での執筆でしたので、原稿は全てマークダウンで記述し、GitHubのプライベートレポジトリに配置し、コミットするたびに自動でPDFとepubとhtmlにビルドして、各著者のDropboxに配信するというようなことをやっていました。もちろん課題や調整もGitHubのIssueを使ってやっていた

ということで、今回はGitHub、Dropbox、CIツール(Jenkins)に大変お世話になりました。各サービス・ツールの関係者の方に深く感謝。


以前、naoyaさんがエントリに書いていた「Github を使って雑誌原稿を書く - naoyaのはてなダイアリー」が、まさにあてはまるのだけど、今回、各著者間や編集の方とのコミュニケーションは"全て"GitHubのプライベートリポジトリ上で行っていました。数名の有識者に書籍自体のレビューもしていただいていますが、それらのやり取りも全てGitHubです。
僕がこれまでに書いてきた書籍では、コミュニケーションは全てメールを使ったテキストやPDFでのやり取りだったのですが、今回メールを使うことは一度もなかったように思います。
とにかく各コミットでの差分と、ログによるhistoryがとにかく追いやすくて(変更が確認しやすくて)、チーム開発ならぬ"チーム執筆"とあえて呼んでみたけど、こういうシーンでもGitHubがかなり活用できるなと実感した次第。

目次

第1章 DevOpsの潮流とChef
  1.1 今なぜChefが注目されているのか
  1.2 Infrastructure as Code
  1.3 Chefの概要

第2章 Chef Soloによるローカル開発環境の自動構築
  2.1 Chef Soloとは
  2.2 検証環境を構築する
  2.3 Chef Soloをインストールする
  2.4 Chefを動かしてみる
  2.5 Chef Soloでパッケージをインストールする
  2.6 knife-soloでchef-soloをリモート実行する
  2.7 Chef SoloでApache、MySQLをセットアップする
  2.8 Chefリポジトリの扱い
  2.9 Vagrant以外のサーバへChefを実行する
  2.10 Chefの考え方

第3章 レシピの書き方
  3.1 リソースとは
  3.2 td-agentのレシピを読む
  3.3 主要なリソースの解説
  3.4 そのほかのリソース
  3.5 AttributeとData Bag
  3.6 クックブックのディレクトリレイアウト

第4章 クックブックの活用
  4.1 コミュニティクックブックを利用する
  4.2 Chef Soloで複数ノードを管理する

第5章 Vagrantによるクックブック開発環境の構築
  5.1 Vagrantから直接クックブックを適用する
  5.2 Saharaを使って何度もクックブック適用を試す
  5.3 Packerで開発環境用のboxを作成する
  5.4 変更を加えたboxを配布する
  5.5 VagrantでVMware Fusionを利用する
  5.6 VagrantでAmazon EC2を利用する

第6章 アプリケーション実行環境の自動構築
  6.1 PHP環境を構築する
  6.2 Ruby環境を構築する
  6.3 MySQLを構築する
  6.4 Fluentdを構築する

第7章 テスト駆動インフラ構築
  7.1 インフラ構築用のコードにテストを用意する意味
  7.2 Test Kitchenによるテスト
  7.3 継続的インテグレーション

第8章 Chefをより活用するための注意点
  8.1 Chefユーザの共通の悩み
  8.2 共通の悩みを解消する基本的な方針
  8.3 レシピの書き方の注意点
  8.4 Chefをデプロイツールとして使う際の問題点
  8.5 大きくなったクックブックを分割する
  8.6 クックブックと実際の環境の食い違い
  8.7 クックブックの依存関係を管理する
  8.8 Chefのレシピが実行されるまでのサイクル
  8.9 Chefを拡張する

第9章 Chef Serverによる本番環境の構築と運用
  9.1 Chef Serverを利用するメリット
  9.2 Chef Serverをセットアップする
  9.3 knifeコマンドを利用したオペレーション
  9.4 Chef Serverを使った運用フロー

第10章 Chef Serverによる大規模システムの構築と運用
  10.1 Chefを使って大量サーバへ一括適用する
  10.2 大量物理サーバへ迅速にセットアップする
  10.3 Ohaiでマシンの情報を収集して活用する
  10.4 複数メンバーでレシピ開発する際のリポジトリ運用
  10.5 Chefを活用して監視の自動設定を行う

Appendix A コマンドチートシート
  A.1 knifeコマンド
  A.2 chef-soloコマンドのオプション
  A.3 Ohaiで取得できる項目の例

Appendix B クックブックチートシート
  B.1 各リソース共通の機能
  B.2 リソース
  B.3 Recipe DSL
  B.4 Windows向けDSL
  B.5 Chef社がメンテナンスするクックブック


Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)