初めてのAnsible

[cover photo]
TOPICS
System/Network
発行年月日
PRINT LENGTH
364
ISBN
978-4-87311-765-2
原書
Ansible: Up and Running
FORMAT
Print PDF
Ebook
3,520円
Ebookを購入する
Print
3,520円

本書はサーバーの構成管理ツールAnsibleについての総合的な入門書です。設定管理のスクリプトであるPlaybookの基礎から、オープンソースの本格的なコンテンツ管理システムのインストールについて、順を追って説明します。そしてAnsibleの高速化やカスタムモジュール、VagrantやAmazonEC2、Dockerとの連携など、Ansibleの活用に役立つ事柄をサンプルを使いながら詳述します。日本語版付録として中山幸治氏による「Ansibleを利用したプロビジョニング方法」を収録。サーバーを上手に管理したいエンジニア必携の一冊です。

目次

序文
訳者まえがき
はじめに

1章 イントロダクション
    1.1 バージョンについて
    1.2 Ansibleが役立つこと
    1.3 Ansibleの動作
    1.4 Ansibleがすばらしい理由
        1.4.1 読みやすい構文
        1.4.2 リモートホストへのインストールが不要
        1.4.3 プッシュベース
        1.4.4 スケールダウン
        1.4.5 組み込みモジュール
        1.4.6 抽象化層の薄さ
    1.5 Ansibleはシンプルすぎる?
    1.6 事前に必要な知識
    1.7 本書で取り上げないこと
    1.8 Ansibleのインストール
    1.9 テスト用サーバーのセットアップ
        1.9.1 Vagrantを使ったテストサーバーのセットアップ
        1.9.2 テストサーバーのことをAnsibleに知らせる
        1.9.3 ansible.cfgによる簡略化
    1.10 今後に向けて

2章 Playbook: 始めてみよう
    2.1 準備を少々
    2.2 ごくシンプルなPlaybook
        2.2.1 nginxの設定ファイルの指定
        2.2.2 カスタムホームページの作成
        2.2.3 Webserversグループの作成
    2.3 Playbookの実行
    2.4 PlaybookはYAMLです
        2.4.1 ファイルの先頭
        2.4.2 コメント
        2.4.3 文字列
        2.4.4 論理値
        2.4.5 リスト
        2.4.6 辞書
        2.4.7 行の折り返し
    2.5 Playbookの解剖学
        2.5.1 Play
        2.5.2 タスク
        2.5.3 モジュール
        2.5.4 まとめ
    2.6 変わりはありませんか? ホストの状態の追跡
    2.7 もう少しスマートに: TLSのサポート
        2.7.1 TLS証明書の生成
        2.7.2 変数
        2.7.3 nginxの設定テンプレートの生成
        2.7.4 ハンドラ
        2.7.5 Playbookの実行

3章 インベントリ:サーバーの記述
    3.1 インベントリファイル
    3.2 準備:複数のVagrantマシン
    3.3 インベントリの振る舞い型パラメータ
        3.3.1 ansible_connection
        3.3.2 ansible_shell_type
        3.3.3 ansible_python_interpreter
        3.3.4 ansible_*_interpreter
        3.3.5 振る舞い型のパラメータのデフォルトの変更
    3.4 グループとグループとグループ
        3.4.1 サンプル:Djangoアプリケーションのデプロイ
        3.4.2 エイリアスとポート
        3.4.3 グループのグループ
        3.4.4 番号付きホスト(ペット対牛)
    3.5 ホストとグループ変数:インベントリの内部
    3.6 ホストとグループ変数:ファイルへの分配
    3.7 動的なインベントリ
        3.7.1 動的インベントリスクリプトのインターフェース
        3.7.2 動的インベントリスクリプトの作成
        3.7.3 既存のインベントリスクリプト
    3.8 複数ファイルへのインベントリの分割
    3.9 add_hostとgroup_byによる実行時のエントリの追加
        3.9.1 add_host
        3.9.2 group_by

4章 変数とファクト
    4.1 Playbook内での変数の定義
    4.2 変数の値の表示
    4.3 変数の登録
    4.4 ファクト
        4.4.1 サーバーに関連づけられたすべてのファクトの表示
        4.4.2 一部のファクトの表示
        4.4.3 任意のモジュールによるファクトの収集
        4.4.4 ローカルファクト
    4.5 set_factによる新しい変数の定義
    4.6 組み込み変数
        4.6.1 hostvars
        4.6.2 inventory_hostname
        4.6.3 グループ
    4.7 コマンドライン上での変数の設定
    4.8 優先順位

5章 Mezzanineの紹介:本書でのテスト用アプリケーション
    5.1 プロダクション環境へのデプロイが複雑な理由
        5.1.1 PostgreSQL : データベース
        5.1.2 Gunicorn : アプリケーションサーバー
        5.1.3 nginx : Webサーバー
        5.1.4 Supervisor : プロセスマネージャ

