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

フロントエンドをホスティングするためのサーバ構成としてS3 + CloudFrontは人気があると思います。
しかし、デフォルトの設定だとデプロイ後24時間はキャッシュされてしまいます。
そのため、デプロイした直後はキャッシュの状態によっては最大24時間は動作確認できない状態になります。

本記事では、その解消方法を説明します。
やってはいけないこと
先に、やってはいけないことから説明します🙇
キャッシュの削除はやめましょう。
- 本来キャッシュを削除するものではない(キャッシュが切れるのを待つのが一般的)
- キャッシュを削除する度にお金がかかる

キャッシュ削除は最終手段です。
結論
日本向けか海外向けかで結論が変わります。
- 日本向けサービスの場合:キャッシュを切る
- 海外向けサービスの場合:キャッシュが切れるのを待つ(有効期限を延ばすのはアリ)
日本向けサービスの場合
今のところ、リージョンが日本と大阪にしかありません。
ですので、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にお願いしました。