サーバーレス API
サーバー管理ゼロで自動スケールするWeb/API構成。Cloud CDN+Cloud StorageのフロントとAPI Gateway+Cloud Run+Firestoreのバックを、Google Cloud のマネージドサービスで構成する。
このパターンは?
サーバーを1台も持たずにWeb/APIを構築する、Google Cloud で主流の構成。アイドル時はほぼ無料(リクエストが来た分だけ課金)、急なスパイクにも自動でスケールします。
AWS の「CloudFront+S3+API Gateway+Lambda+DynamoDB」をそのまま Google Cloud に置き換えると、Cloud CDN+Cloud Storage+API Gateway+Cloud Run(または Cloud Functions)+Firestore になります。
構成
[ユーザー]
│ HTTPS
▼
外部 HTTP(S) ロードバランサ + Cloud CDN
│
├──► Cloud Storage バケット (SPA/静的サイト: HTML/CSS/JS)
│
│ /api/* (URL マップでパスルーティング)
▼
API Gateway (認証・レート制限・APIキー)
│
▼
Cloud Run (ビジネスロジック / コンテナ)
│
▼
Firestore (データ) ※ファイルは Cloud Storage、認証は Identity Platform
各コンポーネントの役割
- Cloud CDN + Cloud Load Balancing + Cloud Storage: フロント(SPA/静的)をグローバルエッジでキャッシュ配信。外部 HTTP(S) ロードバランサのバックエンドバケットとして公開し、Google マネージド SSL 証明書で HTTPS 化
- API Gateway: APIの玄関。OpenAPI 定義で認証(JWT / Firebase / APIキー)・レート制限(quota)・ルーティングを集約
- Cloud Run: ロジックをコンテナで実行。ステートレス・リクエスト数に応じて0からN台へ自動スケール。軽量関数なら Cloud Functions でも可
- Firestore: ミリ秒応答・サーバーレスなドキュメント DB。プロビジョニング不要で自動スケール
設計の勘所
状態は Firestore / Cloud Storage に逃がし、Cloud Run のコンテナは小さく速く。コールドスタートが気になる箇所は**最小インスタンス数(min-instances)**を1以上にして常駐させます。
- 認証は Identity Platform(Firebase Authentication) で発行した JWT を、API Gateway 側で検証して玄関集約
- Firestore はアクセスパターン駆動でコレクション設計(詳細)。クエリは複合インデックス前提
- 非同期処理は Pub/Sub / Eventarc を挟み、Cloud Run をイベント駆動で起動
- フロントとバックを同一ロードバランサにまとめ、
/は Cloud Storage バケット、/api/*は API Gateway へ URL マップで振り分けると CORS や独自ドメイン管理が楽
サービス対応(AWS との比較)
| レイヤ | AWS | Google Cloud |
|---|---|---|
| CDN / エッジ配信 | CloudFront | Cloud CDN |
| 静的ホスティング | S3 | Cloud Storage(バックエンドバケット) |
| L7 ルーティング / TLS | CloudFront ビヘイビア | 外部 HTTP(S) ロードバランサ(URL マップ) |
| API 管理 | API Gateway | API Gateway / Apigee |
| 関数 / 実行基盤 | Lambda | Cloud Run / Cloud Functions |
| NoSQL データ | DynamoDB | Firestore |
| 認証 | Cognito | Identity Platform(Firebase Auth) |
| 非同期メッセージ | SQS / EventBridge | Pub/Sub / Eventarc |
| 権限付与 | IAM ロール | Cloud IAM サービスアカウント |
| 監視 / ログ | CloudWatch | Cloud Monitoring / Logging |
Cloud Run と Cloud Functions の使い分け
| 観点 | Cloud Run | Cloud Functions |
|---|---|---|
| デプロイ単位 | コンテナイメージ(任意の言語/ランタイム) | 関数コード(対応ランタイム) |
| 向いている用途 | API・Web アプリ・既存コンテナの移行 | 単機能のイベント処理・グルー処理 |
| 同時実行 | 1コンテナで複数リクエストを並行処理可 | 1インスタンス1リクエスト(第2世代はRun基盤) |
| 移植性 | 高い(コンテナ標準) | 中(プラットフォーム寄り) |
Well-Architected の観点
- コスト最適化: リクエスト課金・アイドルは0台(Cloud Run)/読み書き従量(Firestore)でアイドルほぼ無料
- 運用上の優秀性: サーバー管理レス・Terraform / gcloud でデプロイを標準化
- パフォーマンス効率: Cloud CDN のグローバルエッジ配信+Cloud Run の自動スケール
- 信頼性: マネージドサービスの冗長性(Firestore はマルチリージョン構成も選択可)を活用
よくある落とし穴
- Cloud Run コンテナにローカルファイルで状態を持たせる(再起動・スケールで消える)
- Firestore を RDB 感覚で正規化し、コレクション全走査クエリを多用
- API Gateway 側にレート制限(quota)を設定せず、バックエンドや Firestore が過負荷
- 公開不要なバケット/サービスを
allUsersに公開してしまう
レイテンシ重視の API は Cloud Run の min-instances を1以上にして常駐させると初回応答が安定します。ただし常駐分は課金されるため、トラフィック特性に応じて調整してください。
メトリクス/ログは Cloud Monitoring / Logging に自動集約され、権限は Cloud IAM のサービスアカウントで最小権限化します(Cloud Run → Firestore のアクセスはサービスアカウントの IAM ロールで制御)。
Google Cloud Pattern
サーバーレス APIを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
cost
比較で見る軸
クラウド: Google Cloud / 難易度: intermediate / 関連サービス: 8件
導入後に効く点
サーバー管理ゼロで自動スケールするWeb/API構成。Cloud CDN+Cloud StorageのフロントとAPI Gateway+Cloud Run+Firestoreのバックを、Google Cloud のマネージドサービスで構成する。
先に潰すリスク
パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。
- クラウド
- Google Cloud
- 難易度
- intermediate
- 関連サービス
- 8件
- 設計柱
- cost / operational / performance / reliability
判断チェックリスト
- 自社の用途が「cost / operational」に近いか確認する。
- 強みである「サーバー管理ゼロで自動スケールするWeb/API構成。Cloud CDN+Cloud StorageのフロントとAPI Gateway+Cloud Run+Firestoreのバックを、Google Cloud のマネージドサービスで構成する。」が本当に評価軸になるか確認する。
- 注意点の「パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。