目次
第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を使った場合