静的サイトホスティング
Cloud Storage にビルド成果物を置き、外部 Application Load Balancer + Cloud CDN で安全・高速・低コストに配信する Google Cloud の最小構成。
このパターンは?
HTML/CSS/JS(や SPA、静的サイトジェネレータの出力)を、サーバーレスで世界配信する Google Cloud の最小・最安構成。Cloud Storage に成果物を置き、外部 Application Load Balancer(外部 ALB)に Cloud CDN を有効化して、Google のグローバルエッジから HTTPS 配信します。
AWS の「S3 + CloudFront」に相当しますが、Google Cloud では CDN が独立製品ではなく外部 ALB の機能である点が最大の違いです。
構成
[ユーザー]
│ HTTPS
▼
Cloud DNS (A/AAAA → Anycast IP)
│
▼
外部 Application Load Balancer
├─ グローバル静的 IP(Anycast, IPv4/IPv6)
├─ Google マネージド SSL 証明書(TLS 終端)
├─ URL マップ(パス/ホストのルーティング)
└─ Cloud CDN(--enable-cdn / バックエンドバケット)
│ キャッシュフィル
▼
バックエンドバケット → Cloud Storage(ビルド成果物)
CI/CD: Cloud Build / GitHub Actions ─(build)→ out/
─(gcloud storage rsync)→ バケット
─(invalidate-cdn-cache)→ Cloud CDN
各コンポーネントの役割
- Cloud Storage: ビルド成果物を保存するバックエンドバケット。均一なバケットレベルのアクセスを有効にし、公開せず ALB 経由で読ませる
- Cloud Load Balancing: 外部 ALB がグローバル Anycast IP・HTTPS 終端・ルーティングを担う。Cloud CDN を有効化する「入れ物」
- Cloud CDN: バックエンドバケットに
--enable-cdnを付け、Google のエッジ(PoP)でキャッシュ配信 - Cloud DNS: 独自ドメインを LB の**静的 IP(A/AAAA)**に向ける
- Google マネージド SSL 証明書: LB にアタッチする TLS 証明書。自動発行・自動更新で無料
Cloud Storage を allUsers に公開して直接配信するのはアンチパターン。外部 ALB + バックエンドバケット経由なら、**HTTPS・独自ドメイン・CDN・WAF(Cloud Armor)**が使え、バケットも公開せずに済みます。
AWS との対応
| 役割 | Google Cloud | AWS |
|---|---|---|
| オブジェクト保管 | Cloud Storage バケット | S3 バケット |
| CDN / エッジ配信 | Cloud CDN(外部 ALB の機能) | CloudFront(独立製品) |
| HTTPS / ルーティング | 外部 Application Load Balancer | CloudFront ディストリビューション |
| TLS 証明書 | Google マネージド SSL 証明書 | ACM(us-east-1) |
| DNS | Cloud DNS | Route 53 |
| キャッシュ削除 | invalidate-cdn-cache | Invalidation |
設計の勘所
- デプロイは
build → バケットへ rsync → Cloud CDN を invalidate - キャッシュはファイル名にハッシュを付け、
index.htmlは短い TTL(または毎回 invalidate)に - バケットのオブジェクトに
Cache-Controlを設定し、Cloud CDN のキャッシュモードをUSE_ORIGIN_HEADERSにすると制御しやすい - バックエンドバケットには
--enable-cdnのほか、ディレクトリ URL(/gcp/)をindex.htmlに解決するためカスタムレスポンスヘッダや 404/301 リダイレクトの設計を検討 - IPv4/IPv6 両対応にするならグローバル静的 IP を IPv4・IPv6 で 2 つ確保し、A/AAAA を両方登録
独自ドメイン・CDN が不要な検証段階なら、Cloud Storage 単体の静的ウェブサイト機能(index.html/404.html 指定)でも公開できます。ただし HTTP のみ・独自ドメインの HTTPS には別途 LB が必要なので、本番は外部 ALB 構成に寄せます。
Well-Architected の観点
- コスト最適化: サーバーレスで固定費が小さい。Cloud CDN のキャッシュヒットでオリジンの下り(egress)と Cache Fill を削減
- パフォーマンス効率: Google のグローバルエッジ+プライベートバックボーンで低遅延配信
- セキュリティ: バケット非公開+ALB 経由、HTTPS 必須。必要なら Cloud KMS の CMEK でバケット暗号化、Cloud Armor で WAF/DDoS 対策
- 運用上の優秀性: Cloud Build や GitHub Actions でビルド→デプロイ→キャッシュ無効化を自動化
よくある落とし穴
- Cloud Storage を
allUsers公開で直接配信し、HTTPS・独自ドメイン・CDN を諦める - 外部 ALB を介さず Cloud CDN を使おうとする(CDN は外部 ALB の機能で、単体では有効化できない)
- デプロイ後に Cloud CDN の invalidate を忘れ、エッジに古いコンテンツが残る
- Google マネージド SSL 証明書を使う際、DNS を LB の IP に向ける前にプロビジョニングが完了せず証明書が
FAILED/PROVISIONINGのまま
アクセス分析・配信状況の監視は Cloud Monitoring と Cloud CDN/LB のログ(Cloud Logging)で行います。
Google Cloud Pattern
静的サイトホスティングを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
cost
比較で見る軸
クラウド: Google Cloud / 難易度: basic / 関連サービス: 6件
導入後に効く点
Cloud Storage にビルド成果物を置き、外部 Application Load Balancer + Cloud CDN で安全・高速・低コストに配信する Google Cloud の最小構成。
先に潰すリスク
パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。
- クラウド
- Google Cloud
- 難易度
- basic
- 関連サービス
- 6件
- 設計柱
- cost / performance / security / operational
判断チェックリスト
- 自社の用途が「cost / performance」に近いか確認する。
- 強みである「Cloud Storage にビルド成果物を置き、外部 Application Load Balancer + Cloud CDN で安全・高速・低コストに配信する Google Cloud の最小構成。」が本当に評価軸になるか確認する。
- 注意点の「パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。