目次
第1部 コンテナ技術の概要と動向,コンテナを活用したアプリケーション開発ワークフローを学ぶ
第1章 アプリケーション開発者のためのコンテナ技術
- 1.1 いまアプリケーション開発者が抱える課題
- 1.1.1 頻繁なリリースと迅速なデプロイ
 - 1.1.2 道具,環境の多様化
 - 1.1.3 役割分担とコラボレーション
 
 - 1.2 コンテナで解決した課題,見過ごされた価値,新たに生じた/複雑化した課題
- 1.2.1 コンテナ技術の概要と特徴
 - 1.2.2 Build/Share/Run ―― コンテナが価値を生むまでの流れ
 - 1.2.3 解決した課題
 - 1.2.4 見過ごされた価値
 - 1.2.5新たに生じた/複雑化した課題
 
 - 1.3 コンテナ活用の幅をアプリケーション開発(Develop)まで広げよう
- 1.3.1 Develop/Build/Share/Run ―― アプリケーション開発を支えるコンテナ
 - 1.3.2 コンテナを使ったアプリケーション開発に必要な要素とエコシステム
 - 1.3.3 代表的な実装
 - Column GitHubの開発者は環境のセットアップを10秒で終わらせる?
 - Column Docker Desktop利用規定変更の影響
 
 - 1.4 まとめ
 
第2章 コンテナ活用で変わる開発体験 ── Dev Container,GitHub Actions
- 2.1 開発環境をコンテナ化する選択肢,作成パターン
- 2.1.1 VS Codeのリモート開発機能によるUIの分離とそのメリット
 - 2.1.2 リモートOSの選択肢
 - Column 「リモート開発」という呼び方で混乱?
 - Column 筆者の開発端末
 
 - 2.2 ハンズオン環境のセットアップとコンテンツの理解
- 2.2.1 ハンズオン環境をセットアップする
 - 2.2.2 ハンズオンコンテンツを入手する
 - 2.2.3 サンプルコードの概要(Java Web アプリケーション)
 - 2.2.4 コーディングする
 - 2.2.5 デバッグする
 - 2.2.6 テストする
 - Column GitHub CodespacesとVS Codeがつながるしくみ
 - Column YAMLファイルの拡張子は.yml? .yaml?
 
 - 2.3 Dev Containerのしくみ
- 2.3.1 環境を定義するdevcontainer.json
 - 2.3.2 ベースとなるコンテナの内容
 - 2.3.3 ベースのベースまで把握することが重要
 - Column Dev Containerは機能から仕様へ
 
 - 2.4 好みのDev Containerを作るには
- Column ドキュメント執筆環境もDev Containerで整える
 
 - 2.5 コンテナアプリケーションのためのワークフロー
- 2.5.1 GitHub Actionsを使ったワークフローを構築する
 - 2.5.2 CIワークフロー
 - 2.5.3 リリースワークフロー
 - Column セキュリティの「シフトレフト」
 - Column コンテナレジストリサービスの選び方
 
 - 2.6 まとめ
 - 2.7 第1部のまとめ
 
第2部 シングルコンテナアプリケーションを作って動かす ── Azure Web App for Containersを使う
第3章 コンテナ実行環境にPaaSを使うという選択肢 ── Web App for Containers
- 3.1 コンテナ技術の適用に立ちはだかる実行環境の労力
- 3.1.1 実行環境の構築
 - 3.1.2 実行環境の運用
 - 3.1.3 アプリケーションの開発,運用に専念
 
 - 3.2 マネージドサービスを使ってコンテナの開発・運用に専念
- 3.2.1 Azureにおける実行環境
 - 3.2.2 App Service(Web App for Containers)でのイメージの動作
 - 3.2.3 App Service(Web App for Containers)の料金
 
 - 3.3 第2部のゴール
- 3.3.1 各章の概要
 
 - 3.4 まとめ
 
第4章 Web App for Containersでのコンテナアプリケーション開発ハンズオン
- 4.1 コンテナ化するサンプルアプリケーションを用意する
- 4.1.1 サンプルアプリケーション ── ToDoリストの概要
 - 4.1.2 Mavenプロジェクトを準備する
 - 4.1.3 HTTP APIを実装する
 - 4.1.4 HTTP APIをテストする
 - 4.1.5 ブラウザでToDoリストを操作する
 
 - 4.2 アプリケーションをコンテナ化してデプロイする
- 4.2.1 Jibを使ってサンプルアプリケーションをコンテナ化する
 - 4.2.2 Web App for Containersにアプリケーションをデプロイする
 - Column Alpineの性能に関して
 
 - 4.3 デプロイスロットを利用したテストやデプロイ操作
