インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現


インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現


翔泳社


著者:中島倫明、佐々木健太郎、北山晋吾、齊藤秀喜、羽深修


はじめに

第1章 ITインフラの設計/構築/維持の変化
1.1 IT市場エオ取り巻く変化
1.1.1 メインフレーム時代の
1.1.2 オープンシステムの時代
1.1.3 クラウドの時代
1.1.4 市場の変化とインフラ管理者
1.2 システムに対する価値観の変化
1.2.1 ペット(Pet)vs家畜(Cattle)
1.2.2 コストか、品質か、スピードか
1.2.3 インフラエンジニアの価値
1.3 これまでの自動化への取り組み
1.3.1 自動化の手法
1.3.2 サイロ化が招く弊害
1.4 これからの自動化、そして自動化への先へ
1.4.1 どこに自動化を適用していくか
1.4.2 自動化の先へ
1.5 ITインフラに関わる人間に必要なマインド
1.6 まとめ

第2章 インフラCIの考え方
2.1 インフラCIとは
2.1.1 従来の改善サイクル
2.1.2 インフラCIのサイクル
2.1.3 CI/CDが解決する課題
2.1.4 運用のシステム化
2.2 インフラCIに必要な前提条件
2.2.1 プログラムから操作可能であること
2.2.2 環境の使い捨てが可能であること
2.2.3 前提を満たすことができない場合にどうするか
2.3 インフラCIに必要な要素
2.3.1 Infrastructure as Codeのプラクティス
2.3.2 ダイナミックインフラストラクチャ
2.4 インフラCIの仕組み
2.4.1 全体イメージ
2.4.2 サイクルの具体例
2.4.3 システムとしてのインフラCI
2.4.4 インフラCIの例
2.5 まとめ

第3章 演習環境の概要と構築方法
3.1 演習環境の全体像
3.2 演習環境の概要
3.3 演習環境で使用するソフトウェア
3.3.1 VirtualBox(ハイパーバイザ)
3.3.2 Vagrant(ダイナミックインフラストラクチャ)
3.3.3 GitLab/GitLab Runner(バージョン管理/継続的テストシステム)
3.3.4 Docker(継続的テストシステム)
3.3.5 Ansible(構成定義ファイル、テスト)
3.4 ほかのソフトウェアを利用したインフラCIの例
3.5 演習環境の構築
3.5.1 CentOS 7.4のインストール
3.5.2 Git/Ansibleのインストール
3.5.3 VirtualBox/Vagrantのインストールと設定
3.5.4 GitLab/GitLab Runnerのインストールと設定
3.6 演習環境のCI
3.6.1 Travis CIについて
3.6.2 CI設定ファイル
3.6.3 テストの定義
3.7 まとめ

第4章 演習のシナリオ解説
4.1 演習環境の確認
4.1.1 GitLabの設定
4.1.2 パイプラインの実行
4.1.3 変更履歴の確認
4.2 演習のシナリオ(進め方)
4.2.1 シナリオの前提
4.2.2 シナリオ(進め方)
4.3 サンプルアプリケーションの概要と要件
4.3.1 サンプルアプリケーションKetchup
4.3.2 システムの要件
4.3.3 サンプルシステムの動作確認方法
4.4 まとめ

第5章 環境構築の自動化
5.1 仕様書と手順書
5.1.1 ヒューマンvsマシン
5.1.2 インフラCIに必要な仕様書と手順書とは
5.2 パイプラインの中での自動構築作業
5.2.1 自動実行される構築作業の内容
5.2.2 構成定義ファイルを使った構築の自動化
5.3 構成定義ファイルを用いた構築自動化の基本
5.3.1 自動化への心構え
5.3.2 基本ルール策定の重要性
5.4 自動化(Playbook)の実装
5.4.1 手順(Tasks)の記述
5.4.2 パラメータ(Vars)の記述
5.5 変化するシステムへの対応
5.5.1 構築の自動化とダイナミックインフラストラクチャ
5.5.2 動的に操作対象を決定する
5.6 まとめ

