web-dev-qa-db-ja.com

Cloudfrontを使用してS3でホストされている静的サイトのindex.htmlのキャッシュを無効にするにはどうすればよいですか?

そのため、クラウドフロントdistを使用してs3でangularアプリをホストしました。古いコンテンツが取得されないように、ファイルのリビジョンを(grunt filerevを使用して)実行します。 index.htmlファイル。他のすべてのファイルはindex.html内で参照されるため、必須です。

静的サイトとして使用するようにバケットを構成しました。したがって、URLでバケットを参照すると、index.htmlが取得されます。

Cloudfrontは、min TTLを0に設定する必要があるため、コンテンツを提供するために常にOriginにヒットします。ただし、すべてのファイルのファイルリビジョンを実行しているため、これは必要ありません( index.htmlを除く)。これらのファイルのcdnキャッシングを利用できます。

また、単一のオブジェクトを無効にするには、max-ageヘッダーを0に設定するとも言われています。index.htmlに以下を追加してみました

<meta http-equiv="Cache-Control" content="public, must-revalidate, proxy-revalidate, max-age=0"/>

ただし、s3にアップロードすると、これは反映されません。 s3cmdまたはダッシュボードを使用してs3にヘッダーを明示的に設定する必要がありますか?そして、index.htmlが変更されてアップロードするたびにこれを行う必要がありますか?

私はcmdを使用して単一のファイルを無効にできることを知っていますが、それは繰り返しのプロセスであり、s3にデプロイするだけでそれ自体を処理できれば素晴らしいと思います。

16
Nirav Gandhi

S3cmdを使用している場合、受け入れられた答えは正しいですが、私はAWS CLIを使用していたので、次の2つのコマンドを実行しました。

まず、実際にコードをデプロイするには:

aws s3 sync ./ s3://bucket-name-here/ --delete

次に、CloudFrontで無効化を作成するには:

aws cloudfront create-invalidation --distribution-id <distribution-id> --paths /index.html

22
Jordan

私自身の質問に答えます。 s3cmd tool を使用してサイトをS3にデプロイし、変更されたすべてのファイルのCloudFrontキャッシュを無効にするオプションがあります(distフォルダーとS3の違い)バケツ)。これにより、インデックスファイルを含む変更されたすべてのファイルのキャッシュが無効になります。新しい変更を本番環境に反映するには、通常15〜20分かかります。

これがコマンドです

s3cmd sync --acl-public --reduced-redundancy --delete-removed --cf-invalidate [your-distribution-folder]/* s3://[your-s3-bucket]

注:macOSでは、このツールはbrew install s3cmdからインストールできます。

お役に立てれば。

6
Nirav Gandhi

Lambdaを使用してプロセスを自動化できます。これにより、特定のイベント(S3の新しいファイル)に応答して特定のアクション(この場合はオブジェクトの無効化)を実行する関数を作成できます。

詳細はこちら: https://aws.Amazon.com/documentation/lambda/

3
Vladimir Mukhin

ローカルディレクトリをs3と同期する場合、次のことができます。

aws s3 sync ./dist/ s3://your-bucket --delete

aws s3 cp \
   s3://your-bucket s3://your-bucket \
   --exclude 'index.html' --exclude 'robots.txt' \ 
   --cache-control 'max-age=604800' \
   --metadata-directive REPLACE --acl public-read \
   --recursive

最初のコマンドは通常の同期であり、2番目のコマンドはS3がindex.htmlrobots.txtを除くすべてのファイルのキャッシュ制御を返すことを可能にします。

その後、SPAを完全にキャッシュできます(index.htmlを除く)。

1
Ming

s3cmd syncを使用して--cf-invalidateオプションを使用する場合、設定によっては--cf-invalidate-default-indexも指定する必要がある場合があります。

マニュアルページから:

カスタムオリジンとS3静的ウェブサイトを使用する場合は、デフォルトのインデックスファイルを無効にします。

これにより、インデックスドキュメント(おそらくindex.html)も無効になります。そうしないと、同期によって更新されたかどうかに関係なくスキップされます。

0