Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

Book description

本書は、はじめにInfrastructure as Codeの原則と考え方を説明し、次にダイナミックインフラストラクチャプラットフォーム、インフラストラクチャ定義ツール、サーバ構成ツール、インフラストラクチャサービスの4つにカテゴライズして解説します。その上で、プロビジョニングやサーバーテンプレート管理のパターンから、テスト、変更管理パイプライン、組織やワークフローのプラクティスまでを詳述しており、Infrastructure as Codeを網羅的に理解することができます。各ツールの使い方よりも、背景にあるコンセプトや考え方の説明に重点を置くことで、特定のツールに縛られることなく、Infrastructure as Codeを適切に実現することを目指します。

Table of contents

  1. 監訳者まえがき
  2. はじめに (1/2)
  3. はじめに (2/2)
  4. 目 次 (1/2)
  5. 目 次 (2/2)
  6. 第Ⅰ部 基礎
  7. 1章 課題と原則
    1. 1.1 なぜInfrastructure as Codeなのか
      1. 1.2 Infrastructure as Codeとは何か
        1. 1.2.1 Infrastructure as Codeの目標
      2. 1.3 ダイナミックインフラストラクチャが生み出した課題
        1. 1.3.1 サーバースプロール
        2. 1.3.2 構成ドリフト
        3. 1.3.3 スノーフレークサーバー
        4. 1.3.4 脆いインフラストラクチャ
        5. 1.3.5 オートメーション恐怖症
        6. 1.3.6 システム疲労
      3. 1.4 Infrastructure as Codeの原則
        1. 1.4.1 簡単に再現できるシステム
        2. 1.4.2 使い捨てにできるシステム
        3. 1.4.3 統一的なシステム
        4. 1.4.4 反復できるプロセス
        5. 1.4.5 絶えず変化するデザイン
      4. 1.5 プラクティス
        1. 1.5.1 定義ファイルの利用
        2. 1.5.2 自己記述システムとプロセス
        3. 1.5.3 あらゆるものをバージョン管理する
        4. 1.5.4 継続的テストシステム、プロセス
        5. 1.5.5 一斉変更ではなく小刻みな変更
        6. 1.5.6 継続的にサービスを利用可能状態に保つ
      5. 1.6 アンチフラジャイル:「堅牢」を越えて
        1. 1.6.1 アンチフラジャイルなITシステムの秘密の成分
      6. 1.7 まとめ
      7. 1.8 このあとの章について
  8. 2章 ダイナミックインフラストラクチャプラットフォーム
    1. 2.1 ダイナミックインフラストラクチャプラットフォームとは何か
      1. 2.2 ダイナミックインフラストラクチャプラットフォームの要件
        1. 2.2.1 プログラマブル
        2. 2.2.2 オンデマンド
        3. 2.2.3 セルフサービス
      2. 2.3 プラットフォームから提供されるインフラストラクチャリソース
        1. 2.3.1 計算リソース
        2. 2.3.2 ストレージリソース
        3. 2.3.3 ネットワークリソース
      3. 2.4 ダイナミックインフラストラクチャプラットフォームのタイプ
        1. 2.4.1 パブリッククラウドのIaaS
        2. 2.4.2 コミュニティクラウドのIaaS
        3. 2.4.3 プライベートクラウドのIaaS
        4. 2.4.4 アンチパターン:手回し式クラウド
        5. 2.4.5 ハイブリッド、ミックスクラウド
        6. 2.4.6 ベアメタルクラウド
      4. 2.5 ダイナミックインフラストラクチャプラットフォームに関する判断のポイント
        1. 2.5.1 パブリックかプライベートか
        2. 2.5.2 クラウドのポータビリティ
      5. 2.6 クラウドと仮想化に対するマシンレベルの共感
      6. 2.7 まとめ
  9. 3章 インフラストラクチャ定義ツール
    1. 3.1 Infrastructure as Codeのためのツールの選択
      1. 3.1.1 要件:スクリプトで操作できるインターフェイス
        1. 3.1.2 要件:コマンドラインツールの無人モード
        2. 3.1.3 要件:無人実行のサポート
        3. 3.1.4 要件:設定の外在化
      2. 3.2 構成定義ファイル
        1. 3.2.1 構成定義の再利用可能性
      3. 3.3 インフラストラクチャ定義ツールの操作
        1. 3.3.1 手続き型スクリプトによるインフラストラクチャのプロビジョニング
        2. 3.3.2 インフラストラクチャの宣言的な定義
        3. 3.3.3 インフラストラクチャ定義ツールの使い方
        4. 3.3.4 サーバーの構成/設定
      4. 3.4 構成レジストリ
        1. 3.4.1 軽い構成レジストリ
        2. 3.4.2 構成レジストリはCMDBか
        3. 3.4.3 CMDBの監査、修正のアンチパターン
        4. 3.4.4 CMDBに対するInfrastructure as Codeのアプローチ
      5. 3.5 まとめ
  10. 4章 サーバー構成ツール
    1. 4.1 自動化されたサーバー管理の目標
      1. 4.2 さまざまなサーバー管理機能に対応するツール (1/2)
      2. 4.2 さまざまなサーバー管理機能に対応するツール (2/2)
        1. 4.2.1 サーバー作成のためのツール
        2. 4.2.2 サーバーの構成/設定のためのツール
        3. 4.2.3 サーバーテンプレートのパッケージングのためのツール
        4. 4.2.4 サーバー上でコマンドを実行するためのツール
        5. 4.2.5 中央のレジストリに格納されている構成/設定情報の使い方
      3. 4.3 サーバー変更管理のモデル
        1. 4.3.1 随時変更
        2. 4.3.2 構成/設定の同期
        3. 4.3.3 イミュータブルインフラストラクチャ
        4. 4.3.4 コンテナ化されたサービス
      4. 4.4 コンテナ (1/2)
      5. 4.4 コンテナ (2/2)
        1. 4.4.1 Rubyアプリケーション管理がコンテナによってどのように変わるか
        2. 4.4.2 コンテナは仮想マシンか
        3. 4.4.3 仮想マシンよりもコンテナ
        4. 4.4.4 コンテナの実行
        5. 4.4.5 コンテナのセキュリティ
      6. 4.5 まとめ
  11. 5章 主要なインフラストラクチャサービス
    1. 5.1 インフラストラクチャサービス、ツールが満たすべき条件
      1. 5.1.1 外部定義を使えるツールを選ぶ
        1. 5.1.2 インフラストラクチャがダイナミックだという前提で作られたツールを選ぶ
        2. 5.1.3 ライセンスがクラウド互換になっている製品を選ぶ
        3. 5.1.4 疎結合をサポートする製品を選ぶ
      2. 5.2 チーム間でのサービスの共有
        1. 5.2.1 サービスインスタンステンプレート
      3. 5.3 モニタリング:アラート、計測、ロギング
        1. 5.3.1 アラート:何かまずいことが起きたら教えてくれ
        2. 5.3.2 指標計測:データの収集と分析
        3. 5.3.3 ログの集約と分析
      4. 5.4 サービスディスカバリ
        1. 5.4.1 サーバーサイドサービスディスカバリのパターン
        2. 5.4.2 クライアントサイドサービスディスカバリのパターン
      5. 5.5 分散プロセス管理
        1. 5.5.1 サーバーロールによるプロセスのオーケストレーション
        2. 5.5.2 コンテナによるプロセスのオーケストレーション
        3. 5.5.3 短いジョブのスケジューリング
        4. 5.5.4 コンテナオーケストレーションツール
      6. 5.6 ソフトウェアのデプロイ
        1. 5.6.1 デプロイパイプラインソフトウェア
        2. 5.6.2 ソフトウェアのパッケージング
      7. 5.7 まとめ
  12. 第Ⅱ部 パターン
  13. 6章 サーバーのプロビジョニングのパターン
    1. 6.1 サーバーのプロビジョニング
      1. 6.1.1 サーバーのライフサイクル
        1. 6.1.2 サーバーには何が含まれるか
        2. 6.1.3 サーバーに含まれるものの分類
        3. 6.1.4 サーバーロール
      2. 6.2 サーバー作成のパターン
        1. 6.2.1 アンチパターン:手作りサーバー
        2. 6.2.2 プラクティス:サーバー作成オプションをスクリプトでラッピングせよ
        3. 6.2.3 アンチパターン:ホットクローンによって作成されたサーバー
        4. 6.2.4 パターン:サーバーテンプレート
        5. 6.2.5 アンチパターン:スノーフレークファクトリ
      3. 6.3 新サーバーのブートストラップのパターン
        1. 6.3.1 プッシュブートストラップ
        2. 6.3.2 プルブートストラップ
        3. 6.3.3 プラクティス:すべての新サーバーインスタンスをスモークテストせよ
      4. 6.4 まとめ
  14. 7章 サーバーテンプレート管理のパターン
    1. 7.1 ストックテンプレート:ほかに管理してくれる人はいないか?
      1. 7.2 テンプレートを使ったサーバーのプロビジョニング
        1. 7.2.1 作成時のプロビジョニング
        2. 7.2.2 テンプレート内でのプロビジョニング
        3. 7.2.3 作成時のプロビジョニングとテンプレートによるプロビジョニングのバランスの取り方
      2. 7.3 サーバーテンプレートの構築プロセス
        1. 7.3.1 複数のプラットフォームのためのテンプレートの作成
      3. 7.4 原始イメージ
        1. 7.4.1 アンチパターン:ホットクローンによって作成されたサーバーテンプレート
        2. 7.4.2 OSインストレーションイメージからのテンプレートの焼き込み
        3. 7.4.3 ストックイメージからのテンプレートの焼き込み
        4. 7.4.4 ユニカーネルからのテンプレートの構築
        5. 7.4.5 ブートをしないサーバーテンプレートのカスタマイズ
      4. 7.5 サーバーテンプレートのアップデート
        1. 7.5.1 テンプレートの「温め直し」
        2. 7.5.2 フレッシュなテンプレートの焼き込み
        3. 7.5.3 サーバーテンプレートのバージョン管理
      5. 7.6 ロールのためのテンプレートの構築
        1. 7.6.1 パターン:階層化テンプレート
        2. 7.6.2 テンプレートのためのベーススクリプトの共有
      6. 7.7 サーバーテンプレート管理の自動化
        1. 7.7.1 焼き込み前のサーバーのカスタマイズ
        2. 7.7.2 プラクティス:サーバーテンプレートを自動テストせよ
      7. 7.8 まとめ
  15. 8章 サーバーのアップデート/変更のパターン
    1. 8.1 サーバー変更管理モデル
      1. 8.1.1 随時変更
        1. 8.1.2 継続的な構成/設定の同期
        2. 8.1.3 イミュータブルサーバー
        3. 8.1.4 コンテナ化サーバー
      2. 8.2 一般的なパターンとプラクティス
        1. 8.2.1 プラクティス:サーバーテンプレートを最小化せよ
        2. 8.2.2 プラクティス:サーバーテンプレートの変更時にサーバーを交換せよ
        3. 8.2.3 パターン:フェニックスサーバー
      3. 8.3 継続的デプロイのパターンとプラクティス (1/2)
      4. 8.3 継続的デプロイのパターンとプラクティス (2/2)
        1. 8.3.1 パターン:マスターレス構成管理
        2. 8.3.2 プラクティス:cronを利用せよ
        3. 8.3.3 継続的同期フロー
        4. 8.3.4 構成管理の対象外の部分
      5. 8.4 イミュータブルサーバーのパターンとプラクティス
        1. 8.4.1 アーティファクトとしてのサーバーイメージ
        2. 8.4.2 イミュータブルサーバーによる構成管理ツールの単純化
        3. 8.4.3 イミュータブルサーバーのフロー
        4. 8.4.4 イミュータブルサーバーのブートストラップ時の構成/設定
        5. 8.4.5 サーバーアップデートのトランザクション化
      6. 8.5 構成定義管理のプラクティス
        1. 8.5.1 プラクティス:構成定義を最小限に抑えよ
        2. 8.5.2 定義の構造化
        3. 8.5.3 プラクティス:優れた設計を生み出すテスト駆動開発(TDD)を使え
      7. 8.6 まとめ
  16. 9章 インフラストラクチャ定義のパターン
    1. 9.1 環境
      1. 9.1.1 アンチパターン:手作りのインフラストラクチャ
        1. 9.1.2 インフラストラクチャスタックをコードとして定義する
        2. 9.1.3 アンチパターン:環境ごとの定義ファイル
        3. 9.1.4 パターン:再利用できる定義ファイル
        4. 9.1.5 プラクティス:スタック定義をテスト、プロモートせよ
        5. 9.1.6 セルフサービス環境
      2. 9.2 インフラストラクチャの構造化 (1/3)
      3. 9.2 インフラストラクチャの構造化 (2/3)
      4. 9.2 インフラストラクチャの構造化 (3/3)
        1. 9.2.1 アンチパターン:モノリシックスタック
        2. 9.2.2 「リフトアンドシフト」によるインフラのマイグレーションを避ける
        3. 9.2.3 アプリケーション環境の複数のスタックへの分割
        4. 9.2.4 スタック間での構成/設定パラメータの管理
        5. 9.2.5 インフラストラクチャ要素の共有
        6. 9.2.6 プラクティス:アプリケーションコードとインフラストラクチャコードを統一的に管理せよ
        7. 9.2.7 定義の共有に対するアプローチ
        8. 9.2.8 プラクティス:変更の範囲に合わせてインフラストラクチャを設計せよ
        9. 9.2.9 実例:マイクロサービスのためのインフラストラクチャ設計
      5. 9.3 定義ツールの実行
      6. 9.4 まとめ
  17. 第Ⅲ部 プラクティス
  18. 10章 インフラストラクチャのためのソフトウェア工学プラクティス
    1. 10.1 システムの品質
      1. 10.1.1 品質の低いシステムは変更が難しい
        1. 10.1.2 高品質システムは従来よりも簡単かつ安全に変更できる
        2. 10.1.3 インフラストラクチャの品質の着目点
        3. 10.1.4 高速フィードバック
      2. 10.2 インフラストラクチャ管理のためのVCS
        1. 10.2.1 VCSで管理すべきもの
      3. 10.3 継続的インテグレーション(CI)
      4. 10.4 継続的なブランチのテストは継続的インテグレーションではない
        1. 10.4.1 ビルドエラーの原因究明
        2. 10.4.2 失敗したテストの無視
        3. 10.4.3 インフラストラクチャのためのCI
      5. 10.5 継続的デリバリー(CD)
        1. 10.5.1 インテグレーション段階の問題点
        2. 10.5.2 デプロイパイプラインと変更パイプライン
        3. 10.5.3 継続的デリバリーは継続的デプロイではないということ
      6. 10.6 コードの品質
        1. 10.6.1 クリーンコード
        2. 10.6.2 プラクティス:技術的負債をマネジメントせよ
      7. 10.7 大きなインフラストラクチャ変更の管理
        1. 10.7.1 機能トグル
      8. 10.8 まとめ
  19. 11章 インフラストラクチャの変更のテスト
    1. 11.1 テストに対するアジャイルのアプローチ
      1. 11.1.1 高速フィードバックのためのテストの自動化
        1. 11.1.2 テストスイートの有機的な構築
      2. 11.2 テストスイートの構造化:テストピラミッド
        1. 11.2.1 バランスの悪いテストスイートにならないようにするために
        2. 11.2.2 プラクティス:できる限り低い水準でテストせよ
        3. 11.2.3 プラクティス:必要な階層だけを実装せよ
        4. 11.2.4 プラクティス:テストスイートをひんぱんに刈り込め
        5. 11.2.5 プラクティス:テストの有効性を継続的に評価せよ
      3. 11.3 バランスの取れたテストスイートの実装 (1/2)
      4. 11.3 バランスの取れたテストスイートの実装 (2/2)
        1. 11.3.1 低水準テスト
        2. 11.3.2 中水準テスト
        3. 11.3.3 高水準テスト
        4. 11.3.4 運用品質のテスト
      5. 11.4 テストコードの管理 (1/2)
      6. 11.4 テストコードの管理 (2/2)
        1. 11.4.1 プラクティス:テストコードとテスト対象のコードをいっしょに管理せよ
        2. 11.4.2 アンチパターン:反射的テスト
        3. 11.4.3 テストのためのコンポーネントの切り離しのテクニック
        4. 11.4.4 コンポーネントを切り離せるようにするためのリファクタリング
        5. 11.4.5 外部依存コンポーネントの管理
        6. 11.4.6 テストのセットアップ
      7. 11.5 テストのロールとワークフロー
        1. 11.5.1 原則:構築したものに対するテストは自分で書け
        2. 11.5.2 テストを書く習慣
        3. 11.5.3 原則:全員がテストツールを使えるようにせよ
        4. 11.5.4 QAアナリストの価値
        5. 11.5.5 テスト駆動開発(TDD)
      8. 11.6 まとめ
  20. 12章 インフラストラクチャの変更管理パイプライン
    1. 12.1 変更管理パイプラインのメリット
      1. 12.2 パイプライン設計のガイドライン
        1. 12.2.1 ステージ間での統一性を保証せよ
        2. 12.2.2 すべての変更にすばやくフィードバックを返せ
        3. 12.2.3 マニュアルステージの前に自動ステージを実行せよ
        4. 12.2.4 できる限り早く本番環境に近い環境でテストせよ
      2. 12.3 パイプラインの基本設計 (1/2)
      3. 12.3 パイプラインの基本設計 (2/2)
        1. 12.3.1 ローカル開発ステージ
        2. 12.3.2 ビルドステージ
        3. 12.3.3 構成アーティファクトの公開
        4. 12.3.4 自動テストステージ
        5. 12.3.5 人間による確認/チェックステージ
        6. 12.3.6 本番環境への適用
        7. 12.3.7 パイプラインのリズム
      4. 12.4 パイプラインを使うためのプラクティス
        1. 12.4.1 プラクティス:すべての変更で本番対応の品質を証明せよ
        2. 12.4.2 プラクティス: すべての変更をパイプラインの先頭からスタートさせよ
        3. 12.4.3 プラクティス:失敗が起きたらラインを止めよ
      5. 12.5 より複雑なシステムへのパイプラインのスケールアップ (1/2)
      6. 12.5 より複雑なシステムへのパイプラインのスケールアップ (2/2)
        1. 12.5.1 パターン:ファンインパイプライン
        2. 12.5.2 プラクティス:パイプラインを短く保て
        3. 12.5.3 プラクティス:パイプラインを分割せよ
        4. 12.5.4 インテグレーションモデル
      7. 12.6 コンポーネントの間の依存関係を処理するテクニック (1/2)
      8. 12.6 コンポーネントの間の依存関係を処理するテクニック (2/2)
        1. 12.6.1 パターン:ライブラリ依存
        2. 12.6.2 パターン:サービスインスタンスのセルフプロビジョニング
        3. 12.6.3 プレリリースライブラリのビルドの提供
        4. 12.6.4 コンシューマに対するサービスのテストインスタンスの提供
        5. 12.6.5 コンシューマとしてサービスのテストインスタンスを利用する
      9. 12.7 コンポーネント間のインターフェイスを管理するためのプラクティス
        1. 12.7.1 プラクティス:インターフェイスの下位互換性を確保せよ
        2. 12.7.2 プラクティス:リリースとデプロイを切り離せ
        3. 12.7.3 プラクティス:バージョン耐性を保証せよ
        4. 12.7.4 プラクティス:テストダブルを用意せよ
        5. 12.7.5 プラクティス:コントラクトテストでプロバイダをテストせよ
        6. 12.7.6 プラクティス:参照コンシューマを使ってテストせよ
        7. 12.7.7 プラクティス:プロバイダインターフェイスをスモークテストせよ
        8. 12.7.8 プラクティス:コンシューマ主導のコントラクト(CDC)テストを実施せよ
      10. 12.8 まとめ
  21. 13章 インフラストラクチャチームのワークフロー
    1. 13.1 動くものは何でも自動化する
      1. 13.1.1 手作業による変更
        1. 13.1.2 その場しのぎのオートメーション
        2. 13.1.3 自律的なオートメーション
        3. 13.1.4 自律的なオートメーションのワークフロー
      2. 13.2 ローカルサンドボックスの使い方
        1. 13.2.1 ローカル仮想化を使ったサンドボックス
        2. 13.2.2 ローカルテストのサンプルワークフロー
        3. 13.2.3 仮想化プラットフォームを使ったサンドボックス
      3. 13.3 コードベースの構造化のパターン
        1. 13.3.1 アンチパターン:ブランチを基礎とするコードベース
        2. 13.3.2 パターン:コンポーネントごとのトランク
        3. 13.3.3 パターン:単一のトランク
      4. 13.4 ワークフローの有効性
        1. 13.4.1 変更の加速
        2. 13.4.2 コードレビュー
        3. 13.4.3 ワークフローにガバナンスを組み込む
      5. 13.5 まとめ
  22. 14章 継続性とダイナミックインフラストラクチャ
    1. 14.1 サービスの継続性
      1. 14.1.1 本物の可用性
        1. 14.1.2 復旧のためのダイナミックサーバープール
        2. 14.1.3 ダイナミックインフラストラクチャを意識したソフトウェア設計
        3. 14.1.4 継続性のためのコンパートメント化
      2. 14.2 ゼロダウンタイム変更 (1/2)
      3. 14.2 ゼロダウンタイム変更 (2/2)
        1. 14.2.1 パターン:ブルー-グリーン交換
        2. 14.2.2 パターン:フェニックス交換
        3. 14.2.3 プラクティス:交換のスコープを絞り込め
        4. 14.2.4 パターン:カナリア交換
        5. 14.2.5 ゼロダウンタイム交換のためのトラフィックのルーティング
        6. 14.2.6 データをともなうゼロダウンタイム変更
      4. 14.3 データの継続性
        1. 14.3.1 レプリケートによる冗長なデータの生成
        2. 14.3.2 データの再生成
        3. 14.3.3 データの永続化の委託
        4. 14.3.4 永続ストレージへのバックアップ
      5. 14.4 ディザスタリカバリ (1/2)
      6. 14.4 ディザスタリカバリ (2/2)
        1. 14.4.1 継続的ディザスタリカバリ
        2. 14.4.2 DRプラン:災害のためのプランニング
        3. 14.4.3 プラクティス:コールドスタンバイではなく再構築せよ
        4. 14.4.4 パイプラインによる継続的なモニタリング
      7. 14.5 セキュリティ (1/2)
      8. 14.5 セキュリティ (2/2)
        1. 14.5.1 システムブリーチの自動的な消去
        2. 14.5.2 防御としての信頼性の高いアップデート
        3. 14.5.3 パッケージの出所
        4. 14.5.4 ハードニングの自動化
        5. 14.5.5 パイプライン内でのセキュリティチェックの自動化
        6. 14.5.6 脆弱性としての変更管理パイプライン
        7. 14.5.7 クラウドアカウントによるセキュリティリスクのマネジメント
      9. 14.6 まとめ
  23. 15章 Infrastructure as Codeのための組織
    1. 15.1 発展的なアーキテクチャ
      1. 15.1.1 実戦演習
        1. 15.1.2 Trailblazerパイプラインから始める
      2. 15.2 効果測定 (1/2)
      3. 15.2 効果測定 (2/2)
        1. 15.2.1 求める結果について合意を得ることを優先する
        2. 15.2.2 チームのために役立つ指標を選択する
        3. 15.2.3 リードタイムの監視と改善
        4. 15.2.4 カンバンを使った仕事の可視化
        5. 15.2.5 レトロスペクティブとポストモーテム
      4. 15.3 ユーザーに力を与える組織
        1. 15.3.1 職能分割モデルの落とし穴
        2. 15.3.2 セルフサービスモデルを採り入れる
        3. 15.3.3 完全な責任を引き受ける:構築するのも運用するのも同じチーム
        4. 15.3.4 職能横断型チームの組織
      5. 15.4 継続的変更管理を通じたガバナンス
        1. 15.4.1 信頼できる部品の供給
        2. 15.4.2 パイプラインによる運用準備完了の証明
        3. 15.4.3 品質に対する責任の共有
        4. 15.4.4 自動プロセスのレビューと監査
        5. 15.4.5 問題点を検出、是正するための時間の短縮化
      6. 15.5 まとめ:決して終わりはない
  24. 索 引 (1/2)
  25. 索 引 (2/2)

