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.htmlno-cache常に最新を取りに行かせる
ハッシュ付きアセットimmutable内容が変わればファイル名が変わるので永続キャッシュ可

publish の順序も大事。index.html 以外を先にコピーし、index.html を最後にコピーする。古いオブジェクトは消す。こうしないと、参照先がまだ無い index.html が一瞬配信されてしまう。

次にやること

site の配信ができたら、同じ Load Balancer で console.(ダッシュボード)と api.(API)を host 振り分けする構成へ広げます。固定費の出るリソース(LB・CDN・static IP)は学習期間外には確実に消す、を鉄則にしています。

← ブログ一覧へ