Chef活用ガイド コードではじめる構成管理
4,290円 (3,900円+税)
関連サイト
本書の関連ページが用意されています。
内容紹介
"Infrastructure as Code"の世界へようこそ。本書は、Chef社の公式ドキュメントを基に、Chefによるシステム運用経験、Chefのソースコードの解析と検証による仕様の詳解、Chefの用法・用例を加えて再構築したものです。
本書を読み始めるにあたって、あなたにお願いが2つあります。
まず1つ、Chefがあらゆる問題を解決してくれる銀の弾丸であると思ったことがあるなら、そして、そのうえでChefを導入しようとしたことがあるなら、いったんすべて忘れましょう。
もう1つ、あなたがコンピュータシステムのインフラに関わるエンジニアだと仮定して、あなたの組織に存在するワークフローをしっかりと念頭に置いてください。それには情報資産の棚卸しや、コンピュータシステムの構築といった、あなたが直接関わる部分だけではなく、アプリケーションの開発、サービスのリリースや広告・宣伝など、企業の体裁としてビジネスに関わる部分すべてが対象です。組織のワークフローを洗い出してみると、人力で作業しているために効率が上がっていない部分に気がつくことでしょう。
さて、ワークフローの中で人が行う作業は必ず一定のルールに従っており、それらはノウハウとして蓄積されています。その中で、コンピュータの作業端末から人力で行っていたほとんどの作業は、Chefに任せることができます。ただし、Chefは人に何かを強制するようには作られていませんから、Chefに既存のタスクを任せればワークフローが改善するということはありません。その代わり、既存のワークフローを崩さずに、その中の工程を効率化するためのたくさんの機能を備えています。
あなたの仕事を完全に奪ってしまうほどの機能をChefは持っていません。しかし、Chefと"Infrastructure as Code"という概念は、ノウハウをコードに作り変えて資産として再利用するという意識を推し進めてくれることでしょう。あなたの仕事やノウハウを、そのままコードに変え、それらがプログラムであるという特性を活かして広く展開することができるようになります。
Chefは、インフラの情報を集約して検索可能な状態にしますが、それをだれがどのように扱うかまでは決めていません。そして、インフラを構成するコードが有用であるかどうかもChefは自ら判断しません。
Chefが組織に何をもたらすのかではなく、あなたはChefで組織に何をもたらしたいのか。決定権は、あなたにあります。
本書が、あなたの組織の効率改善の一助となれば幸いです。
(「はじめに」より)
書誌情報
- 著者: 澤登亨彦, 樋口大輔, クリエーションライン株式会社(監修)
- 発行日: 2014-04-28 (紙書籍版発行日: 2014-04-28)
- 最終更新日: 2014-04-28
- バージョン: 1.0.0
- ページ数: 673ページ(A4PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: KADOKAWA/アスキー・メディアワークス
対象読者
Chefを使っている方、Chefの利用を検討している方
著者について
澤登亨彦
HiganWorks合同会社業務執行社員。SEとしてWindowsネットワークのサポート、Windowsサーバとオープンソース系のネットワーク・サーバエンジニアを経て、インターネットサービスの構築・デリバリーと運用自動化の支援をテーマに独立。Chefに関する活動は、本家プロダクトへのコントリビュート、日本のコミュニティChef meetup Kansaiの主催などがある。
樋口大輔
クリエーションライン株式会社シニアエンジニア。Linuxデスクトップ環境やホスティングサービスの開発・運用・調査業務を経て現職。Chef Approved Contributorとしてbusser-serverspecやknife-sakuraの開発、公式ドキュメントの修正に携わる。プライベートではDebian Project Official Developerとしてuimやmikutterのパッケージングを担当している。
クリエーションライン株式会社
2006年1月設立。クラウド基盤の設計・構築に関して数多くの実績を有しており、国内外の大手通信事業者、データセンター事業者、ゲーム会社などに対して、高度なクラウドインテグレーションサービスを提供する技術者集団。
目次
はじめに
本書の構成
- 参考情報
第1部 Chefってなに?
第1章 Chefの概要
- 1.1 Chefとは
- 1.1.1 構成管理と情報の集約
- 1.1.2 コンフィグレーション
- 1.1.3 Resource
- 1.1.4 設定の収束(コンバージェンス)
- 1.1.5 Infrastructure as Codeに向けて
- 1.2 Chefの背景とInfrastructure as Codeの概念
- 1.2.1 Chef社のChief Dev Officerが提唱する10の原則
- 1.2.2 Infrastructure as Codeへの取り組みが含むリスクと次善策
第2章 Chefの利用形態
- 2.1 Chef-Server/Client構成
- 2.1.1 Chef-Server
- 2.1.2 Node
- 2.1.3 Workstation
- 2.2 Chef-Solo
- 2.3 どちらの構成を採用するか
- 2.3.1 Chef-Server/Clientに対する誤解
- 2.3.2 Chef-Server/Clientの実際
- 2.3.3 改めて、どちらの構成を採用するか
- 2.4 Chefの機能要素
- 2.4.1 環境系オブジェクト
- 2.4.2 設定系オブジェクト
- 2.4.3 認証系オブジェクト
- 2.4.4 Node Attribute
- 2.5 Chef-Repo
- 2.5.1 Chef-Repoのディレクトリ構造
- 2.5.2 Chef-Repoの運用管理
- 2.5.3 一歩進んだCookbookの管理
第3章 Ohai
- 3.1 Ohai概要
- 3.2 Ohaiが収集するNode Attribute
- 3.2.1 コマンドラインツールohai
- 3.2.2 Ohaiによるデータ収集の段取り
- 3.3 Ohaiの活用
- 3.3.1 ヒント機能
- 3.3.2 カスタムプラグインの開発
- 3.4 Ohaiリファレンス
- 3.4.1 Ohai::Config
- 3.4.2 プラグインで利用できるDSL
第4章 Chef-Server
- 4.1 Chef-Serverの種類
- 4.1.1 Open Source Chef
- 4.1.2 Enterprise Chef
- 4.2 Chef-Serverのコンポーネント
- 4.3 Chef-Serverの導入
- 4.3.1 Open Source Chef
- 4.3.2 ホステッドサービス版Enterprise Chef
- 4.3.3 オンプレミス版Enterprise Chef
- 4.4 Chef-Serverの設定
- 4.4.1 Chef-Server設定関連ファイル
- 4.4.2 Chef-Serverデータディレクトリ
- 4.4.3 chef-server-ctlコマンド
- 4.4.4 chef-server.rb
第5章 Chef-Client
- 5.1 Chef-Clientとは
- 5.2 Chef-Client主要オブジェクト解説
- 5.3 Chef-Clientの動作の流れ
- 5.3.1 ローカル事前準備
- 5.3.2 Node Objectとコンテキストのビルド
- 5.3.3 Chef::RunContextの作成
- 5.3.4 Node Attributeの再構築(Reset node attributes)
- 5.3.5 収束(converge)
- 5.3.6 終了処理
- 5.4 Chef-Clientの導入
- 5.4.1 Chef Installerによるインストール
- 5.4.2 Bundlerによるインストール
- 5.4.3 knife bootstrapによるインストール
- 5.5 Chef-Clientの設定
- 5.5.1 概要
- 5.5.2 設定一覧
- 5.5.3 chef-clientコマンドラインのオプション
- 5.6 Chef-Clientの実行
- 5.6.1 chef-clientコマンド
- 5.6.2 chef-shellコマンド
- 5.6.3 chef-applyコマンド
- 5.7 Chef-Clientの機能を拡張する
- 5.7.1 ハンドラ(Chef::Handler)
- 5.7.2 独自ハンドラの作成
- 5.8 イベントディスパッチャ(Chef::EventDispatcher)
- 5.8.1 イベントディスパッチャの設定
- 5.8.2 イベントディスパッチャを設置する場所
- 5.8.3 イベントディスパッチャの作成
- 5.9 LogLocationを任意のLoggerに変更する
第6章 Workstation
- 6.1 WorkstationとKnife
- 6.2 Knifeの役割
- 6.3 Knifeのセットアップ
- 6.4 Knifeの設定
- 6.4.1 概要
- 6.4.2 設定一覧
- 6.5 knifeコマンドラインの共通オプション
- 6.6 knifeサブコマンド
- 6.6.1 knife helpサブコマンドと--helpオプション
- 6.7 Knifeの基本操作
- 6.7.1 オブジェクト名のサブコマンド
- 6.7.2 動詞のサブコマンド
- 6.7.3 検索結果を利用するサブコマンド
- 6.7.4 Cookbook管理のサブコマンド
- 6.7.5 その他のサブコマンド
- 6.8 Knifeを使ったワークフロー
- 6.8.1 Knifeサブコマンドの使い分け
- 6.8.2 作業前の準備
- 6.8.3 Chef-Serverに新規オブジェクトを登録する
- 6.8.4 Chef-Server上の既存オブジェクトを編集する
- 6.9 WorkstationからNodeを管理する
- 6.9.1 Nodeの状態を確認する
- 6.9.2 Nodeのrun_listを編集する
- 6.9.3 sshサブコマンドでリモートコマンドを実行する
- 6.9.4 NodeでChef-Clientを実行する
- 6.9.5 ブートストラップで新規NodeをChef-Serverに登録する
- 6.9.6 ブートストラップ時から継続的にChef-Clientを実行する
- 6.10 Knifeの拡張
- 6.10.1 Knifeプラグイン
- 6.10.2 Knifeプラグインを追加する
- 6.11 独自のKnifeプラグインを作成する
- 6.11.1 Knifeプラグインのロード
- 6.11.2 独自プラグインの作成
- 6.11.3 独自のコマンドラインオプションを追加する
- 6.11.4 必要なライブラリを読み込む
- ここまでのまとめ
第2部 もっと詳しく
第7章 Search API
- 7.1 問い合わせ書式
- 7.2 検索対象オブジェクト
- 7.2.1 Environment
- 7.2.2 Role
- 7.2.3 Data Bag
- 7.2.4 Client
- 7.2.5 Node Object
- 7.3 問い合わせキー
- 7.3.1 入れ子になったキーを使用する
- 7.4 問い合わせパターン
- 7.4.1 完全一致検索
- 7.4.2 ワイルドカード検索
- 7.4.3 範囲検索
- 7.4.4 あいまい検索
- 7.5 論理演算子
- 7.5.1 AND
- 7.5.2 OR
- 7.5.3 NOT
- 7.6 特殊文字の取り扱い
- 7.7 Partial Search
第8章 Data Bag
- 8.1 Data Bagの構成
- 8.2 Data Bagの作成
- 8.2.1 KnifeでData Bagを作成する
- 8.3 暗号化Data Bag
- 8.3.1 暗号のバージョン
- 8.3.2 Knifeオプション
- 8.3.3 共通鍵を作成する
- 8.3.4 暗号化されたData Bag Itemを作成する
- 8.3.5 暗号化されたData Bag Itemの値を復号する
- 8.4 Data Bagの利用
- 8.4.1 Searchを使用する
- 8.4.2 Recipe DSLを使用する
- 8.4.3 Knife以外のChef-ClientによるData Bagの作成と変更
- 8.4.4 Environmentごとの固有データをData Bagで表現する
- 8.4.5 Data Bagの命名
第9章 Environment
- 9.1 Environmentの構成と基本要素
- 9.2 要素の詳細と記述例
- 9.2.1 name
- 9.2.2 description
- 9.2.3 cookbook_versions
- 9.2.4 default_attributes
- 9.2.5 override_attributes
- 9.2.6 Chef-Server上のJSONオブジェクトで使用される要素
- 9.3 Environment _defaultについて
- 9.4 EnvironmentをNodeに適用する
- 9.4.1 NodeのChef-Client設定を利用する
- 9.4.2 Knifeを利用する
第10章 Role
- 10.1 Roleの構成と基本要素
- 10.2 要素の詳細と記述例
- 10.2.1 name
- 10.2.2 description
- 10.2.3 default_attributes
- 10.2.4 override_attributes
- 10.2.5 run_list
- 10.2.6 env_run_lists
- 10.3 RoleをNodeに適用する
- 10.3.1 Role適用時の注意
- 10.3.2 Role削除時の注意
第11章 Cookbookの基本
- 11.1 Cookbookとは
- 11.2 Cookbookの基本要素一覧
- 11.3 Cookbook要素の読み込み順序
- 11.4 Recipe
- 11.4.1 Resource Attribute
- 11.4.2 RecipeでResourceを定義する
- 11.5 Resource共通項目
- 11.5.1 共通action
- 11.5.2 収束条件の調整
- 11.5.3 条件付き実行
- 11.5.4 通知と検知
- 11.5.5 Attributeの遅延評価
- 11.6 Attribute
- 11.6.1 Attributeファイルの記述
- 11.6.2 Attributeファイルの順序
- 11.6.3 Attributeのアクセサメソッド
- 11.6.4 Attributeの優先順位指定
- 11.6.5 Attributeの持続性
- 11.6.6 Attributeの固有メソッド
- 11.6.7 Attributeの活用
- 11.7 Recipe DSL
- 11.7.1 RecipeでRubyを活用する
- 11.7.2 Recipeのインクルード
- 11.7.3 プラットフォームRecipe DSLメソッド
- 11.7.4 検索Recipe DSLメソッド
- 11.7.5 Tag Recipe DSLメソッド
- 11.7.6 Microsoft Windows向けのRecipe DSLメソッド
- 11.7.7 Recipe DSLのResource定義を活用する
- 11.7.8 Recipe間で変数を取り回す
- 11.8 ResourceとProviderの関係
- 11.8.1 Current ResourceとNew Resource
- 11.8.2 updated_resources
- 11.8.3 プラットフォームとProviderの対応関係
- 11.9 ディープマージ
- 11.9.1 ディープマージにおける置換
- 11.9.2 ディープマージにおける追加
第12章 他のCookbookコンポーネント
- 12.1 Cookbook Metadata
- 12.1.1 Metadataの役割
- 12.1.2 metadata.rbとmetadata.json
- 12.1.3 Metadataの設定
- 12.1.4 recommends、suggestsの使用例
- 12.2 Cookbook Version
- 12.2.1 バージョンの書式
- 12.2.2 バージョンの制約
- 12.2.3 バージョンの凍結
- 12.2.4 Environment別に任意のCookbookバージョンを適用する
- 12.3 Cookbook File
- 12.3.1 サブディレクトリの使用優先順位
- 12.3.2 ファイルの転送とキャッシュ
- 12.4 Cookbook Template
- 12.4.1 テンプレートを使用する
- 12.4.2 部分テンプレート
- 12.5 Cookbook Library
- 12.5.1 Libraryの読み込み
- 12.5.2 書式
- 12.5.3 テンプレートヘルパーモジュール
- 12.6 Cookbook Definition
- 12.6.1 書式
第13章 Lightweight Resources and Providers(LWRP)
- 13.1 LWRPとは
- 13.2 LWRPの組み込み
- 13.2.1 Lightweight Resourceの組み込み
- 13.2.2 Lightweight Providerの組み込み
- 13.2.3 生成される名前やクラス名の確認
- 13.3 簡単なLWRPを作成する
- 13.3.1 簡単なLightweight Resource
- 13.3.2 簡単なLightweight Provider
- 13.3.3 RecipeにResource定義を記述する
- 13.3.4 Chef-Clientで実行する
- 13.3.5 Resourceの更新をマークする
- 13.3.6 Why-Runをサポートする
- 13.3.7 より実践的な例
- 13.3.8 Chef公式LWRP
- 13.4 Lightweight Resource
- 13.4.1 Lightweight Resourceの書式
- 13.4.2 Lightweight Resource DSL
- 13.4.3 検証パラメータ
- 13.4.4 標準ResourceとLightweight Resource
- 13.5 Lightweight Provider
- 13.5.1 Lightweight Providerの書式
- 13.5.2 Lightweight Provider DSL
- 13.6 LWRPの活用と作成例
- 13.6.1 LWRPの作成方針
第14章 テスト
- 14.1 knife cookbook testサブコマンド
- 14.1.1 事前準備
- 14.1.2 テスト
- 14.2 foodcritic
- 14.2.1 インストール
- 14.2.2 実行例
- 14.3 ChefSpec
- 14.3.1 インストール
- 14.3.2 Exampleの作成
- 14.4 test-kitchen
- 14.4.1 Cookbookへのテストケースの追加
- 14.4.2 テストの実行
- 14.5 Cookbookを継続的インテグレーションする
- 14.5.1 Travis CI
第15章 Cookbookの管理ツール
- 15.1 Cookbook管理のアンチパターン
- 15.2 Berkshelf
- 15.2.1 インストール
- 15.2.2 コマンドラインインターフェイスの書式
- 15.2.3 Berksfileの書式
- 15.2.4 設定ファイル
- 15.2.5 設定ファイルを作成する
- 15.2.6 実行例
- 15.3 Librarian-Chef
- 15.3.1 インストール
- 15.3.2 コマンドラインインターフェイスの書式
- 15.3.3 Cheffileの書式
- 15.3.4 設定一覧
- 15.3.5 実行例
第16章 Chefの運用
- 16.1 Chefとシステム構築
- 16.1.1 提供するアプリケーションを中心に構成要素を検討する
- 16.1.2 既存サーバをモデル化し、テストを通じて再現する
- 16.1.3 アプリケーションプロトコルを中心に役割ベースでシステムを構成する
- 16.2 Enterprise Chef Server有償アドオン
- 16.2.1 Chef Manager
- 16.2.2 Reporting
- 16.2.3 Push Jobs
- 16.3 事例紹介
- 16.3.1 Facebook
- 16.3.2 RailsアプリケーションをベースにしたSaaSシステム
- 16.3.3 GitリポジトリとChef-Soloを組み合わせたSaaSシステム
- おわりに
付録A Chef-ClientのEventDispatcherイベント一覧
付録B Chef公式LWRP
- B.1 特に有用なLWRP
- B.1.1 apt
- B.1.2 aws
- B.1.3 chef_handler
- B.1.4 yum
- B.2 システム管理
- B.2.1 firewall
- B.2.2 sudo
- B.2.3 users
- B.3 モニタリング
- B.3.1 nagios
- B.4 デーモンプロセス管理
- B.4.1 daemontools
- B.4.2 supervisor
- B.5 各種サーバ
- B.5.1 djbdns
- B.5.2 gunicorn
- B.5.3 rabbitmq
- B.5.4 riak
- B.5.5 samba
- B.5.6 iis
- B.5.7 webpi
- B.5.8 windows
- B.6 プラグインマネージャ
- B.6.1 maven
- B.6.2 php
- B.6.3 python
付録C ResourcesとProvidersの一覧
- C.1 Chef::Resource
- C.1.1 breakpoint
- C.1.2 cron
- C.1.3 env
- C.1.4 erl_call
- C.1.5 group
- C.1.6 http_request
- C.1.7 ifconfig
- C.1.8 link
- C.1.9 log
- C.1.10 mdadm
- C.1.11 mount
- C.1.12 ohai
- C.1.13 registry_key
- C.1.14 route
- C.1.15 ruby_block
- C.1.16 service
- C.1.17 user
- C.2 Chef::Resource::Deploy
- C.2.1 deploy
- C.3 Chef::Resource::Directory
- C.3.1 directory
- C.3.2 remote_directory
- C.4 Chef::Resource::Execute
- C.4.1 execute
- C.5 Chef::Resource::Script
- C.5.1 script
- C.5.2 csh
- C.5.3 bash
- C.5.4 perl
- C.5.5 python
- C.5.6 ruby
- C.5.7 batch
- C.5.8 powershell_script
- C.6 Chef::Resource::File
- C.6.1 file
- C.6.2 cookbook_file
- C.6.3 remote_file
- C.6.4 template
- C.7 Chef::Resource::Package
- C.7.1 package
- C.7.2 apt_package
- C.7.3 dpkg_package
- C.7.4 easy_install_package
- C.7.5 freebsd_package
- C.7.6 ips_package
- C.7.7 macports_package
- C.7.8 pacman_package
- C.7.9 portage_package
- C.7.10 rpm_package
- C.7.11 smartos_package
- C.7.12 solaris_package
- C.7.13 yum_package
- C.8 Chef::Resource::Package::GemPackage
- C.8.1 gem_package
- C.8.2 chef_gem
- C.9 Chef::Resource::Scm
- C.9.1 scm
- C.9.2 git
- C.9.3 subversion
- C.10 Windows File Security
- C.11 Resource組み合わせの例
付録D IaaS系Knifeプラグイン
- D.1 knife-azure(パブリッククラウド)
- D.1.1 事前準備
- D.1.2 knife-azureの利用
- D.2 knife-openstack(プライベートクラウド)
- D.2.1 事前準備
- D.2.2 knife-openstackの利用
- D.3 knife-eucalyptus(プライベートクラウド)
- D.3.1 事前準備
- D.3.2 knife-eucalyptusの利用