Product information

  • Title: Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス
  • Author(s): Kief Morris, 宮下 剛輔, 長尾 高弘
  • Release date: March 2017
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873117966

You might also like

book

入門 Kubernetes

by Kelsey Hightower, Brendan Burns, Joe Beda, 松浦 隼人

本書は、Kubernetesコンテナオーケストレータの核となるコンセプトから使い方までを解説するとともに、アプリケーションの開発やメンテナンスを改善するためにKubernetesとそのAPIがどのように役立つのかを説明します。はじめにKubernetesの概要と、Dockerなどのコンテナ技術を利用したアプリケーション開発の利点と使用方法について述べ、次にKubernetes自体をデプロイする方法を詳述します。そして、アプリケーションのライフサイクルに関係するDeploymentや、Kubernetesとストレージの統合について学び、実際に使われているアプリケーションをKubernetes上でデプロイする方法を紹介します。

book

詳解 Terraform 第3版 ―Infrastructure as Codeを実現する

by Yevgeniy Brikman, 松浦 隼人

本書は、Terraformのシンプルな宣言的表現によって、コマンド操作で、インフラをデプロイし管理する方法を豊富なサンプルコードを使って解説します。 Terraformがインフラの状態をどのように管理し、ファイルのレイアウト、分離、ロックにどのように影響するかを学びます。またTerraformを使ったサーバクラスタやロードバランサ、データベースのデプロイ、Terraformモジュールでの再利用可能なインフラの作成、ゼロダウンタイムデプロイを実現するための高度なTerraformの文法を解説します。さらにTerraformの各種ファイルにスケーラビリティを持たせた状態で管理する方法や、パスワードなどの機密情報をTerraformでうまく管理する方法、テストまでを詳述します。 Terraformの基本から、大規模なトラフィックと多数の開発者チームをサポートするフルスタックの運用までを包括的に学ぶ本書は、開発者、システム管理者必携の一冊です。Terraformバージョン1.0以降対応。

