Fastly でコンテンツをパージ(キャッシュを削除)する


CDN を使う場合、コンテンツがキャッシュされるため、オリジンサーバでアップデートした場合、キャッシュを明示的に削除する必要があります。Fastly ではキャッシュの削除を 150ms 以内で実施できるという特徴があるので、従来の CDN では更新の頻度が多く、キャッシュできなかったコンテンツがキャッシュできるようになります。
ここではキャッシュの削除(パージ)する方法をご紹介します。

パージの種類

Fastly のパージには通常のパージ、ソフトパージの2種類があります。
通常のパージはキャッシュの削除を行い、強制的にオリジンサーバからファイル取得を行い、キャッシュ上のコンテンツを更新します。一方、ソフトパージはキャッシュの削除はせずにキャッシュを期限切れ状態にすることにより、オリジンに更新の有無を確認し、更新されていれば再取得、されていなければキャッシュ上のコンテンツをそのまま利用します。

パージの対象

上記のようにパージ対象の指定には3つの方法があります。

パージ名 パージ対象 通常のパージ ソフトパージ 認証(デフォルト)
Purge URL 指定した URL ⚪️ ⚪️ なし
Purge Key 指定した Key を Surrogate-Key ヘッダに持つ URL ⚪️ ⚪️ API Token (GUI ではなし)
Purge All 該当サービスの全 URL ⚪️ - API Token (GUI ではなし)

GUI によるパージ

コントロールパネル( https://manage.fastly.com )へのログイン後、CONFIGURE 画面にて下記、PURGE ボタンから実施します。ソフトパージは対応していません。

Purge URL

Purge URL を選択すると下記のウィンドウが表示されます。
パージしたい URL のドメインを選択し、パスを指定します。

Purge Key

Purge Key を選択すると下記のウィンドウが表示されます。
パージ対象の URL グループに指定した Surrogate-Key の値を指定します。

Purge All

Purge All を選択すると下記のウィンドウが表示されます。
Purge All は全てのコンテンツがキャッシュクリアされるため、一時的に全てのリクエストがオリジンに問い合わせ行くことになります。その場合のオリジンサーバの負荷にご注意ください。

CLI によるパージ

Purge URL

$ curl -X PURGE http://www.example.com/image.jpg

(ソフトパージの場合は -H "Fastly-Soft-Purge:1" を追加)

Purge Key

curl -X POST -H "Fastly-Key: <API TOKEN>" https://api.fastly.com/service/<Service ID>/purge/<Key>

(ソフトパージの場合は -H "Fastly-Soft-Purge:1" を追加)

Purge All

curl -X POST -H "Fastly-Key: <API TOKEN>" https://api.fastly.com/service/<Service ID>/purge_all

URL パージで API Token 認証を有効にする

デフォルトでは URL パージでは認証が必要ないため、任意のユーザがパージを行うことができます。パージに制限をかけるために、Purge Key, Purge All と同様に API Token による認証をかけることができます。
Fastly-Purge-Requires-Auth がリクエストヘッダに存在している場合には API Token による認証が必要になります。Purge URL のリクエストは Fastly VCL において処理されるため、Fastly の設定の中で本ヘッダを追加します。

  1. Configuration より CONTENT タブを選択し、CREATE HEADER を選択
  2. 下記を設定
    • Name : 任意の名前を設定(例:Fastly Purge)
    • Type / Action : Request / Set
    • Destination : http.Fastly-Purge-Requires-Auth
    • Source : "1"
    • Ignore if set : No
    • Priority : 10
  3. Create ボタンで作成
  4. 2 で設定したヘッダの追加を行う条件を適用するために Attach ad condition を選択
  5. 下記を設定
    • Type : Request
    • Name : 任意の名前を設定(例:Purge request)
    • Apply if : req.request == "FASTLYPURGE" (PURGE リクエストは FASTLYPURGE というリクエストメソッドで処理されます)
  6. Save and Apply to ボタンで条件を適用

パージのパフォーマンスは Fastly の特徴でもあります。コンテンツを更新すると同時に API によりパージを行うといった自動化処理を実装することにより、頻繁に更新が行われ、リアルタイムに更新を反映したい場合にもコンテンツのキャッシュが可能となります。