6章 AnsibleによるMezzanineのデプロイ
    6.1 Playbookでのタスク群のリスト化
    6.2 デプロイされるファイル群の構成
    6.3 変数とシークレット変数
    6.4 イテレーション(with_items)を利用した複数のパッケージのインストール
	
    6.5 タスクへのbecome節の追加
    6.6 aptキャッシュの更新
    6.7 Gitを使ったプロジェクトのチェックアウト
    6.8 Mezzanineとその他のパッケージ群のvirtualenvへのインストール
    6.9 タスク中の複雑な引数:ちょっと寄り道を
    6.10 データベースとデータベースユーザーの作成
    6.11 テンプレートからのlocal_settings.pyファイルの作成
    6.12 django-manageコマンドの実行
    6.13 アプリケーションのコンテキスト内でのカスタムPythonスクリプトの実行
	
        6.13.1 サービス設定ファイルの設定
    6.14 nginxの設定の有効化
    6.15 TLS証明書のインストール
    6.16 TwitterのCronジョブのインストール
    6.17 完全なPlaybook
    6.18 仮想マシンに対するPlaybookの実行
    6.19 複数のマシンへのMezzanineのデプロイ

7章 複雑なPlaybook
    7.1 コントロールマシン上でのタスクの実行
    7.2 ホスト以外のマシン上でのタスクの実行
    7.3 ファクトの手動収集
    7.4 一度の一つのホストでの実行
    7.5 1回だけの実行
    7.6 おかしな動作のコマンドの扱い: changed_when及びfailed_when
    7.7 ホストからのIPアドレスの取り出し
    7.8 Vaultによるセンシティブなデータの暗号化
    7.9 ホスト指定のパターン
    7.10 実行ホストの制限
    7.11 フィルタ
        7.11.1 デフォルトのフィルタ
        7.11.2 登録された変数のためのフィルタ
        7.11.3 ファイルパスのためのフィルタ
        7.11.4 独自のフィルタの作成
    7.12 ルックアップ
        7.12.1 ファイル
        7.12.2 パイプ
        7.12.3 env
        7.12.4 パスワード
        7.12.5 テンプレート
        7.12.6 csvファイル
        7.12.7 dnstxt
        7.12.8 redis_kv
        7.12.9 etcd
        7.12.10 独自のルックアッププラグインの作成
    7.13 更に複雑なループ
        7.13.1 with_lines
        7.13.2 with_fileglob
        7.13.3 with_dict
        7.13.4 ルックアッププラグインとしてのループ構造

8章 ロール:プレイブックのスケールアップ
    8.1 ロールの基本構造
    8.2 サンプル:データベースとMezzanineのロール
    8.3 Playbooks中でのロールの利用
    8.4 pre_tasksとpost_tasks
    8.5 データベースのデプロイのための"database"ロール
    8.6 Mezzanineのデプロイのための"mezzanine"ロール
    8.7 ansible-galaxyでのロールファイルとディレクトリの作成
    8.8 依存ロール
    8.9 Ansible Galaxy
        8.9.1 Webインターフェース
        8.9.2 コマンドラインインターフェース
        8.9.3 独自のロールの寄贈

9章 Ansibleの高速化
    9.1 SSHマルチプレキシングとControlPersist
        9.1.1 手動でのSSHマルチプレキシングの有効化
        9.1.2 AnsibleでのSSHマルチプレキシングのオプション
    9.2 パイプライン
        9.2.1 パイプラインの有効化
        9.2.2 パイプラインのためのホストの設定
    9.3 ファクトのキャッシュ
        9.3.1 JSONファイルをバックエンドとするファクトのキャッシュ
        9.3.2 Redisをバックエンドとするファクトのキャッシュ
        9.3.3 Memcachedをバックエンドとするファクトのキャッシュ
    9.4 並列処理
    9.5 加速モード
    9.6 Fireballモード

10章 カスタムモジュール
    10.1 サンプル: リモートサーバーへの接続性チェック
    10.2 独自モジュールの代わりにスクリプトモジュールを使う
    10.3 モジュールとしてのcan_reach
    10.4 カスタムモジュールの置き場所
    10.5 Ansibleによるモジュールの起動方法
        10.5.1 スタンドアローンのPythonスクリプトの引数付きでの生成
	(Pythonのみ)
        10.5.2 ホストへのモジュールのコピー
        10.5.3 ホスト上での引数ファイルの作成(Python以外のみ)
        10.5.4 モジュールの呼び出し
    10.6 期待される出力
        10.6.1 Ansibleが求める出力変数
    10.7 Pythonでのモジュールの実装
        10.7.1 引数のパース
        10.7.2 パラメータへのアクセス
        10.7.3 AnsibleModuleヘルパークラスのインポート
        10.7.4 引数のオプション
        10.7.5 AnsibleModuleの初期化パラメータ
        10.7.6 成功もしくは失敗を返す
        10.7.7 外部コマンドの起動
        10.7.8 チェックモード(DryRun)
    10.8 モジュールのドキュメントの作成
    10.9 モジュールのデバッグ
    10.10 bashでのモジュールの実装
    10.11 bashに対する代替の場所の指定
    10.12 サンプルのモジュール

