3層ウェブアプリケーション
プレゼン層・アプリ層・データ層を分離し、複数の可用性ゾーン+スケールセット+ゾーン冗長 DB で可用性を確保する、Azure における王道の Web アプリ構成。
このパターンは?
最も基本的で頻出の「3層アーキテクチャ」を Azure で実装した構成です。役割ごとに層を分け、各層を複数の可用性ゾーンに冗長化します。Azure 認定(AZ-104 / AZ-305)でも実務でも王道です。
- プレゼン層: 静的配信とグローバルなロードバランシング
- アプリ層: ビジネスロジック(自動スケール)
- データ層: 永続データ(ゾーン冗長 DB)
構成
[ユーザー]
│ HTTPS
▼
Azure DNS ──► Front Door (CDN + WAF) ──► Blob Storage (静的アセット/画像)
│
▼
Application Gateway (L7 ロードバランサ・WAF・複数ゾーン)
│
▼
アプリ層: VMSS or Container Apps (自動スケール・複数ゾーン・プライベートサブネット)
│
▼
データ層: Azure SQL Database (ゾーン冗長・プライベートエンドポイント・TDE 暗号化)
VNet(仮想ネットワーク)の中で、パブリックに面するのは Front Door / Application Gateway だけにし、アプリ層とデータ層はプライベートサブネットへ閉じ込めるのが基本形です。
各層の役割
- Azure DNS: ドメイン解決。apex(ゾーン頂点)は Alias レコードで Front Door へ向ける。Traffic Manager と組み合わせれば DNS レベルの DR も可能
- Front Door + Blob Storage: 静的アセットを Microsoft のグローバルエッジ(POP)からキャッシュ配信し、オリジン負荷を軽減。WAF・SSL オフロードもここで担う
- Application Gateway: リージョン内で複数ゾーンのアプリへ L7 分散。ヘルスプローブで異常インスタンスを除外。L4 で十分なら Load Balancer も選択肢
- Virtual Machines / VMSS または Container Apps: アプリ本体。VMSS / Container Apps の自動スケールで負荷に追従
- Azure SQL Database: フルマネージドな SQL。ゾーン冗長構成で自動フェイルオーバー、読み取りは**読み取りレプリカ(読み取りスケールアウト)**へ逃がす
プレゼン層 ─ エッジとロードバランサの使い分け
「Front Door」と「Application Gateway」はどちらも L7 ですが、適用範囲が異なります。グローバル配信・キャッシュ・複数リージョンのフェイルオーバーは Front Door、単一リージョン内のゾーン分散は Application Gateway、と役割を分けて両方を重ねるのが定番です。
| 観点 | Front Door | Application Gateway |
|---|---|---|
| スコープ | グローバル(エニーキャスト) | リージョン内 |
| 主な役割 | CDN・グローバル LB・SSL オフロード | L7 LB・パスベースルーティング |
| キャッシュ | あり(静的配信に有効) | なし |
| WAF | 対応(エッジで遮断) | 対応(リージョンで遮断) |
| 典型用途 | 最前段・複数リージョンの束ね | アプリ層への振り分け |
Front Door の WAF を有効にすると、不正リクエストをユーザーに近いエッジで遮断でき、オリジン(アプリ層)まで到達させずに済みます。Application Gateway の WAF と多層で重ねると堅牢です。
アプリ層 ─ ステートレスに保つ
アプリ層はステートレスに設計し、台数を自由に増減できるようにします。Azure では VM ベースなら VMSS(仮想マシンスケールセット)、コンテナなら Container Apps(サーバーレス)や AKS が選択肢です。
セッションや一時状態は VM 内に持たず、Cosmos DB や Azure Cache for Redis へ外出しします。そうすればスケールアウト時にどのインスタンスへ振られても整合し、自動スケールが正しく効きます。
- サブネットを用途で分離(プレゼン / アプリ / データ)し、**NSG(ネットワークセキュリティグループ)**で層間通信を最小化
- アプリ層はプライベートサブネットに置き、直接インターネットへ公開しない
- 各層のサブネットを2つ以上の可用性ゾーンにまたがって配置(ゾーン冗長)
データ層 ─ 可用性と分離
- Azure SQL Database をゾーン冗長(Business Critical / Premium 等)で構成し、ゾーン障害時も自動フェイルオーバー
- DB はプライベートエンドポイント経由でのみアクセスし、パブリックネットワークアクセスは無効化
- 接続文字列やパスワードは Key Vault に保管し、アプリはマネージド IDで取得(資格情報をコードに埋め込まない)
参照系トラフィックが多い場合は、読み取りスケールアウトのレプリカへ読み取り専用接続(ApplicationIntent=ReadOnly)を向け、プライマリの負荷を下げます。地理冗長が必要なら自動フェイルオーバー グループで別リージョンへ。
設計の勘所
- ネットワークは VNet + サブネット分割。パブリック(エッジ/LB)/ プライベート(アプリ・DB)で明確に分離
- 認証・認可は Microsoft Entra ID に集約。アプリ→DB / アプリ→Key Vault はマネージド ID で接続
- インフラは Bicep / ARM / Terraform でコード化し、Immutable に入れ替えられるようにする
- 各層を最低2ゾーンへ。単一ゾーン配置は避ける
Well-Architected の観点
- 信頼性(Reliability): 複数ゾーン・VMSS/Container Apps の自動スケール・ゾーン冗長 DB で単一障害点を排除
- セキュリティ(Security): 層の分離・最小公開・Entra ID + RBAC・マネージド ID・TDE / Key Vault による暗号化
- パフォーマンス効率(Performance): Front Door のエッジキャッシュ+水平スケール+読み取りレプリカ
よくある落とし穴
- 単一ゾーン構成(ゾーン障害でサービス全停止)
- DB をパブリックネットワークアクセス有効のまま放置する
- アプリ層がローカルディスクにセッション/アップロードファイルを保持し、スケールアウトできない
- 接続文字列・キーをアプリ設定やコードに直書きする(→ マネージド ID + Key Vault へ)
監視・運用
監視は Azure Monitor に集約します。メトリクスのアラートから自動スケールをトリガーし、各層のログ(アプリ / Application Gateway / SQL)を Log Analytics ワークスペースへ集約して横断分析しましょう。アプリのリクエストトレースは Application Insights で可視化すると、層をまたいだボトルネックの特定が容易になります。
AWS との対応
主要な構成要素を AWS の 3 層構成と対比すると、置き換えが把握しやすくなります。
| 層 / 役割 | Azure | AWS |
|---|---|---|
| DNS | Azure DNS | Route 53 |
| CDN / エッジ LB / WAF | Front Door | CloudFront |
| 静的アセット | Blob Storage | S3 |
| L7 ロードバランサ | Application Gateway | ALB |
| アプリ実行基盤 | VMSS / Container Apps | EC2 / ECS・Fargate |
| リレーショナル DB | Azure SQL Database | RDS / Aurora |
| セッション/キャッシュ | Cosmos DB / Cache for Redis | DynamoDB / ElastiCache |
| 権限付与 | マネージド ID + Entra ID | IAM ロール |
| 監視 | Azure Monitor | CloudWatch |
Azure Pattern
3層ウェブアプリケーションを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
reliability
比較で見る軸
クラウド: Azure / 難易度: intermediate / 関連サービス: 12件
導入後に効く点
プレゼン層・アプリ層・データ層を分離し、複数の可用性ゾーン+スケールセット+ゾーン冗長 DB で可用性を確保する、Azure における王道の Web アプリ構成。
先に潰すリスク
パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。
- クラウド
- Azure
- 難易度
- intermediate
- 関連サービス
- 12件
- 設計柱
- reliability / security / performance
判断チェックリスト
- 自社の用途が「reliability / security」に近いか確認する。
- 強みである「プレゼン層・アプリ層・データ層を分離し、複数の可用性ゾーン+スケールセット+ゾーン冗長 DB で可用性を確保する、Azure における王道の Web アプリ構成。」が本当に評価軸になるか確認する。
- 注意点の「パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。