ドキュメントに明らかな答えがないようです。
S3 でファイルを更新し、CloudFront を有効にすると、S3 は無効化シグナルを CloudFront に送信しますか? または、ファイルを更新した後に自分で送信する必要がありますか?
ドキュメントに明らかな答えがないようです。
S3 でファイルを更新し、CloudFront を有効にすると、S3 は無効化シグナルを CloudFront に送信しますか? または、ファイルを更新した後に自分で送信する必要がありますか?
S3 は無効化情報を CloudFront に送信しません。デフォルトでは、CloudFront は、オリジンからデータを取得したときに設定されたキャッシュ コントロール ヘッダーで指定された最大時間まで情報を保持します (必要に応じて、キャッシュから項目を早期に削除する場合があります)。
無効化バッチを作成することで、キャッシュ エントリを無効化できます。これには費用がかかります: 最初の 1,000 件のリクエストは月に無料ですが、それ以降はリクエストごとに $0.005 かかります. もちろん、Amazon Lambda 関数を使用して、s3 イベントに応答してこれをトリガーできます。
もう 1 つの方法は、オブジェクトが変更されたときに別のパスを使用することです (事実上、世代キャッシュ キー)。同様に、クエリ パラメータを URL に追加し、CloudFront に新しいコピーを取得させたいときにそのクエリ パラメータを変更することもできます (これを行うには、CloudFront にクエリ文字列パラメータを使用するように指示する必要があります。デフォルトでは無視されます)。
まれな (しかし大きな) 変更のみを行う場合の別の方法は、単純に新しいクラウドフロント ディストリビューションを作成することです。
私の知る限り、すべての 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) では、キャッシュの無効化は (手動プロセスで) 無料で可能ですが、それに応じてアセットをバージョン管理しているため、これを行うことはめったにありません。