- 4.3.1 ステージング環境への修正後イメージのデプロイ
 - 4.3.2 商用とステージングスロットでのA/Bテストの実施
 - 4.3.3 スロットの入れ替えによるブルーグリーンデプロイの実施
 
 - 4.4 IPアドレス制限や任意ドメイン利用をした公開方法
- 4.4.1 IPアドレスでアクセス制限をする構成
 - 4.4.2 カスタムドメインの追加
 - 4.4.3 SSL/TLSサーバ証明書によるカスタムドメインの保護
 
 - 4.5 まとめ
 
第5章 Web App for Containers内のコンテナから別のリソースを利用する
- 5.1 SNATポート ── Web App for Containersでのインターネット通信における必須要素
- 5.1.1 前提となるWeb App for Containersのアーキテクチャ
 - 5.1.2 SNATポートの役割
 
 - 5.2 外部接続時にSNATポートが枯渇しないための対策
- 5.2.1 SNATポートの制限
 - 5.2.2 SNATポートの制限に抵触しないための回避策
 - 5.2.3 データベース接続を例にTCPコネクションを実装する
 - 5.2.4 Web App for ContainersにてNATゲートウェイを利用する際の制約
 - 5.2.5 Web App for Containersからの通信をNATゲートウェイ経由にする手順
 
 - 5.3 内部接続時に利用できるサービスエンドポイント/プライベートエンドポイント
- 5.3.1 サービスエンドポイント/プライベートエンドポイントが必要となるユースケース
 
 - 5.4 CORSへの対応方法
 - 5.5 オンプレミス環境への接続
 - 5.6 まとめ
 
第6章 ユーザーを識別する
- 6.1 Web App for Containersの組込み認証機能
- 6.1.1 サポートされているIDプロバイダ
 
 - 6.2 組込み認証機能のしくみ
- 6.2.1 アーキテクチャ
 - 6.2.2 認証・認可のミドルウェアの役割
 - 6.2.3 ユーザー情報の取得方法
 
 - 6.3 サンプルアプリケーションをGoogle認証でサインインできるようにする
- 6.3.1 準備するもの ── Googleアカウント
 - 6.3.2 Google CloudのIdentity Platformにアプリケーションを登録する
 - 6.3.3 Web App for Containersで認証の設定を行う
 - 6.3.4 認証済みユーザーの情報へアクセスするには
 - Column サインインユーザーの情報をログに記録する
 
 - 6.4 サンプルアプリケーションにサインアウト機能を追加する
- 6.4.1 サインアウトボタンと処理を実装する
 - 6.4.2 一部のページだけ認証不要とするには
 
 - 6.5 まとめ
 
第7章 可用性と回復性を高めるWeb App for Containersの運用設計
- 7.1 PaaS側で行われるメンテナンスに備える
- 7.1.1 メンテナンスの実行がWeb App for Containersで発生する理由
 - 7.1.2 メンテナンスの発生を前提としてWeb App for Containersを構成する
 
 - 7.2 スケールアップやスケールアウトを行う
- 7.2.1 スケールアップとスケールアウトの違い
 - 7.2.2 スケールアップとスケールアウトの使いどころ
 - 7.2.3 App ServiceプランとApp Serviceの関係
 - 7.2.4 スケールアップとスケールアウトの設定方法
 
 - 7.3 可用性ゾーンやAzure Front Doorを構成し,さらに可用性を高める
- 7.3.1 可用性を高める方法
 - 7.3.2 冗長構成にて可用性を高める際に意識すべきポイント
 
 - 7.4 コンテナ外部でのセッション管理 ── Service Connectorを使ってRedisに接続する
- 7.4.1 セッション管理とは
 - 7.4.2 セッション管理に必要なリソースの例
 - 7.4.3 RedisとService Connectorを使用したセッション管理の実装例
 
 - 7.5 コンテナ外部にファイルを保存する ── Blobストレージの活用
- 7.5.1 Blobストレージを使用した実装例
 
 - 7.6 アプリケーションのコールドスタートを防ぐ常時接続設定
 - 7.7 アプリキャッシュで高速化を図る ── ローカルキャッシュのLinux/Web App for Containers版
 - 7.8 まとめ
 
第8章 プラットフォームやアプリケーションを監視し異常を検知する
- 8.1 監視機能
 - 8.2 リソース正常性 ── 作成したリソースの異常検知
- 8.2.1 アラートの設定方法
 - 8.2.2 料金
 
 - 8.3 メトリック ── リソース,アプリケーションのパフォーマンスデータの確認
- 8.3.1 確認のしかたとアラートの設定方法
 - 8.3.2 料金
 
 - 8.4 正常性チェック ── 任意のパスのURL 監視と自動復旧
