6

CloudFront CDNの上にS3バケットがあります。S3/CloudFrontは、 "Cache-Control:max-age = 365000000、immutable"というヘッダーを持つすべてのファイルを提供します。

このS3バケットは「不変」です。つまり、そこにファイルをアップロードすると、それを削除したり更新することはありません。すべてのクライアントがS3/CloudFrontからのファイルを非常に積極的にキャッシュすることは安全です。

現在、Etagsはうまく機能しており、クライアントはほとんどの場合304応答を返します。しかし、304レスポンスを得るには、より積極的なキャッシュによって回避できる往復が必要です。

だから私はこの振る舞いが欲しい:S3キャッシュは変化しないので

  • CloudFrontのCDNキャッシュは、無効化され得ることはありません。 CloudFrontは、ファイルに対して複数回S3を再度尋ねる必要はありません。私はCloudFrontの配布設定を使用してその設定に成功したと思います。

  • CloudFrontのヘッダCache-Control: max-age=365000000, immutableを持つすべてのファイルを提供する必要があります(immutableは、2016のような新しい、部分的にサポートされた値である)

私はどのように私は、所望の結果を達成することができます理解していません。私はCloudFrontまたはS3レベルでそれを処理する必要がありますか?各S3ファイルに適切なヘッダーを設定するためのいくつかのことを読んだ。私が使用できるカスタムHTTPヘッダーを持つすべてのファイルを提供するためのグローバル設定はありませんか?

答えて

13

CloudFrontまたはS3レベルで対応する必要がありますか?

現在、カスタムhttpヘッダーをCloudfrontまたはS3に追加するためのグローバル設定はありません。 httpヘッダーをオブジェクトに追加するには、S3でバケット内の各オブジェクトに個別に設定する必要があります。それらはオブジェクトのメタデータに格納され、AWS S3 Consoleの各オブジェクトの「メタデータ」セクションにあります。

通常、オブジェクトをバケットに追加するときにヘッダを設定するのが最も簡単です。そのための正確なメカニズムは、使用しているクライアントアプリケーションまたはsdkによって異なります。

あなたが--cache-control optionを使用するAWS CLIコマンドを使用して:https://stackoverflow.com/a/22522942/6720449

するか、あなたがAWS S3のコマンドを使用することができます。この中で説明したよう

aws s3 cp test.txt s3://mybucket/test2.txt \ 
    --cache-control max-age=365000000,immutable 

既存のオブジェクトを変更するには、s3cmdユーティリティはSO答えるmodifyオプションがありますこのSOの答え:https://stackoverflow.com/a/29280730/6720449で説明されているように、メタデータを変更するオブジェクトを自分自身にコピーし直します。例えばバケット内のすべてのオブジェクトにメタデータを交換する:

aws s3 cp s3://mybucket/ s3://mybucket/ --recursive --metadata-directive REPLACE \ 
    --cache-control max-age=365000000,immutable 

CloudFrontのCDNのキャッシュを無効にしない飽きないはずです

これは非常に厳しい要件です - あなたは今までからCloudFrontのキャッシュを防ぐことはできませんが無効になっています。つまり、の設定で、のクラウドフロントの無効化が作成されないようにします(作成するユーザーに十分な権限がある場合)。したがって、ラウンドアバウトでは、ユーザ、ロール、またはグループに、cloudfront:CreateInvalidation IAM許可を使用して配布に無効化を作成する権限がないことを保証することで、無効化を防ぐことができます。

しかし、CloudfrontがバックエンドのCache-Controlに違反してキャッシュを無効にする理由はいくつかあります。 Maximum TTL設定が設定されていて、それが最大年齢よりも小さい場合。

+0

ありがとうございました。私はmodifyコマンドを使って行くつもりです。もしCloudFrontが時にはそれを無効にしてしまってもそれほどうまくないのであれば、どちらも大きな問題ではない –

+0

"CloudFront CDNキャッシュは決して無効にならないはずです" *は非常に厳しいです。実際、それは単に合理的な期待ではありません。モノリシックキャッシュは1つありません。各エッジに1つずつ存在し、オブジェクトの要求を処理する各エッジは、最初は原点からフェッチします。オブジェクトは、アクセスが頻繁でないこと(「人気」)のために、任意のエッジから取り除くこともできます。それはキャッシュです...定義によっては揮発性ですが、全体的には非常に一貫しています。 [なぜクラウドフロントからキャッシュからオブジェクトを削除するのは単なる時間ですか?](http://stackoverflow.com/a/32878535/1695906) –

関連する問題