DevOpsとソフトウェアデリバリの基礎

―本番環境へのデプロイと運用の実践ガイド

[cover photo]
TOPICS
System/Network
発行年月日
PRINT LENGTH
544 (予定)
ISBN
978-4-8144-0187-1
原書
Fundamentals of DevOps and Software Delivery
FORMAT
Print
Print
5,280円

本書は、DevOpsとソフトウェアデリバリに関して、実際に手を動かしながら学んでいくハンズオンガイドです。アプリケーションコードを本番環境にデプロイし、安定して運用しながら、ユーザーや企業に継続的な価値を届けるために必要なツールと手法を幅広く取り上げます。クラウドへのアプリケーションやマイクロサービスのデプロイ、Infrastructure as Code(IaC)によるインフラストラクチャ管理、CI/CDパイプラインによるソフトウェアデリバリライフサイクルの自動化をはじめ、ネットワークの設定、データストアの構築、監視の導入まで、現代のソフトウェア開発・運用に欠かせない考え方や手法を体系的に学びます。

目次

はじめに

1章 アプリのデプロイ方法
    1.1 例:サンプルアプリをローカルにデプロイする
    1.2 アプリをサーバにデプロイする
        1.2.1 オンプレミスとクラウドホスティング
        1.2.2 例:PaaS(Render)を使ってアプリをデプロイする
        1.2.3 例:IaaS(AWS)を使ってアプリをデプロイする
    1.3 デプロイの選択肢を比較する
        1.3.1 オンプレミス対クラウド
        1.3.2 IaaS 対PaaS
    1.4 DevOps の進化
    1.5 DevOps の取り組みを採用する
    1.6 まとめ

2章 コードとしてのインフラの管理方法
    2.1 IaC のメリット
    2.2 アドホックスクリプト
        2.2.1 例:Bash スクリプトでEC2 インスタンスをデプロイする
        2.2.2 アドホックスクリプトの評価
    2.3 構成管理ツール
        2.3.1 例:Ansible でEC2 インスタンスをデプロイする
        2.3.2 例:Ansible でサーバを設定する
        2.3.3 構成管理ツールの評価
    2.4 サーバテンプレートツール
        2.4.1 例:Packer で仮想マシンイメージを作成する
        2.4.2 サーバテンプレートツールの評価
    2.5 プロビジョニングツール
        2.5.1 例:OpenTofu を使ったEC2 インスタンスのデプロイ
        2.5.2 例:OpenTofu を使ったインフラの更新と削除
        2.5.3 例:OpenTofu モジュールを使ったEC2 インスタンスのデプロイ
        2.5.4 例:OpenTofu レジストリモジュールを使ったEC2 インスタンスのデプロイ
        2.5.5 プロビジョニングツールの評価
    2.6 複数のIaC ツールを組み合わせて使う
        2.6.1 プロビジョニングと構成管理
        2.6.2 プロビジョニングとサーバテンプレート
        2.6.3 プロビジョニングとサーバテンプレートとオーケストレーション
    2.7 IaC の導入
    2.8 まとめ

3章 オーケストレーションツールによるアプリ管理方法
    3.1 オーケストレーション入門
    3.2 サーバオーケストレーション
        3.2.1 例:Ansible を使ってアプリを安全に確実にデプロイする
        3.2.2 例:Ansible とnginx でロードバランサをデプロイする
        3.2.3 例:Ansible で更新を展開する
    3.3 仮想マシンオーケストレーション
        3.3.1 例:Packer で仮想マシンイメージをビルドする
        3.3.2 例:OpenTofu でAuto Scaling グループに仮想マシンイメージをデプロイする
        3.3.3 例:OpenTofu でApplication Load Balancer をデプロイする
        3.3.4 例:OpenTofu とAuto Scaling グループで更新を展開する
    3.4 コンテナオーケストレーション
        3.4.1 例:Docker 入門
        3.4.2 例:Node.js アプリのDocker イメージを作成する
        3.4.3 例:Kubernetes でDocker アプリをデプロイする
        3.4.4 例:Kubernetes でロードバランサをデプロイする
        3.4.5 例:Kubernetes で更新を展開する
        3.4.6 例:EKS を使ってAWS にKubernetes クラスタをデプロイする
        3.4.7 例:Docker イメージをECR にプッシュする
        3.4.8 例:EKS クラスタにDocker アプリをデプロイする
    3.5 サーバレスオーケストレーション
        3.5.1 例:AWS Lambda でサーバレス関数をデプロイする
        3.5.2 例:Lambda 関数URL を作成する
        3.5.3 例:AWS Lambda で更新を展開する
    3.6 オーケストレーション手法の比較
    3.7 まとめ

4章 コードのバージョン管理・ビルド・テスト方法
    4.1 バージョン管理
        4.1.1 例:コードをGit リポジトリにする
        4.1.2 例:GitHub にコードを保存する
        4.1.3 バージョン管理の推奨事項
    4.2 ビルドシステム
        4.2.1 例:npm を使ってビルドを設定する
        4.2.2 依存関係の管理
        4.2.3 例:npm で依存関係を追加する
    4.3 自動テスト
        4.3.1 例:Node.js アプリに自動テストを追加する
        4.3.2 例:OpenTofu コードに自動テストを追加する
        4.3.3 テストの推奨事項
    4.4 まとめ

