3層ウェブアプリケーション
プレゼン層・アプリ層・データ層を分離し、複数ゾーン+マネージドインスタンスグループ+高可用DBで可用性を確保する Google Cloud の王道構成。
このパターンは?
最も基本的で頻出の「3層アーキテクチャ」を Google Cloud で組む構成です。役割ごとに層を分け、各層を複数ゾーンに冗長化します。
- プレゼン層: 静的配信とロードバランシング
- アプリ層: ビジネスロジック(自動スケール)
- データ層: 永続データ(高可用DB)
AWS のサブネットは AZ 単位ですが、Google Cloud のサブネットはリージョン単位で、1つのサブネットがリージョン内の全ゾーンにまたがります。可用性は「サブネットを分ける」のではなく、インスタンスを複数ゾーンに分散配置して確保するのが基本です。
構成
[ユーザー]
│ HTTPS
▼
Cloud DNS (DNS) ──► 外部 Application Load Balancer ──► Cloud CDN ──► Cloud Storage (静的アセット/画像)
│ │
│ ▼
│ アプリ層: Compute Engine (MIG) or Cloud Run / GKE
│ (オートスケール・複数ゾーン・プライベートIP)
│ │
▼ ▼
(同一の外部ALBが データ層: Cloud SQL / AlloyDB
上記バックエンドへ (高可用 / リードレプリカ / 暗号化)
振り分け)
外部 Application Load Balancer は単一の グローバル Anycast IP を持ち、世界中のユーザーを最寄りの Google エッジで受けてバックエンドへ振り分けます。同じロードバランサに Cloud Storage バケットバックエンド(静的)とアプリのバックエンドサービス(動的)をURL マップでパス分岐できます。
各層の役割
- Cloud DNS: ドメイン解決。SLA 100% の Anycast 権威 DNS。apex(ゼロネーム)も
A/AAAAでロードバランサのグローバル IP に向けられます - 外部 Application Load Balancer + Cloud CDN + Cloud Storage: 静的アセットをエッジ配信し、オリジン負荷を軽減。Cloud CDN は外部 ALB に紐づけて有効化します
- Cloud Load Balancing: リクエストを複数ゾーンのアプリへ分散。ヘルスチェックで異常なインスタンスを除外
- Compute Engine(MIG) / Cloud Run・GKE: アプリ本体。マネージドインスタンスグループ(MIG)のオートスケーラ、または Cloud Run の同時実行ベースの自動スケールで負荷追従
- Cloud SQL / AlloyDB: 高可用(HA)構成で別ゾーンのスタンバイに自動フェイルオーバー、読み取りはリードレプリカへオフロード
設計の勘所
アプリ層はステートレスにし、セッションは Firestore や Memorystore (Redis) へ逃がします。そうすればインスタンス台数を自由に増減でき、MIG オートスケーラや Cloud Run のスケールが効きます。
- アプリ層・DB はプライベートIPのみで構成し、外部公開しない(VPC 内のプライベートサブネット相当)
- アプリ層から DB へは Cloud SQL の Private Service Connect / プライベートサービスアクセスで VPC 内部接続。アウトバウンドが必要なら Cloud NAT 経由に
- MIG はリージョン MIGにして、インスタンスを複数ゾーンに自動分散(ゾーン障害に耐える)
- ロードバランサ前段に Cloud Armor を置き、WAF / DDoS / IP 制御を追加できる
台数・OS・常駐プロセスを細かく制御したいなら Compute Engine の MIG。リクエスト課金でゼロスケールやデプロイ簡素化を重視するなら Cloud Run。同じ外部 ALB の背後に「サーバーレス NEG」として Cloud Run をぶら下げることも可能です。
アプリ層の選択肢
| 観点 | Compute Engine (MIG) | Cloud Run |
|---|---|---|
| 抽象度 | VM(OSを管理) | コンテナ(サーバー管理不要) |
| スケール基準 | CPU/負荷メトリクス | 同時リクエスト数(ゼロスケール可) |
| 課金 | 稼働時間ベース | リクエスト/実行時間ベース |
| ゾーン冗長 | リージョンMIGで複数ゾーン分散 | リージョン内でマネージドに分散 |
| 向く用途 | 常駐・細かい制御・既存資産 | イベント駆動・トラフィック変動大 |
データ層の選択肢
| 観点 | Cloud SQL | AlloyDB | Cloud Spanner |
|---|---|---|---|
| 互換性 | MySQL / PostgreSQL / SQL Server | PostgreSQL 互換(高性能) | 独自/PostgreSQL 互換インターフェース |
| 高可用 | 別ゾーンへ自動フェイルオーバー(HA) | リージョン内で高可用 | マルチリージョンで強整合・水平スケール |
| スケール | 垂直+リードレプリカ | 垂直+高速な読み取りレプリカ | ほぼ無限の水平スケール |
| AWS対応 | Amazon RDS 相当 | Amazon Aurora 相当 | (AWSに直接の同等は少ない) |
Well-Architected の観点
- 信頼性: リージョン MIG+複数ゾーン分散、Cloud SQL/AlloyDB の HA で単一障害点を排除。ヘルスチェックで異常を自動隔離
- セキュリティ: 層の分離・最小公開・Cloud IAM のサービスアカウント・Cloud Armor・保存時/転送時の暗号化
- パフォーマンス効率: Cloud CDN+グローバル ALB の水平スケール+リードレプリカで読み取りを分散
よくある落とし穴
- 単一ゾーンの(ゾーンMIG/単一インスタンス)構成 = ゾーン障害で全停止
- DB に外部 IP を付けて公開してしまう(プライベート接続にすべき)
- アプリ層がローカルにセッションやアップロードファイルを持ち、スケール・入れ替えできない
- VM 内にサービスアカウントキー(JSON)を置く = アタッチされたサービスアカウントを使えば鍵管理は不要
監視は Cloud Monitoring / Logging で各層のメトリクスとログを集約し、アラートポリシーから通知、MIG のオートスケーラへ負荷追従を任せましょう。SLO を定義して可用性を継続的に観測するのが理想です。
Google Cloud Pattern
3層ウェブアプリケーションを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
reliability
比較で見る軸
クラウド: Google Cloud / 難易度: intermediate / 関連サービス: 12件
導入後に効く点
プレゼン層・アプリ層・データ層を分離し、複数ゾーン+マネージドインスタンスグループ+高可用DBで可用性を確保する Google Cloud の王道構成。
先に潰すリスク
パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。
- クラウド
- Google Cloud
- 難易度
- intermediate
- 関連サービス
- 12件
- 設計柱
- reliability / security / performance
判断チェックリスト
- 自社の用途が「reliability / security」に近いか確認する。
- 強みである「プレゼン層・アプリ層・データ層を分離し、複数ゾーン+マネージドインスタンスグループ+高可用DBで可用性を確保する Google Cloud の王道構成。」が本当に評価軸になるか確認する。
- 注意点の「パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。