CloudFront が、Amazon S3 から古いコンテンツを提供し続けるのはなぜですか?

最終更新日: 2020 年 8 月 6 日

Amazon Simple Storage Service (Amazon S3) に格納したオブジェクトの提供に、Amazon CloudFront を使用しています。S3 のオブジェクトは更新したにもかかわらず、CloudFront ディストリビューションは前のバージョンのファイルを提供しています。CloudFront で Amazon S3 コンテンツが更新されないのはなぜですか? これを解決する方法を教えてください。

簡単な説明

デフォルトでは、CloudFront は Amazon S3 からのレスポンスを 24 時間(デフォルト TTL を 86,400 秒間)キャッシュしています。リクエストが エッジロケーションに到着してから24 時間以内に Amazon S3 を提供した場合、 Amazon S3 のコンテンツを更新したとしても、CloudFrontはキャッシュしたレスポンスを使います。

次のいずれかの方法で、CloudFront の更新された S3 コンテンツを CloudFront にプッシュできるようになります。

解決方法

S3 オブジェクトを無効にする

S3 オブジェクト無効にして、CloudFront ディストリビューションのキャッシュからレスポンスを削除できます。オブジェクトがキャッシュから削除されると、次のリクエストでは、 Amazon S3 から直接オブジェクトを取得します。

無効化を実行する前に、以下の点を考慮してください。

  • 無効化は、ウェブディストリビューション上でしか実行できません。リアルタイムメッセージングプロトコル (RTMP) ディストリビューションは、無効にすることができません。
  • 特定バージョンの Cookie を使用するオブジェクトやレスポンスを変更するヘッダーを無効にすることはできません。この場合、CloudFront はオブジェクトのすべてのバージョンを無効にします。
  • 各 AWS アカウントには、無料で 1 か月あたり 1,000 回のパスの無効化が許可されています。パスの無効化が 1 か月あたり 1000 回を超える場合は、「Amazon CloudFront の料金」にある「無効リクエスト」の覧をご参照ください。

無効化を作成する際は、オブジェクトパスが次の要件を満たしていることをご確認ください。

  • オブジェクトパスは、個々のオブジェクトであること、あるいはパスの最後がワイルドカード文字 (*) になっている必要があります。たとえば、/images/*.jpeg のようなパスを無効化できません。これは、パスが個々のオブジェクトに対応してないこと、そして最後にワイルドカードが付いていないからです。
  • 指定したパスは、オブジェクトのパスの大文字に完全に一致する必要があります。無効化リクエストでは、大文字と小文字が区別されます。
  • クエリ文字列に基づく特定のバージョンのオブジェクトを削除するには、無効化パスに QueryString を含めます。

オブジェクトの無効化を完了するには、通常 60~300 秒かかります。無効化のステータスを確認するには、CloudFront コンソールでディストリビューションを表示します。

オブジェクトのバージョニングを使用する

コンテンツを頻繁に更新する場合は、 オブジェクトバージョニングを使用して、CloudFront ディストリビューションのキャッシュをクリアすることをお勧めします。頻繁にキャッシュを更新する場合、オブジェクトのバージョニングを行うことで、無効化するよりコストがかからない場合があります。

次のいずれかの方法を使用して、バージョニングをオブジェクトに追加します。

  • キー名にバージョン番号を含めながら、オブジェクトの新しいバージョンをオリジンに保存します。たとえば、/image_v1.png を更新する場合、オブジェクトの新しいバージョンを /image_v2.pngとして保存します。
  • オリジンではオブジェクトを更新しますが、キャッシュはオブジェクトバージョンのクエリ文字列に基づいて行われます。たとえば、クエリ文字列を /image.png?ver=1 から /image.png?ver=2に更新します。
    注: CloudFront キャッシュで利用可能である間は、以前のバージョン(/image.png?ver=1)もリクエストが可能です。

オブジェクトバージョニングの方法については、それぞれ次のような長所と短所があることを念頭に置いてください。

  • オブジェクトの新しいバージョンをオリジン(Amazon S3)に保存する場合は、以前のバージョンも引き続き同じ名前で使用できるため、変更を元に戻すことが可能です。ただし、複数バージョンのオブジェクトを保存することで、ストレージコストが増加する場合があります。
  • オリジンではオブジェクトを更新しながら、クエリ文字列に基づいたキャッシュを行えば、ストレージコストを削減できます。ただし、ロールバックの準備段階では、古いバージョンのオブジェクトをオフラインにしておくことがベストプラクティスです。

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?