GCPratica のサイトを GCS + Load Balancer + CDN で配信する
GCPratica 自身の site を GCS + Backend Bucket + Cloud CDN でホストした記録。CDN キャッシュの落とし穴まで。
GCPratica は、ユーザーに模擬版の練習環境を提供すると同時に、サービス自体を GCP 上に構築・運用すること自体が作者の学習を兼ねています。その第一歩として、この site(公開 LP + ブログ)を GCS バケットに置き、HTTPS Load Balancer + Backend Bucket + Cloud CDN 経由で配信しました。そのメモです。
構成の全体像
配信経路はおおまかに次の順でつながります。
ユーザー → External HTTPS LB → Backend Bucket → GCS bucket → Cloud CDN
Terraform で土台(LB・Backend Bucket・managed TLS)を作り、動的に差し替えるのは「中身のオブジェクト」(ビルド成果物)だけ、と所有境界をはっきり分けておくのが後で効いてきます。
詰まったところ: CDN キャッシュ
一番ハマったのは「更新したのに変わらない」問題でした。Cloud CDN にキャッシュが残っていて、新しい index.html が反映されません。
対策は、キャッシュポリシーをファイル種別で分けることです。
| 対象 | Cache-Control | 理由 |
|---|---|---|
index.html | no-cache | 常に最新を取りに行かせる |
| ハッシュ付きアセット | immutable | 内容が変わればファイル名が変わるので永続キャッシュ可 |
publish の順序も大事。
index.html以外を先にコピーし、index.htmlを最後にコピーする。古いオブジェクトは消す。こうしないと、参照先がまだ無いindex.htmlが一瞬配信されてしまう。
次にやること
site の配信ができたら、同じ Load Balancer で console.(ダッシュボード)と api.(API)を host 振り分けする構成へ広げます。固定費の出るリソース(LB・CDN・static IP)は学習期間外には確実に消す、を鉄則にしています。