目次
基本編
第1章 Puppetをはじめよう
1.1 Puppetの動作環境
1.2 Puppetのライセンスと入手方法
- OSS版Puppetの特徴
- OSS版Puppetパッケージの導入
1.3 インストール後の動作確認
第2章 マニフェストの書き方
2.1 基本的な文法
- コードの実行
- リソースとは
- リソースの宣言
- リソースの基本構造
- リソースの記述例(その1)
- リソースの記述例(その2)
- リソースの実行順序と依存関係
- リソースの実行順序
- 依存関係
- ドライランによるマニフェストの実行
- マニフェストの実行
- チェイニングリソースとチェイニングアロー
- subscribeの使いどころ
2.2 基本的なリソース
- 主なCore Types
- fileリソース
- packageリソース
- serviceリソース
- notifyリソース
- execリソース
- cronリソース
- userリソース
- groupリソース
- システムの状態をリソース化
- 抽象化レイヤ(RAL)
- 冪等性
2.3 変数とFacts
- 変数の基本
- データ型
- スコープ
- システム情報の取得
2.4 関数
2.5 演算子
- 算術演算子
- 比較演算子
2.6 条件分岐
- if文
- unless文
- case文
- セレクタ
2.7 ループ構造
- each
- slice
- filter
- map
- reduce
2.8 テンプレートの利用
- テンプレートとは
- ERBテンプレートの使用
- 外部のテンプレートファイルの使用
- インラインテンプレートの使用
- EPPテンプレートの使用
- 外部のテンプレートファイルの使用
- インラインテンプレートの使用
- テンプレート化すべきもの
第3章 クラス・リソースの定義
3.1 クラスの定義
- クラスとは
- クラスの呼び出し方
- クラスを使う際の注意点
- クラスの依存関係
- パラメーター付きクラス
- パラメーターのデータ型
- データ型を指定しない場合
- データ型を指定する場合
- 主なパラメーターのデータ型
- クラスの継承
- [コラム]データ型の型変換
- includeとcontain
3.2 リソースの定義
- リソース定義とクラスの関係
- リソースの定義
- クラス定義とリソース定義の違い
第4章 モジュールの活用
4.1 モジュール
- モジュールとは
- モジュールのひな型の生成
- クラスのモジュール化
- クラスを役割別に分解して定義
- モジュールの定義
- モジュールの呼び出し
- 公開モジュールを使う
- モジュールの種類
- モジュールを使ったApacheのインストール
- Quality ScoreとCommunity Rating
- モジュールのインストール
- Apacheのインストール
- Apacheの起動確認
- Apacheの設定変更
- モジュール活用のススメ
- [コラム]モジュール関連コマンド
- モジュールのドキュメント
- ドキュメントの重要性
- README.md
- モジュールの公開手順
- モジュール名について
- 必要なメタデータが記述されていることを確認
4.2 RoleとProfile
- RoleとProfileの概要
- RoleとProfileの使い道
- Auto Scaleへの対応
- GUIとの親和性
- Hieraと合わせて利用
- RoleとProfileを使ってみよう
- ①Role/Profile作成前の準備
- ②使用するモジュールを選択
- ③Profileの作成
- ④Roleの作成
- ⑤ノード(node)へのRoleの割り当て
第5章 Puppetの構成とインストール
5.1 Puppetのシステム構成
- スタンドアローン型構成
- Puppetの適用
- マニフェストや配布ファイルなどの更新
- エージェントマスタ型構成
- Puppetの適用
- マニフェストの記述と配置
- マニフェストや配布ファイルなどの更新
- その他
5.2 OSS版Puppet Serverのインストール
- 事前準備
- SELinuxの無効化
- ファイアウォールの無効化
- OSS版Puppet Serverの導入・設定
5.3 エンタープライズ版Puppetのインストール
- エンタープライズ版Pupppetとは
- エンタープライズ版Puppetの入手
- エンタープライズ版Puppetの導入
5.4 トラブルシュート
- メモリ不足に関するトラブル
- デバッグログの取得
第6章 Hieraによるコードとデータの分離
6.1 Hieraの概要
6.2 Hieraの階層設計
- Hieraの階層設計イメージ
- Hieraの階層設計の具体例
- hiera.yamlの例
- hiera.yamlの記述内容
- hiera.yamlのポイント
6.3 クラスパラメータのHiera化
- Hiera実装前のマニフェスト
- Hiera実装後のマニフェスト
- site.pp
- YAMLファイル
6.4 Hiera利用時に注意すべき点
第7章 高度な機能の活用
7.1 Execリソースを使いこなすポイント
- Execリソースとは
- Execのよくあるトラブル
- そもそもExecを使わないようにする
- 利用シーン:アーカイブファイルを展開してコマンドを実行
- createsパターン
- subscribe+refreshonlyパターン
- 利用シーン: 設定のためにコマンド実行する
- unlessで状態取得パターン
- 細かい注意点
7.2 パッケージの配布
- rpmで提供されるパッケージ
- tarballで提供されるパッケージ
- puppet/stagingモジュールの利用例
- puppet/stagingモジュールの実行例
- ISOファイルで提供されるパッケージ
7.3 仮想リソースの活用
- 仮想リソースとは
- 仮想リソースの利用方法
- 事例
- 複数人での開発による問題点
- 課題への対応
- 実装例
7.4 Exported Resourcesの活用
- Exported Resourcesとは
- Exported Resourcesの記述例
- Exported Resourcesを使う準備
- PostgreSQLのインストールと設定
- PuppetDBのインストールと設定
- Exported Resourcesの利用方法
- Exported ResourcesによるNagiosの設定例
- PuppetDBのエントリ削除
応用編
第8章 インフラ自動化のメリット
8.1 なぜインフラ自動化を行うのか
- 変更に強くする
- 品質向上
- 構築時,サーバー間・環境間で意図しない差異が発生しない
- 設定変更を多数の環境,多数のサーバーに確実に反映する
- 環境の順次構築で自動化の仕組みを改善
- 構築期間の短縮,構築期間の精度向上
- 作業効率化
- インフラ自動化の効果が発揮される場面
- インフラ自動化のコストを下げる方法
- [コラム]工数削減ばかり注目するのは危険のサイン
第9章 自動化に適したアーキテクチャ
9.1 サーバー間の依存関係を減らす(サーバーの独立性)
- システム構築時に段階的Puppet適用が困難
- システム運用時にチーム間調整が多くなる
9.2 機能とサーバーを1対1対応させる
- 1台に複数機能を詰め込まない
- 1台に複数環境を同居させない
9.3 完全自動化できる構成にする
9.4 インフラのテストが行いやすい構成にする(テスト容易性)
9.5 自動化の範囲を見極める
- インフラ自動化を導入する基準
- 変更の多さ
- 導入先・設定先の多さ
- 自動化しやすさ
- 自動化しないソフトウェアを局所化する
第10章 複数人・複数環境でのインフラ管理
10.1 インフラ体制の考え方
10.2 SIプロジェクトでのインフラ変更管理
- 複数人での変更管理
- Gitを用いた資材管理
10.3 Directory Environmentによる複数環境の管理
- [コラム]複数環境への変更適用の苦労
第11章 マニフェスト設計のベストプラクティス
11.1 事前作業
- 対象のソフトウェアスタック
- 分類項目とモジュールの組み合わせ
- 作業対象範囲が広い分類項目
- 影響範囲が複数項目にまたがる分類項目
- 分類方法に正解が無いケースでの考え方
11.2 モジュールの設計
- 手順書の作成と分析
- Apacheモジュールの設計
- installクラス
- configクラス
- serviceクラス
- メインクラス
- パラメータクラス
11.3 コーディング規約
- ファイルフォーマット
- 一般的な記述のルール
- モジュール名,クラス名,変数名の付け方
- モジュール名
- クラス名
- 変数名
- パラメータ化する設定値の選定基準
- 筆者の失敗例
- 制御構造の使い方
- コメントの記述
- ログの取得
- [コラム]ロールバックの考え方
第12章 自動化に向かない構成の乗りこなし方
12.1 基本的な考え方
12.2 HAクラスタ構成
- HAクラスタ構成でPuppetを適用する場合の課題
- 対処方法その1 —— HAクラスタ構成をやめて,シングルサーバーで可用性を高める仕組みにする
- VMware vSphereでのシングルサーバー構成
- 対処方法その2 —— Puppet化する範囲をActive/Stanbyに依存しない範囲に限定する
- 対処方法その3 —— 共有ストレージ内の設定をPuppet化,Puppet定義は特定ノードに寄せる
- 共有ストレージ内の設定をPuppetで行う条件
- 初期設定時のPuppet適用bootstrap
12.3 ミドルウェアのマルチインスタンス構成
- マルチインスタンス構成のPuppet化が難しい理由
- Puppetは1ノードに1クラスを1回しか適用できない
- rpmなどパッケージ管理機能の制約
- 対処方法その1 —— マルチインスタンス構成をやめる
- 対処方法その2 —— Puppet記述方法を工夫してマルチインスタンス構成に対応する
- defineを用いたマルチインスタンス化
- モジュールを別名でコピー
- マルチインスタンス構成の対応方法の比較
- [コラム]Puppetで誤解しやすい文法
第13章 商用ソフトウェアのモジュール化
13.1 事前調査
- 事前調査の観点(インストール方法)
- サイレントインストール機能
- 対話型インストーラへの対応
- 開発元からのサポート
- ライセンス体系
- 事前調査の観点(設定方法)
13.2 モジュール化による商用ソフトウェアのインストール
- Oracle Clientモジュールの例
第14章 インフラのテスト手法
14.1 インフラ開発におけるV字モデル
- インフラにおける単体テスト
- インフラにおける結合テスト
14.2 自動化構築・自動化テストを導入した場合のV字モデル
- コードを用いた自動化開発
- 自動化導入による開発プロセスの変化
- 自動化を導入した場合の品質保証
- 品質保証の具体例
- Puppetマニフェストファイルの文法チェック(puppet-lint)
- その他
- Puppetモジュール自体のテスト(rspec-puppet)
- テスト対象モジュールとマニフェストファイルの作成
- rspec-puppetインストール,テストスクリプトの作成
- テストスクリプト実行の例
- その他
- 自動構築済みノードのテスト(Serverspec)
- インストール・初期設定
- テストスクリプトの作成・実行
- 単体テスト以外の自動化について
- CIによるマニフェスト開発の例
- [コラム]V字モデルと品質保証
第15章 Puppetの運用設計
15.1 変更の適用
- 自動適用が推奨されるケース
- 手動適用が推奨されるケース
- エージェントマスタ型運用にしないケース
15.2 単独サーバーによる複数環境の管理
- モジュールの配置例
- ベースモジュールディレクトリ
- 環境別のディレクトリ
- 環境の設定
- Direcotry Environmtの利用方法
15.3 Puppet Serverのバックアップ・リカバリ
- 証明書のバックアップ
- 証明書のリカバリー
- Puppet Serverの冗長化
- システム構成
- [コラム]証明書の削除
15.4 MCollectiveによるジョブ実行
- MCollectiveの活用
- MCollectiveの特徴
- MCollectiveの利用シーン
- MCollectiveのシステム構成
- MCollvetiveのセットアップ
- ActiveMQのセットアップ
- MCollectiveクライアントのプラグインインストール
- MCollectiveサーバーのプラグインインストール
- MCollvetiveの設定
- MCollectiveの操作
- ノードの情報取得
- ノード指定のフィルタ
- Puppetの制御
- その他のコマンド
- サービス制御コマンド
- パッケージ管理コマンド
- ファイル操作コマンド
- サーバー名の検索
15.5 Windowsのパッケージ管理
- Chocolateyによるパッケージ管理
- Chocolateyのインストール
- PuppetでChocolateyを使う
- Puppetエージェントのインストール
- Chocolateyモジュールのインストール
- Puppetマニフェストの例
- エージェントマスタ型構成
- 社内など閉域ネットワーク下でのChocolateyの利用
- リポジトリの作成手順
- 独自リポジトリの作成
第16章 パラメーターシートからマニフェストの自動生成
16.1 Hieraファイルを自動生成する
- 自動生成の対象
16.2 パラメーターシート
- パラメーターシートと生成されるyamlの例
- パラメーターシートの単位
- パラメーターシートの例
- 自動生成するyamlファイルの例
- その他の設定
- hiera.yaml
- site.pp
16.3 仕組み利用において注意すべき点
- パラメーターシートの行追加
- 仕組みの利用ルール制定と順守
第17章 ネットワーク機器とストレージ機器の管理
17.1 Cisco製ネットワーク機器の管理
- 概要と利用シーン
- 利用シーン1(1台のVLAN変更)
- 利用シーン2(複数台のVLAN変更)
- Puppet対応のシステム構成
- Puppet対応のネットワーク機器(物理スイッチ)
- Puppet対応のネットワーク機器(仮想スイッチ)
- Puppetエージェントの設定
- Puppetモジュール
- RubyGems(cisco_node_utils)
- NX-OSv 9000による検証環境の構築手順
- 事前準備
- VargrantによるNX-OSv 9000の展開
- NX-OSv 9000へのPuppetエージェントのインストール手順
- サンプルマニフェストの実行
- その他のノウハウ
17.2 EMC社製ストレージの管理
- ストレージ構築,運用管理の課題
- ストレージの初期構築と構成変更
- ストレージ構築の自動化
- LUN(論理ユニット番号)
- ストレージプール
- ストレージグループ
- イニシエーター
- ストレージ構築の自動化事例紹介
- 作業タスクリスト
- VNX定義ファイル
- VNX接続情報
- VNXモジュール接続情報
- 設定値リスト
- EMC VNX Puppet Moduleについて
- [コラム]SDS(Software Defined Storage)
17.3 NetApp社製ストレージの管理
- 必要なソフトウェアとサーバ
- [コラム]Data ONTAP/NetApp FASシリーズについて
- プロビジョニングの対象について
- 管理の考え方
- アーキテクチャ/プロビジョニング
- Cluster-scopedオペレーション用設定ファイル(cluster.conf)
- [コラム]複数ノードのプロビジョニングについて
- SVN-scopedオペレーション用設定ファイル(storagevm.conf)
- Puppet module のインストール
- NetApp Manageability SDK の準備
- 適用フロー
- マニフェストの作成サンプル
- 2種類の概念
- Cluster-scopedオペレーション
- SVM-Scopedオペレーション
- ユースケース
- ストレージ管理者の操作(Cluster-scopedオペレーション)
- テナント管理者の操作(SVM-scopedオペレーション)
- マニフェストの適用
- SVM管理者のユースケース
- ボリュームの拡張
- スナップショットのスケジュール設定
- NFSサービスの有効化
- 制約事項など