本書はサーバーの構成管理ツールAnsibleについての総合的な入門書です。設定管理のスクリプトであるPlaybookの基礎から、オープンソースの本格的なコンテンツ管理システムのインストールについて、順を追って説明します。そしてAnsibleの高速化やカスタムモジュール、VagrantやAmazonEC2、Dockerとの連携など、Ansibleの活用に役立つ事柄をサンプルを使いながら詳述します。日本語版付録として中山幸治氏による「Ansibleを利用したプロビジョニング方法」を収録。サーバーを上手に管理したいエンジニア必携の一冊です。
初めてのAnsible
Lorin Hochstein 著、Sky株式会社 玉川 竜司 訳
- TOPICS
- System/Network
- 発行年月日
- 2016年04月
- PRINT LENGTH
- 364
- ISBN
- 978-4-87311-765-2
- 原書
- Ansible: Up and Running
- FORMAT
- Print PDF
目次
序文 訳者まえがき はじめに 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 参考文献 索引