WEB+DB PRESS plusシリーズAzureコンテナアプリケーション開発
──開発に注力するための実践手法
──開発に注力するための実践手法
2023年2月9日紙版発売
2023年2月9日電子版発売
真壁徹,東方雄亮,米倉千冬,谷津秀典,阿佐志保 著
B5変形判/304ページ
定価3,520円(本体3,200円+税10%)
ISBN 978-4-297-13269-9
書籍の概要
この本の概要
本書は,アプリケーション開発者目線でコンテナ技術の価値を見なおし,Webアプリケーション開発のアジリティを高く保つために,それを活かせるようになることを目的とします。
第1部ではコンテナ技術の概要と動向を整理し,コンテナを活用したアプリケーション開発ワークフローを体験します。
第2部ではシンプルなコンテナアプリケーションの実行に適したAzure Web App for Containersを利用します。
第3部では,コンテナ実行基盤の事実上の標準であるKubernetesをベースとしたAzure Container Appsで,マルチコンテナアプリケーションを動かします。
本書を読むことで以下の知識を身に付けられます。
- コンテナを使った開発環境構築の方法
- コーディング,ビルド,テスト環境としてVisual Studio Code+Remote Container拡張の使い方
- コンテナアプリケーションの運用負担を軽減するクラウド(Azure)のサーバレス,フルマネージドなコンテナサービスの使い方
- 回復性および可観測性のあるコンテナアプリケーションを開発する指針
異なる実行環境を知り,比べることで,コンテナの利点や活用にあたっての課題を,よりイメージしやすくなるでしょう。
こんな方におすすめ
- 開発・運用の効率を上げたいWebアプリケーション開発に関わる方(コンテナの使用経験,インフラ構築・運用の経験は問いません)
- コンテナについて学びたい,あるいは学んでいて,そのしくみというよりは活用方法を知りたい方
- DevOpsやアジャイル開発などを検討中,あるいは実施中で,開発スピードを上げたい方
- アプリケーションの開発環境の構築や管理をしている方
- エンジニア不足で困っている開発現場をリードする方
- 複数プロダクトを抱えている忙しい方
この書籍に関連する記事があります!
本書のサンプル
本書の一部ページを,PDFで確認することができます。
- サンプルPDFファイル(1,710KB)
本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。
目次
第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を使った場合
この本に関連する書籍
-
イラストでわかる DockerとKubernetes
Dockerとkubernetesは,Webだけでなくさまざまなシステムで利用されています。仮想化とは違うので,エンジニアの皆さんもそのメリットをどう活かしていくのか悩ましいと...
-
図解即戦力 仮想化&コンテナがこれ1冊でしっかりわかる教科書
現在のシステム開発・運用に欠かすことのできない仮想化技術とコンテナ技術について,その基本をわかりやすく解説する図解本です。サーバ仮想化,ネットワーク仮想化に...
-
たった1日で基本が身に付く! Docker/Kubernetes超入門
DockerとKubernetesの基本が,たった1日で?! 本書は,次世代のアプリケーションアーキテクチャとして注目されている「マイクロサービス」の技術基盤となるコンテナ...