「古い情報が表示される!」を即解決。Google Cloud CDNの「キャッシュ無効化」を郵便配達で理解する
こんにちは!SREの現場では、日々「更新したはずの画像が、いつまで経っても古いまま表示される」という悲鳴(?)をよく耳にします。
Webサイトの表示を爆速にするために欠かせない「Cloud CDN」。世界中に設置された拠点(エッジ)にコンテンツを先回りさせておくことで、ユーザーの近くから素早くデータを届ける仕組みですが、この「先回り」が仇となり、更新作業をした直後には「あれ?反映されない!」というトラブルが起きがちです。
今日は、そんな悩みを解決する「キャッシュ無効化(Cache Invalidation)」の仕組みを、身近な例えを交えて紐解いていきましょう。
—
そもそも、なぜ「キャッシュ」は消えてくれないの?
Cloud CDNの役割は、例えるなら「街のいたるところにある小さな郵便局(エッジ)」です。
本来、あなたのWebサイトのデータは「本局(オリジンサーバー)」にしかありません。でも、ユーザーが来るたびに本局まで取りに行くと時間がかかりますよね。そこで、街中の郵便局にあらかじめ荷物をコピーして置いておき、近くのユーザーに渡しているんです。
ところが、本局で荷物(コンテンツ)を新しいものに入れ替えたとしても、街中の郵便局にある「古い荷物」は、「新しいものが届いたよ!」と言われない限り、そのまま棚に置きっぱなしになってしまいます。これが、キャッシュが古いまま残る正体です。
—
「キャッシュ無効化」とは、郵便局への「回収命令」
Cloud CDNにおける「キャッシュ無効化」とは、この街中の郵便局に対して「その荷物はもう古いから、今すぐ棚から捨てて、本局から新しいものを取り直して!」と一斉に指示を出す命令のことです。
この命令を出すとき、私たちは「どの荷物を捨ててほしいか」をパス(アドレス)で指定します。
1. 特定のファイルだけを消す(パス指定)
「画像1枚だけ更新したんだ」という時は、そのファイルのパスをピンポイントで指定します。
- 指定例:
/images/logo.png - 良いところ: 他のデータには影響がないので、とても安全です。
2. まとめて消す(ワイルドカード指定)
「キャンペーン期間が終わったから、画像フォルダの中身を全部入れ替えたい!」という時は、ワイルドカード(*)を使います。
- 指定例:
/images/* - 注意点: 一気に全部消してしまうため、アクセスが集中した直後に全ユーザーが本局へデータを請求することになり、オリジンサーバーに大きな負荷がかかります。計画的に使いましょう。
—
実際にコマンドで「無効化」してみよう
Google Cloudの管理コンソールからポチポチ操作することもできますが、自動化されたパイプラインに組み込むなら gcloud コマンドが一番です。
以下のコマンドは、特定のパスのキャッシュを無効化する例です。
# ロードバランサのキャッシュ無効化を実行するコマンド
# [LOAD_BALANCER_NAME]: 対象のロードバランサ名
# [PATH]: 無効化したいパス(例: /images/banner.jpg)
gcloud compute url-maps invalidate-cdn-cache [LOAD_BALANCER_NAME] \
--path "[PATH]" \
--global # グローバルで展開している場合は必ず指定しましょう
もし、フォルダごと一括で消したいなら、パスを工夫します。
# /static/ 配下の全ファイルを一括無効化する場合
gcloud compute url-maps invalidate-cdn-cache [LOAD_BALANCER_NAME] \
--path "/static/*" \
--global
—
現場で役立つ「失敗しないためのヒント」
最後に、ベテランエンジニアが現場で気をつけているポイントを3つだけ共有しますね。
1. 「即時」といっても数秒〜数分かかる
「実行したのにまだ変わらない!」と焦る必要はありません。世界中のエッジサーバーに命令が伝わるまで、少しだけタイムラグがあります。深呼吸して待ちましょう。
2. ブラウザのキャッシュも忘れない
サーバー上のキャッシュを消しても、あなた自身のブラウザが「前見た時のデータがあるからこれでいいや」と表示していることがあります。シークレットモードで確認するか、ブラウザのキャッシュをクリアするのを忘れずに!
3. 無効化は「最終手段」にする
頻繁に無効化リクエストを投げると、オリジンサーバーがパンクしてしまいます。可能な限り、HTTPヘッダーの Cache-Control を使って「このデータは1時間で古くなるよ」と適切に設定しておくのが、最も賢い運用です。
—
まとめ:ネットワークは「流れ」で理解する
Cloud CDNのキャッシュ無効化は、単なるコマンド操作ではなく「世界中のエッジへ一斉に届ける回収命令」です。
最初は難しく感じるかもしれませんが、「郵便局に古い荷物を捨てさせる」というイメージを持てば、パケットの流れが頭の中で見えてくるはずです。
インフラは泥臭いトラブルと向き合うことも多いですが、一つひとつの挙動を紐解いていけば、必ず味方になってくれます。ぜひ、ご自身の環境でも試してみてくださいね!
それでは、また次回の記事でお会いしましょう。ハッピー・クラウド・コンピューティング!
コメント