- 8.4.1 設定方法
 - 8.4.2 チェック対象とするパスのポイント
 
 - 8.5 診断設定 ── 各種ログの出力
- 8.5.1 出力先のオプション
 - 8.5.2 Log Analyticsへの出力設定
 - 8.5.3 ログの確認方法
 - 8.5.4 料金
 
 - 8.6 Application Insights ── アプリケーションの監視
- 8.6.1 設定方法
 - 8.6.2 ログの確認方法
 - 8.6.3 料金
 
 - 8.7 まとめ
 - 8.8 第2部のまとめ
 
第3部 マルチコンテナアプリケーションを作って動かす ── Kubernetes生まれの開発者向けマネージドサービスAzure Container Appsを使う
第9章 コンテナ化の強みを活かせる分散システムにおけるアプリケーション開発
- 9.1 クラウドネイティブアプリケーションとは
- 9.1.1 なぜ今クラウドネイティブアプリケーション開発が注目されているのか
 - 9.1.2 クラウドネイティブなアプリケーションの特徴
 - 9.1.3 オープンソーステクノロジの活用
 - Column Twelve-Factor App ── アプリケーション開発のベストプラクティス
 - Column たくさんのオープンソース全部必要? どう使いこなせばよい?
 
 - 9.2 まとめ
 
第10章 Container Appsでのコンテナアプリケーション開発ハンズオン
- 10.1 サンプルアプリケーションの機能追加と再設計
- 10.1.1 ToDoアプリケーションへの要望
 - 10.1.2 アプリケーションアーキテクチャの検討
 - 10.1.3 コンテナ実行環境の選択肢
 - 10.1.4 システムアーキテクチャの検討
 
 - 10.2 Container Appsとは
- Column Container Appsの設計思想とオープンソース
 
 - 10.3 アプリケーション実行環境を作成する
- 10.3.1 Azure環境の全体アーキテクチャ
 - 10.3.2 リソースグループを作成する
 - 10.3.3 ログを保存するLog Analyticsを作成する
 - 10.3.4 Container Apps環境を作成する
 - 10.3.5 データベースを作成する
 - 10.3.6 コンテナレジストリを作成する
 
 - 10.4 アプリケーションを開発する
- 10.4.1 schedule APIを開発する
 - 10.4.2 Javaでbackend APIを開発する
 - 10.4.3 Reactでフロントエンドを開発する
 - Column REST APIのモックサーバを作るには
 
 - 10.5 GitHub Actionsを使った継続的デプロイの設定をする
- Column Container Appsが自動生成するワークフローを見てみよう
 
 - 10.6 まとめ
 
第11章 Container Appsによるマルチコンテナの運用
- 11.1 コンテナアプリケーションのバージョン管理
- 11.1.1 アプリケーションのアップデート戦略
 - 11.1.2 Container Appsのリビジョン構成
 - 11.1.3 業務に影響が出ないようにbackend APIのバージョンアップをしてみよう
 - 11.1.4 ブルーグリーンデプロイを実施してみよう
 - 11.1.5 カナリアリリースを実施してみよう
 - Column 大規模な障害に備えるサーキットブレーカー
 - Column 一過性の障害に備えるアプリケーションの実装
 - Column Container Appsを使うのにKubernetesの知識は不要?
 
 - 11.2 オートスケール
- 11.2.1 Container Appsのレプリカ
 - 11.2.2 HTTPトラフィックによるスケーリングを設定する
 - 11.2.3 CPU/メモリによるスケーリングを設定する
 - 11.2.4 イベントドリブンによるスケーリングを設定する
 - Column Graceful Shutdown
 - Column KEDAのしくみと内部実装
 
 - 11.3 コンテナアプリケーションのネットワークアクセス
- 11.3.1 アプリケーションへのアクセス経路
 - 11.3.2 Azure Container Appsの仮想ネットワーク構成
 - 11.3.3 Container Appsのトラフィックルーティング
 - 11.3.4 Container Appsでのネットワーク構成例
 - Column Container Appsのネットワークのしくみ
 
 - 11.4 セキュリティ
- 11.4.1 秘匿情報の外部管理
 - 11.4.2 認証・認可
 - Column マルチコンテナ環境でのAPI統合管理
 
 - 11.5 アプリケーション正常性の監視
- 11.5.1 Spring Boot Actuatorによるヘルスチェック
 
 - 11.6 まとめ
 - 11.7 第3部のまとめ
 
Appendix クラウドネイティブアプリケーションをより進化させる
- A.1 Kubernetesで動かすマルチコンテナシステム
 - A.2 分散アプリケーションランタイムDaprを使ったアプリケーション開発
- A.2.1 Daprを使わない場合
 - A.2.2 Daprを使った場合