5章 継続的インテグレーションと継続的デリバリの設定方法
    5.1 継続的インテグレーション
        5.1.1 マージコンフリクトへの対処
        5.1.2 セルフテストビルドによる障害防止
        5.1.3 大規模な変更への対応
        5.1.4 例:GitHub Actions でアプリのテストをCI として実行する
        5.1.5 マシンユーザ認証情報と自動作成された認証情報
        5.1.6 例:AWS とGitHub Actions でOIDC を設定する
        5.1.7 例:GitHub Actions でインフラの自動テストを実行する
    5.2 継続的デリバリ
        5.2.1 デプロイ戦略
        5.2.2 デプロイパイプライン
        5.2.3 デプロイパイプラインの推奨事項
    5.3 まとめ

6章 複数チームと複数環境での作業方法
    6.1 デプロイの分割
        6.1.1 複数環境にデプロイする理由
        6.1.2 複数環境のセットアップ方法
        6.1.3 複数環境の課題
        6.1.4 例:複数のAWS アカウントをセットアップする
    6.2 コードベースの分割
        6.2.1 コードベースを分割する理由
        6.2.2 コードベースの分割方法
        6.2.3 コードベース分割の課題
        6.2.4 例:Kubernetes でマイクロサービスをデプロイする
    6.3 まとめ

7章 ネットワークの設定方法
    7.1 パブリックネットワーキング
        7.1.1 パブリックIP アドレス
        7.1.2 DNS 
        7.1.3 例:Amazon Route 53 でドメイン名を登録・設定する
    7.2 プライベートネットワーキング
        7.2.1 物理プライベートネットワーク
        7.2.2 仮想プライベートネットワーク
    7.3 プライベートネットワークへのアクセス
        7.3.1 城と堀モデル
        7.3.2 ゼロトラストアーキテクチャ
        7.3.3 SSH
        7.3.4 RDP
        7.3.5 VPN
    7.4 プライベートネットワークにおけるサービス間通信
        7.4.1 サービスディスカバリ
        7.4.2 サービス間通信プロトコル
        7.4.3 サービスメッシュ
        7.4.4 例:Istio サービスメッシュとKubernetes マイクロサービス
    7.5 まとめ

8章 通信とストレージのセキュリティ確保方法
    8.1 暗号入門
        8.1.1 暗号化
        8.1.2 ハッシュ
    8.2 セキュアなストレージ
        8.2.1 シークレット管理
        8.2.2 保存データの暗号化
    8.3 セキュアな通信
        8.3.1 TLS
        8.3.2 例:Let’s Encrypt とAWS Secrets Manager を使ったHTTPS
        8.3.3 エンドツーエンド暗号化
    8.4 まとめ

9章 データの保存方法
    9.1 ローカルストレージ:ストレージ
    9.2 プライマリデータストア:リレーショナルデータベース
        9.2.1 データの読み書き
        9.2.2 ACID トランザクション
        9.2.3 スキーマと制約
        9.2.4 例:PostgreSQL、Lambda、スキーママイグレーション
    9.3 キャッシュ:キーバリューストアとCDN 
        9.3.1 キーバリューストア
        9.3.2 CDN
    9.4 ファイルストレージ:ファイルサーバとオブジェクトストア
        9.4.1 ファイルサーバ
        9.4.2 オブジェクトストア
        9.4.3 例:S3 とCloudFront を使ったファイル配信
    9.5 半構造化データと検索:ドキュメントストア
        9.5.1 データの読み書き
        9.5.2 ACID トランザクション
        9.5.3 スキーマと制約
    9.6 分析:カラム型データベース
        9.6.1 カラム型データベースの基本
        9.6.2 分析のユースケース
    9.7 非同期処理:キューとストリーム
        9.7.1 メッセージキュー
        9.7.2 イベントストリーム
    9.8 スケーラビリティと可用性
        9.8.1 リレーショナルデータベース
        9.8.2 NoSQL とNewSQL データベース
        9.8.3 分散システム
    9.9 バックアップと復旧
        9.9.1 バックアップ戦略
        9.9.2 バックアップの推奨事項
        9.9.3 例:PostgreSQL でのバックアップとリードレプリカ
    9.10 まとめ

10章 システムの監視方法
    10.1 ログ
        10.1.1 ログレベル
        10.1.2 ログのフォーマット
        10.1.3 構造化ログ
        10.1.4 ログファイルとローテーション
        10.1.5 ログ集約
    10.2 メトリクス
        10.2.1 メトリクスの種類
        10.2.2 メトリクスの活用
        10.2.3 例:CloudWatch によるメトリクス
    10.3 イベント
        10.3.1 オブザーバビリティ
        10.3.2 トレーシング
        10.3.3 本番環境でのテスト
    10.4 アラート
        10.4.1 トリガー
        10.4.2 通知
        10.4.3 オンコール
        10.4.4 インシデントレスポンス
        10.4.5 例:CloudWatch でのアラート
    10.5 まとめ

11章 DevOps とソフトウェアデリバリの未来
    11.1 インフラレス
    11.2 生成AI 
    11.3 セキュア・バイ・デフォルト
    11.4 プラットフォームエンジニアリング
    11.5 インフラコードの未来
    11.6 まとめ

訳者あとがき