15

ドキュメントに明らかな答えがないようです。

S3 でファイルを更新し、CloudFront を有効にすると、S3 は無効化シグナルを CloudFront に送信しますか? または、ファイルを更新した後に自分で送信する必要がありますか?

4

2 に答える 2

25

S3 は無効化情報を CloudFront に送信しません。デフォルトでは、CloudFront は、オリジンからデータを取得したときに設定されたキャッシュ コントロール ヘッダーで指定された最大時間まで情報を保持します (必要に応じて、キャッシュから項目を早期に削除する場合があります)。

無効化バッチを作成することで、キャッシュ エントリを無効化できます。これには費用がかかります: 最初の 1,000 件のリクエストは月に無料ですが、それ以降はリクエストごとに $0.005 かかります. もちろん、Amazon Lambda 関数を使用して、s3 イベントに応答してこれをトリガーできます。

もう 1 つの方法は、オブジェクトが変更されたときに別のパスを使用することです (事実上、世代キャッシュ キー)。同様に、クエリ パラメータを URL に追加し、CloudFront に新しいコピーを取得させたいときにそのクエリ パラメータを変更することもできます (これを行うには、CloudFront にクエリ文字列パラメータを使用するように指示する必要があります。デフォルトでは無視されます)。

まれな (しかし大きな) 変更のみを行う場合の別の方法は、単純に新しいクラウドフロント ディストリビューションを作成することです。

于 2012-10-08T18:52:25.860 に答える
3

私の知る限り、すべての CDN はこのように機能します。

そのため、通常foo-x.y.z.ext、CDN 上のアセットのバージョン管理などを使用します。foo.ext?x.y.z特定のブラウザやプロキシが?QUERY_STRING.

一般的に、これを確認することをお勧めします: https://developers.google.com/speed/docs/best-practices/caching

多くのベスト プラクティスが含まれており、何をすべきか、どのように機能するかについて詳しく説明しています。

S3 と Cloudfront に関しては、私はキャッシュの無効化についてあまり詳しくありませんが、Frederick Cheung が言及したことはすべて正しいです。

一部のプロバイダーでは、キャッシュを直接クリアすることもできますが、CDN の性質上、これらの変更が即座に行われることはほとんどありません。もう 1 つの方法は、アセットがより頻繁に更新されるように、より小さな TTL (有効期限ヘッダー) を設定することです。しかし、それは CDN の目的にも反すると思います。

私たちの場合 (Edgecast) では、キャッシュの無効化は (手動プロセスで) 無料で可能ですが、それに応じてアセットをバージョン管理しているため、これを行うことはめったにありません。

于 2012-10-09T00:33:46.227 に答える