TL

3層ウェブアプリケーション

プレゼン層・アプリ層・データ層を分離し、複数ゾーン+マネージドインスタンスグループ+高可用DBで可用性を確保する Google Cloud の王道構成。

中級信頼性セキュリティパフォーマンス効率

このパターンは?

最も基本的で頻出の「3層アーキテクチャ」を Google Cloud で組む構成です。役割ごとに層を分け、各層を複数ゾーンに冗長化します。

  • プレゼン層: 静的配信とロードバランシング
  • アプリ層: ビジネスロジック(自動スケール)
  • データ層: 永続データ(高可用DB)
GCP ならではのポイント

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 制御を追加できる
Compute Engine か Cloud Run か

台数・OS・常駐プロセスを細かく制御したいなら Compute Engine の MIG。リクエスト課金でゼロスケールやデプロイ簡素化を重視するなら Cloud Run。同じ外部 ALB の背後に「サーバーレス NEG」として Cloud Run をぶら下げることも可能です。

アプリ層の選択肢

観点Compute Engine (MIG)Cloud Run
抽象度VM(OSを管理)コンテナ(サーバー管理不要)
スケール基準CPU/負荷メトリクス同時リクエスト数(ゼロスケール可)
課金稼働時間ベースリクエスト/実行時間ベース
ゾーン冗長リージョンMIGで複数ゾーン分散リージョン内でマネージドに分散
向く用途常駐・細かい制御・既存資産イベント駆動・トラフィック変動大

データ層の選択肢

観点Cloud SQLAlloyDBCloud Spanner
互換性MySQL / PostgreSQL / SQL ServerPostgreSQL 互換(高性能)独自/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、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

reliabilitysecurityperformanceCloud DNSCloud CDNCloud StorageCloud Load BalancingVirtual Private Cloud (VPC)