第6章 テストの自動化
6.1 インフラ構築におけるテスト
6.1.1 テストの体系
6.1.2 コードレビュー
6.1.3 ユニットテスト
6.1.4 インテグレーションテスト、システムテスト
6.2 コードレビューの自動化
6.2.1 コーディング規約の準拠をテストする
6.2.2 構文をチェックする
6.3 ユニットテストの実装
6.3.1 ユニットテスト設計
6.3.2 ロール単位のテスト実装
6.3.3 Playbook単位のテスト実装
6.3.4 Ansibleを使ったテストの記述方法
6.4 インテグレーションテストの実装
6.4.1 インテグレーションテストの設計
6.4.2 インテグレーションテストのタスク実装
6.4.3 インテふレーションテストの実装
6.5 自動テストで注目すべきポイント
6.6 演習環境のクリア
6.7 まとめ

第7章 CIのパイプライン
7.1 パイプラインとは
7.1.1 パイプラインの役割
7.1.2 インプットとアウトプット
7.1.3 パイプラインの注意点
7.2 パイプラインを使った変更要求への対応
7.2.1 バックアップの有効化
7.2.2 確かめられたこと、確かめられていないこと
7.2.3 テストを追加する
7.3 さまざまな問題を検知する
7.3.1 規約「非」準拠を検知する
7.3.2 デグレードを検知する
7.3.3 連携(インテグレーション)の不備を検知する
7.4 パイプラインを編集する
7.5 演習環境のクリア
7.6 まとめ

第8章 インフラCIを循環させる仕組み
8.1 サイクルを構成する要素
8.1.1 要求を分解し作業を明確化する
8.1.2 チームでサイクルを回すための仕組み
8.2 インフラCIの実践
8.2.1 要求をチケットへ起票する
8.2.2 ブランチを作成して変更を行う
8.2.3 パイプラインの起動
8.2.4 マージリクエストとレビュー
8.3 チケットの管理
8.3.1 ITSとVCSの連携
8.3.2 チケットの粒度
8.4 ブランチの管理
8.4.1 ブランチの運用
8.4.2 マージリクエスト
8.4.3 ブランチ戦略
8.5 レビューの重要性
8.5.1 レビューの目的
8.5.2 レビューの観点
8.6 サイクルの再確認
8.6.1 作業開始のトリガーを作成する
8.6.2 変更作業の実施
8.6.3 作業の検証とレビュー依頼
8.6.4 依頼内容の確認
8.6.5 追加実装と確認、再レビュー依頼
8.6.6 再レビューの実施
8.7 演習環境のクリア
8.8 まとめ

第9章 より品質の高い成果物を作る
9.1 成果物の品質を高める
9.1.1 システムテストのパイプラインへの組み込み
9.1.2 イメージ化した成果物を再利用する
9.2 パイプラインでシステムのあるべき状態を確認する
9.2.1 インフラCIとシステムテストの関係
9.2.2 負荷テストの目的を決める
9.2.3 Locustを用いた負荷テストを実装する
9.2.4 システムテストをパイプラインへ組み込む
9.2.5 パイプラインを分割する
9.2.6 システムテストのパイプラインをクリーンアップ
9.3 コンテナイメージ化した成果物
9.3.1 パイプラインの概要
9.3.2 Dockerfileを利用したコンテナのビルド
9.3.3 Playbookによるコンテナのデプロイ
9.3.4 イメージ化した成果物のテスト
9.3.5 コンテナ環境のクリーンアップ
9.4 まとめ

第10章 インテグレーションからデリバリーへ
10.1 CIとCD
10.1.1 CDのサイクル
10.1.2 デリバリーとリリース
10.2 代表的なデリバリーとリリース方式
10.2.1 Blue/Greenデプロイメント
10.2.2 カナリアリリース
10.3 使い捨てにできない本番教への対処
10.3.1 本番環境へ変更を積み重ねる
10.3.2 ブランチとパイプラインによる変更の再現
10.4 サイクルを改善するためのフィードバック
10.4.1 インフラCI/CDのサイクルから得られる情報例
10.4.2 ビジネスとの乖離を防ぐ
10.5 まとめ

第11章 自動化を超えて継続的改善へ
11.1 インフラCIとは
11.2 インフラCIの限界
11.3 どこから始めるのか
11.4 最後に

A 付録
A.1 演習ガイド
A.1.1 第3章
A.1.2 第4章
A.1.3 第5章
A.1.4 第6章
A.1.5 第7章
A.1.6 第8章
A.1.7 第9章
A.2 Nested Virtualizationの有効化方法
A.2.1 macOS + VMware Fusion
A.2.2 Microsoft Windows 10 Professional + Hyper-V(Nested)
A.2.3 Linux + Nested KVM
A.3 演習でのパッケージインストールに関わるエラー

索引

書籍目次

Posted by shi-n