2

S3でイメージを維持し、cloudfrontを使用してそれらにアクセスする方法に関するベストプラクティスがあるかどうかを理解したいと思います。この質問をする理由は、S3とクラウドフロントがどのように連携するかによるものです。

画像をアップロードし、S3のメタタグを使用して有効期限を設定し、クラウドフロントURLを使用して目的の画像を取得します。問題は、同じ画像を更新しようとすると、metのメタタグに設定された有効期限が切れるまですぐには反映されないことです。

S3に変更があった場合、最新の画像を取得する良い方法はありますか?

4

2 に答える 2

3

キャッシュしたファイルが変更されたことをCloudFrontに通知して、S3から更新されたバージョンを取得するようにする必要があります。これを行うには、CloudFront上のファイルを無効にします。次にそのファイルがリクエストされたときに、CloudFrontはS3に戻って最新バージョンを取得します。

于 2012-05-08T18:39:30.930 に答える
2

Cloudfrontの無効化機能を使用することはできますが、伝播遅延があるため、images / css/jsに大幅な変更を加えると問題になる可能性があります。

Cloudfrontにアクセスする直前と、Cloudfrontにアクセスした後、変更が常に伝播することを確認しながら、同様の進行を行いました。他の多くの人も同様に、私が書いたスクリプトのいくつかのアップグレード/更新と一致していると思います。私は他の人にそれを使用させることにしました(ここにもっと歴史があります!)

スクリプトはここでホストされています:https ://github.com/alltuition/version-tags

基本的には、Linuxコマンドとgit履歴を使用してメディアファイルに加えられたファイルの変更を把握し、sedを使用して変更されたファイルの別のパスへのすべての参照を更新するPythonまたはDjangoスクリプトです。(ファイルは、ワイルドカードエイリアスを使用できるサーバーから提供する必要があります(READMEには、Nginx、Apache、およびDjango開発サーバーの手順が記載されています)。)

メディアファイルへのすべての変更は、最初に変更されたhtmlページを取得した最初の人がCloudfrontのキャッシュにないURLをリクエストしたため、Cloudfrontが新しいバージョンのファイルを取得するため、ユーザーのブラウザーですぐに更新されます。これは、すべてのメディアファイルが期限切れにならないように設定できることも意味します。

于 2012-06-18T18:42:25.523 に答える