S3デプロイ直後にキャッシュが残る問題について

フロントエンドをホスティングするためのサーバ構成としてS3 + CloudFrontは人気があると思います。
しかし、デフォルトの設定だとデプロイ後24時間はキャッシュされてしまいます。

そのため、デプロイした直後はキャッシュの状態によっては最大24時間は動作確認できない状態になります。

デフォルトのTTLは86400秒

本記事では、その解消方法を説明します。

やってはいけないこと

先に、やってはいけないことから説明します🙇

キャッシュの削除はやめましょう。

  • 本来キャッシュを削除するものではない(キャッシュが切れるのを待つのが一般的)
  • キャッシュを削除する度にお金がかかる
AWSでいうとこの画面です

キャッシュ削除は最終手段です。

結論

日本向けか海外向けかで結論が変わります。

  • 日本向けサービスの場合:キャッシュを切る
  • 海外向けサービスの場合:キャッシュが切れるのを待つ(有効期限を延ばすのはアリ)

日本向けサービスの場合

今のところ、リージョンが日本と大阪にしかありません。
ですので、CloudFrontでキャッシュしたところで、東京-大阪間(約400km)の短縮にしかならないので、ほぼほぼ無意味です。

キャッシュは切りましょう。

CloudFrontのディストリビューションを開き、ビヘイビアからキャッシュポリシーの変更を行うことができます。
「Managed-CachingDisabled」を選択することでキャッシュを切ることができます。

海外向けサービスの場合

海外向けの場合はキャッシュは役立つかもしれません。
ユーザから最も近いリージョンにデータがキャッシュされます。

毎回、海外から東京や大阪のリージョンまでアクセスするとパフォーマンスに悪影響が発生しそうです。

対処方法

キャッシュの有効期間を短くしましょう。

CloudFront > ポリシー > キャッシュを選択し、キャッシュを作成してください。

以下の3つを設定すると良いです。
最小TTL、最大TTL、デフォルトTTLの説明は後述します。

  • 最小TTL
  • 最大TTL
  • デフォルトTTL

次に、作成したキャッシュポリシーを適用します。
こちらも日本向けサービスと同じようにCloudFront > ディストリビューション > ビヘイビアからキャッシュポリシーを設定することができます。

最小TTL、最大TTL、デフォルトTTLとは

TTL(Time to Live)は、CloudFrontがコンテンツを各地域のサーバにキャッシュする時間を指定するためのパラメーターです。

最小TTLとは

最小TTLは、CloudFrontがコンテンツをキャッシュする最短時間を設定するパラメーターです。
この値を設定すると、CloudFrontは、キャッシュされたオブジェクトを配信する前に、この時間が経過するまで待ちます。

最大TTLとは

最大TTLは、CloudFrontがコンテンツをキャッシュする最長時間を設定するパラメーターです。
この値を設定すると、CloudFrontは、指定した時間が経過する前に、キャッシュされたオブジェクトを再度取得するようになります。

デフォルトTTLとは

デフォルトTTLは、CloudFrontがコンテンツをキャッシュする標準的な時間を設定するパラメーターです。
この値を設定すると、CloudFrontは、特別な指定がない場合には、すべてのオブジェクトに対してこの時間を適用します。

設定のコツ

これらのTTLパラメーターは、コンテンツの変更頻度や、利用者の需要に合わせて調整することができます。

たとえば、コンテンツの変更頻度が高い場合には、最小TTLを短く設定しておくことで、最新のコンテンツをすばやく配信することができます。一方、コンテンツの変更頻度が低い場合には、最大TTLを長く設定することで、各地域のサーバのキャッシュを最大限に活用することができます。

まとめ

TTLの説明はChatGPTにお願いしました。