キャッシュ無効化の概要

このページでは、Cloud CDN のキャッシュ無効化の概要について説明します。

キャッシュの無効化とは

キャッシュに保存されたオブジェクトは通常、期限切れになるか、新しいコンテンツを保存するために削除されるまでキャッシュに残ります。いつ無効にするかを制御するには、標準の HTTP ヘッダーを使用します。

有効期限になる前にキャッシュ オブジェクトの削除が必要になる場合があります。キャッシュの無効化をリクエストすると、キャッシュ内の 1 つまたは複数のオブジェクトがキャッシュで無視されるようになります。

キャッシュ無効化をリクエストする前に、送信元サーバーが正しいコンテンツを返していることを確認する必要があります。確認を怠ると、Cloud CDN がコンテンツを再度リクエストしたときに、間違ったコンテンツがキャッシュに保存される可能性があるからです。

パスパターン

無効化リクエストには、無効にする 1 つまたは複数のオブジェクトを識別するパスパターンを指定します。パスパターンとして、/cat.jpg のように特定のパスを指定することも、/pictures/* のようにディレクトリ構造全体を指定することもできます。パスパターンには次のルールが適用されます。

  • パスパターンは / で始まる必要があります。
  • ?# を含めることはできません。
  • * は、/ に続く最後の文字として使用できますが、それ以外の場所では使用できません。
  • /* で終わる場合、先行する文字列は接頭辞になり、その接頭辞で始まるすべてのオブジェクトが無効になります。

パスパターンは、URL のパス コンポーネント(ホスト名と ? または # との間にあるすべての文字列)と比較されます。

URL にクエリ文字列(例: /images.php?image=fred.png)が含まれている場合、クエリ文字列だけが異なるオブジェクトを無効にすることはできません。たとえば、2 つの画像(/images.php?image=fred.png/images.php?image=barney.png)がある場合、fred.png だけを無効にすることはできません。images.php で提供されるすべての画像を無効にするには、パスパターンに /images.php を使用します。

単一ホストのキャッシュの無効化

通常、キャッシュを無効化すると、すべてのホスト名のパスが無効になります。たとえば、example.comexample2.com が同じロードバランサを指している場合に /images/cat.jpg を無効にすると、example.com/images/cat.jpgexample2.com/images/cat.jpg の両方が無効になります。

いずれかのホストのみを無効にするよう制限するには、コマンドに --host フラグを追加します。

制限事項

無効化は、通常のワークフローではなく、例外的な状況での使用を前提としています。無効化は、ウェブブラウザ内のキャッシュや、他のインターネット サービス プロバイダが管理するキャッシュには影響しません。

定期的に無効化を行う代わりに、レスポンスに適切な有効期間を設定したり、コンテンツのバージョンごとに別々の URL を使用したりすることもできます。有効期間の詳細については、有効期間と検証リクエストをご覧ください。

無効化の頻度には制限があります。1 分間に実行できる無効化は 1 回だけです。ただし、無効化する対象のサイズに制限はありません。/images/fred.png の無効化は 1 回と計算されます。/images/* の無効化も 1 回と計算されます。

必要なものだけを無効にしてください。無効にする対象が多すぎると、それまでキャッシュで処理されていたリクエストの急増によりインスタンスやバケットが影響を受ける可能性があります。

Cloud CDN は分散システムです。このため、ごく一部のキャッシュで無効化リクエストがまだ処理されていない場合でも、無効化が完了したと報告することがあります。この状況はめったに発生しませんが、発生した場合には自動的に問題が訂正されます。

共有 VPC のプロジェクト間サービス参照を使用している場合のキャッシュ無効化のリクエスト

デフォルトでは、共有 VPC のクロス プロジェクト サービス参照でグローバル外部アプリケーション ロードバランサを使用している場合、サービス プロジェクト管理者にはキャッシュの無効化をリクエストする権限がありません。これは、フロントエンド プロジェクト(つまり、ロードバランサの転送ルール、ターゲット プロキシ、URL マップがあるプロジェクト)でキャッシュの無効化が構成されているためです。キャッシュの無効化を実行できるのは、フロントエンド プロジェクトでロードバランサ関連のリソースを構成する IAM ロール(Compute ネットワーク管理者ロールなど)を持つプリンシパルだけです。

別のプロジェクトのバックエンド サービスのプロビジョニングを管理するサービス管理者は、フロントエンド プロジェクトのロードバランサ管理者と連携して、プロジェクト間のサービスのキャッシュ無効化を実行する必要があります。

次のステップ