WEB+DB PRESS plusシリーズAzureコンテナアプリケーション開発
──開発に注力するための実践手法

[表紙]Azureコンテナアプリケーション開発 ──開発に注力するための実践手法

紙版発売
電子版発売

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で確認することができます。

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

目次

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

著者プロフィール

真壁徹(まかべとおる)

日本マイクロソフト株式会社 シニアクラウドソリューションアーキテクト。企業におけるクラウドの可能性を信じ,ユーザーと議論,実装,改善を行う日々。アプリもインフラも好物。趣味はナイスビール。主な著書は『しくみがわかるKubernetes』(翔泳社刊),『Microsoft Azure 実践ガイド』(インプレス刊)など。

URL:https://torumakabe.github.io/

GitHub:torumakabe

Twitter:@tmak_tw


東方雄亮(とうぼうゆうすけ)

日本マイクロソフト株式会社でPaaS製品であるApp Serviceなどのサポートエンジニアに従事。LinuxやJavaでのアプリケーションの開発や運用,特にトラブルシューティングを得意とする。

URL:https://www.linkedin.com/in/yusuketobo

GitHub:YusukeTobo


米倉千冬(よねくらちふゆ)

東京エレクトロン株式会社の情シス部門でAzureの活用推進,DXの技術的支援などに従事。以前は日本マイクロソフトにてAzureを含むWebアプリ関連製品の技術サポートを担当。


谷津秀典(やつひでのり)

日本マイクロソフト株式会社にてサポートエンジニアとしてPaaS製品であるAzure App Serviceを中心に担当。現職への入社前はSIer企業にてバックエンド開発とプロジェクトリーダーを経験後,フリーランスWeb系エンジニアを経て,AI系ベンチャー企業でのクラウド開発におけるリードエンジニアを担当。多様なバックグラウンドをベースとしてユーザーの技術的な問題解決の支援に従事。


阿佐志保(あさしほ)

日本マイクロソフト株式会社 自動車/運輸のお客様担当のクラウドソリューションアーキテクト。担当技術領域はAzureのアプリケーション開発/実行環境。趣味は野毛散策。主な著書は『しくみがわかるKubernetes』(翔泳社刊),『プログラマーのためのVisual Studio Code の教科書』(マイナビ出版刊)など。

URL:https://asashiho.github.io/

GitHub:asashiho