Puppet[設定&管理]活用ガイド

[表紙]Puppet[設定&管理]活用ガイド

B5変形判/368ページ

定価(本体3,700円+税)

ISBN 978-4-7741-9116-4

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

サーバーやネットワーク機器などの構築・管理の自動化に注目が集まっています。Puppetは構成管理ツールの中でも歴史が古く,実績があるツールです。Puppetは,専用言語でマニフェスト(システムのあるべき状態)を記述するため,その習得コストがかかるものの,開発と運用管理の担当者が異なることが多い日本に適したツールと言えます。本書はPuppetの基本から利用事例・ベストプラクティスまで,経験豊富な著者が蓄積したノウハウをあますことなく,かつわかりやすくまとめています。

こんな方におすすめ

  • Puppetによる構成管理の自動化に興味のある人
  • Puppetのユーザーで,いろいろなノウハウを吸収したい人

目次

基本編
第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サービスの有効化
  • 制約事項など

著者プロフィール

菅原亮(すがはらりょう)

2005年に株式会社NTTデータ入社。2012年よりインフラ自動化関連プロジェクトに着任したのをきっかけにPuppetを知る。2014年にPuppetドキュメントの日本語化を通じてPuppet社との関係が始まり,周囲の協力も得て2015年日本で初めてのPuppetユーザ会を設立,初代会長として現在も日本でPuppetを広めるために尽力している。


落合秀俊(おちあいひでとし)

2001年に株式会社NTTデータ入社。2009年にHadoopのプロジェクトで初めてPuppetに触れる。NTT OSSセンタと共にPuppetの設計手法の汎用化を行い,そのノウハウをベースに複数の大規模プロジェクトでPuppetの適用を実施。2017年現在,日本のIT産業の脱3Kを目指し,社内の公共・社会基盤分野のプロジェクトにインフラ自動化の推進を行っている。


佐々木優太朗(ささきゆうたろう)

2009年に株式会社NTTデータ入社。入社以来,金融,公共の大規模ミッションクリティカルシステムのインフラ開発・運用に従事。また,インフラのベストプラクティスを社内に普及展開する活動の中で,インフラ自動化技術を活用し,その効果を肌で実感。2016年に社内の開発環境を集約した「統合開発クラウド」でPuppetを活用。現在は,本書執筆を陰で支えてくれた妻に感謝しつつ,インフラ自動化の普及展開に奮闘中。


横山浩輔(よこやまこうすけ)

2010年に株式会社NTTデータ入社。2012年にHadoopを利用するプロジェクトに参画した際,システム基盤の構築,維持管理で初めてPuppetを利用。以後幾つかの大規模プロジェクトでPuppetを主とした基盤自動化技術を担当。その他,過去にNagiosでのHadoop基盤監視やVMware NSX(旧Nicira NVP)の技術検証など担当。


黒岩良太(くろいわりょうた)

2012年に株式会社NTTデータ入社。2015年に大規模プロジェクトに参画した際,初めてPuppetを知り,Puppetを活用したシステム基盤の構築および維持管理を担当。その他,過去にパブリッククラウドサービス(AWS,Cloudn)の比較検証や,大規模プロジェクトにおいてジョブネット設計(JP1)などを担当。