book

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

by Chris Dawson, Ben Straub, 池田 尚史, 笹井 崇司

本書は、さまざまな言語とGitHub APIを使って、いろいろなツールを作るアイデアを紹介する書籍です。オープンソースのWikiであるGollumを使う画像整理ツール、PythonとSearch APIを使ってレポジトリを検索するGUIツール、Gist APIを使ったRubyサーバーを作成します。またJavaScriptのチャットロボットHubotを使ってGitHubの通知を行う方法、JavaScriptとGit Data APIを使ってGitHubにシングルページアプリケーションをホストする方法なども紹介します。多彩なGitHub APIを使いながらツールを作ることで、ワークフロー構築のアイデアを得ることができる一冊です。

book

Docker

by Adrian Mouat, Sky株式会社 玉川 竜司

本書はオープンソースのコンテナ管理ソフトウェア、Dockerの基礎から応用までを網羅した総合的な解説書です。はじめに開発環境をセットアップし、シンプルなWebアプリケーションのビルドについて解説した上で、コンテナの開発、テスト、結合に加えて、デプロイの方法、実動システムの効率的なモニタリングとロギングを紹介します。そして複数のホストからなるDockerコンテナのクラスタを、安全かつ高い信頼性の下で実行するために必要な高度なテクニックやツールについて紹介します。さらにネットワークやセキュリティについても詳述。Dockerとそのエコシステムを本格的に活用したい開発者、運用エンジニア、システム開発者必携の一冊です。