11章 Vagrant
    11.1 Vagrantの便利な設定オプション
        11.1.1 ポートフォワーディングとプライベートIPアドレス
        11.1.2 Agentのフォワーディングの有効化
    11.2 Ansibleプロビジョナ
    11.3 プロビジョナが実行されるとき
    11.4 Vagrantが生成するインベントリ
    11.5 並列プロビジョニング
    11.6 グループの指定

12章 Amazon EC2
    12.1 用語
        12.1.1 インスタンス
        12.1.2 Amazon Machine Image
        12.1.3 タグ
    12.2 クレデンシャルの指定
        12.2.1 環境変数
        12.2.2 設定ファイル
    12.3 必要なもの: Boto Pythonライブラリ
    12.4 動的なインベントリ
        12.4.1 インベントリのキャッシング
        12.4.2 他の設定オプション
        12.4.3 自動生成グループ
    12.5 タグを持つ動的グループの定義
        12.5.1 既存のリソースへのタグの適用
        12.5.2 グループの良い名前
    12.6 EC2 Virtual Private Cloud(VPC)とEC2 Classic
    12.7 EC2のためのansible.cfgの設定
    12.8 新しいインスタンスの起動
    12.9 EC2の鍵ペア
        12.9.1 新しい鍵の生成
        12.9.2 既存の鍵のアップロード
    12.10 セキュリティグループ
        12.10.1 アクセス可能なIPアドレス
        12.10.2 セキュリティグループのポート
    12.11 最新のAMIの取得
    12.12 グループへの新しいインスタンスの追加
    12.13 サーバーの起動の待機
    12.14 冪等性を持つインスタンスの起動方法
    12.15 仕上げ
    12.16 VPCの指定
        12.16.1 動的なインベントリとVPC
    12.17 AMIの構築
        12.17.1 ec2_amiモジュールの利用
        12.17.2 Packerの利用
    12.18 その他のモジュール

13章 Docker
    13.1 DockerとAnsibleを組み合わせるケース
    13.2 Dockerアプリケーションのライフサイクル
    13.3 MezzanineのDocker化
    13.4 AnsibleによるDockerイメージの作成
        13.4.1 Mezzanine
    13.5 その他のコンテナイメージ
        13.5.1 PostgreSQL
        13.5.2 Memcached
        13.5.3 nginx
        13.5.4 証明書
        13.5.5 イメージの構築
    13.6 Docker化されたアプリケーションのデプロイ
    13.7 データベースコンテナの起動
    13.8 データベースコンテナのIPアドレスとマップされたポートの取得
    13.9 データベースの起動の待機
        13.9.1 データベースの初期化
        13.9.2 Memcachedコンテナの起動
        13.9.3 Mezzanineコンテナの起動
        13.9.4 証明書コンテナの起動
        13.9.5 Nginxコンテナの起動
    13.10 完成したPlaybook

14章 Playbookのデバッグ
    14.1 SSHの問題のデバッグ
    14.2 Debugモジュール
    14.3 Assertモジュール
    14.4 実行前のPlaybookのチェック
        14.4.1 構文チェック
        14.4.2 ホストのリスト
        14.4.3 タスクのリスト
        14.4.4 チェックモード
        14.4.5 Diff(ファイルの差分の表示)
    14.5 実行するタスクの制限
        14.5.1 step
        14.5.2 start-at-task
        14.5.3 タグ
    14.6 今後に向かって

付録A SSH
    A.1 ネイティブのSSH
    A.2 SSHエージェント
    A.3 ssh-agentの起動
        A.3.1 Mac OS X
        A.3.2 Linux
        A.3.3 エージェントのフォワーディング
    A.4 sudoとエージェントフォワーディング
    A.5 ホストの鍵

付録B デフォルトの設定

付録C EC2クレデンシャルのためのIAMロールの利用
    C.1 AWSマネージメントコンソール
    C.2 コマンドライン

付録D Ansibleを利用したプロビジョニング方法
    D.1 はじめに
    D.2 Ansible以前の構成
    D.3 プロビジョニング
        D.3.1 リポジトリの構造
        D.3.2 playbookの作成
        D.3.3 テストコード
        D.3.4 playbook
        D.3.5 デプロイ
    D.4 まとめ

付録E Ansible 2.0
    E.1 Ansible 2.0の概要
    E.2 新機能
        E.2.1 タスクブロック
        E.2.2 Execution Strategyプラグイン
        E.2.3 プラグイン

付録F 用語集

付録G 参考文献

索引