CloudFront(CDN)には、一度リクエストされたコンテンツをキャッシュし、次のリクエストで再利用する機能があります。 この機能は、ページロードの高速化とオリジンサーバーの負荷削減に役立ちますが、何らかの理由でキャッシュを削除したいことがあります。例えば、最新のコンテンツにすぐに切り替えたい場合や誤ったコンテンツがキャッシュされた場合がこれに該当します。
CloudFrontにはこういった状況で利用できるキャッシュ削除を行う機能があります。本記事では、CloudFrontによるキャッシュの削除方法とその考慮事項について解説します。
CloudFrontのキャッシュの削除方法
キャッシュの削除は簡単に行えます。ディストリビューションからキャッシュ削除タブを選び、作成を選択します。
次に、削除したいキャッシュのパスを指定します。
URLではなくパスを指定する点に注意してください。例えば、この記事(URL: https://www.bloomblock.net/media/amazon-cloudfront-cache-invalidation/
)のキャッシュを削除したい場合は、/media/amazon-cloudfront-cache-invalidation/
を指定します。
パスの指定には、*(ワイルドカード)が利用できます。 こちらの画像のように/*
を指定すると全てのコンテンツのキャッシュが削除されます。
CloudFrontのキャッシュ削除のコスト
毎月1000パスまでは無料でキャッシュを削除することができます。 1000パス以降は、$0.005のコストが発生します。詳しくはAWSの料金ページをご覧ください。
このパスの数え方はやや特殊であり、前述した/*
で全コンテンツのキャッシュを削除した場合でも1パスとして数えられます。
そのため、削除したいコンテンツがあり、そのパスに共通部分がある場合、*を利用することでキャッシュ削除のコストを抑えられます。
CloudFrontのキャッシュ削除の考慮事項
キャッシュ削除は便利な機能ですが、リクエストが多いWebサイトで乱用することは厳禁です。
キャッシュを削除する前に次のことは認識しておきましょう。
- オリジンサーバーへの負荷が上昇する
-
キャッシュが削除されると、ユーザーからのリクエストがオリジンサーバーへ到達するようになり、一時的にオリジンサーバー負荷が上昇します。広い範囲のキャッシュを削除する場合、ユーザーリクエストが少ない深夜に実施するといった配慮が必要です。
- キャッシュの削除はオリジンサーバーに近いところから順に実施する
-
CDNを複数接続していたり、オリジンサーバー側でもVarnishなどのキャッシュを利用している場合は、キャッシュの削除はオリジンサーバーに近いところから順に削除するという原則を覚えておいてください。 オリジンサーバーに近いところのキャッシュが残っている限り、古いコンテンツが表示され続けてしまいます。
ブラウザキャッシュの削除は可能?
結論から言うと、ブラウザキャッシュをCloudFrontの機能で削除することはできません。そのため、ブラウザキャッシュの利用はCloudFrontのキャッシュよりも、慎重に検討する必要があります。
ブラウザキャッシュを削除する方法としては、Clear-Site-Dataヘッダーがあります。このヘッダーをレスポンスにつけることでブラウザキャッシュを削除することができます。 ただし、サポートしていないブラウザがある、個別のコンテンツは指定できないと制約も多いため、ブラウザキャッシュを確実に削除する方法はないと言えます。
CloudFrontでClear-Site-Data
を付与してユーザーにレスポンスしたい場合は、CloudFront Functionsが利用できます。下記の記事では、Cache-Control
を書き換えていますが、同様の方法でClear-Site-Data
を追加できます。
また、CDNとブラウザの両方のキャッシュ戦略を設計する際は、次の記事が参考になります。
まとめ
本記事では、CloudFrontのキャッシュ削除機能について解説しました。キャッシュ削除ができることを把握しておけば、誤ったコンテンツがキャッシュされた場合などの緊急時に焦らず対処ができますので、覚えておくと良いでしょう。
キャッシュを削除するとオリジンサーバーの負荷が一時的に上昇することも考慮して、時間帯などを調整することもおすすめ致します。