CloudFront で Amazon S3 の古いコンテンツが提供されるのはなぜですか?

所要時間1分
0

Amazon CloudFront を使用して Amazon Simple Storage Service (Amazon S3) に保存されているオブジェクトを提供しています。Amazon S3 でオブジェクトを更新しましたが、CloudFront ディストリビューションではそれらのファイルの以前のバージョンが引き続き提供されています。

簡単な説明

デフォルトでは、CloudFront は Amazon S3 からの応答を 24 時間キャッシュします (デフォルト TTL は 86,400 秒)。24 時間以内に Amazon S3 レスポンスを処理したエッジロケーションにリクエストが届いた場合、CloudFront はキャッシュされたレスポンスを使用します。これは、Amazon S3 のコンテンツを更新した場合でも発生します。

更新された Amazon S3 コンテンツを CloudFront からプッシュするには、次のいずれかの方法を使用します。

解決方法

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

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

このプロセスを実行する前に、次の点に注意してください。

  • Cookie やヘッダーを使用して応答を変更するオブジェクトの特定のバージョンを無効にすることはできません。この場合、CloudFront はオブジェクトのすべてのバージョンを無効にします。
  • 各 AWS アカウントには、1 か月あたり 1,000 の無料無効化パスが許可されています。詳細については、「Amazon CloudFront の料金表」を参照してください。

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

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

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

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

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

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

  • キー名にバージョン番号を付けて、オブジェクトの新しいバージョンをオリジンに保存する。たとえば、/image_v1.png を更新すると、オブジェクトの新しいバージョンが /image_v2.png として保存されます。
  • 元のオブジェクトを更新しますが、オブジェクトのバージョンのクエリ文字列に基づいてキャッシュする。たとえば、クエリ文字列を /image.png?ver=1 から /image.png?ver=2 に更新します。キャッシュポリシーを使用して、キャッシュキーとオリジンリクエストに含まれるクエリ文字列を指定できます。
    注: 以前のバージョン (/image.png?ver=1) も引き続きリクエストできますが、CloudFront キャッシュで利用可能な状態です。

オブジェクトのバージョン管理の各方法について、次の利点と欠点を考慮してください。

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

注: バージョニングされたファイル名やディレクトリ名の指定は Amazon S3 オブジェクトのバージョニングとは関係ありません。Amazon S3 バージョニング機能を使用しても、コンテンツは自動的に更新されません。無効化リクエストを開始した後でキャンセルすることはできないため、ファイルパスは慎重に指定する必要があります。

関連情報

コンテンツをキャッシュに保持する期間 (有効期限) の管理

クエリ文字列の転送とキャッシュ

コメントはありません

関連するコンテンツ