AWS CloudFront + S3 の設定メモ

imatomix
2021年12月9日 13:17

概要

本サイトで、AWS CloudFront を使い始めました。 設定の際、単にS3をオリジンとした CloudFront を用意すればいいだけかと思いきや、キャッシュとCORS周りで思うようにいかなかった箇所があったのでメモっておきます。

S3 + CloudFront

S3上の画像が見れる状態であれば、以下の設定でCloudFrontのディストリビューションを作成すれば、CloudFrontドメインからS3にアクセスできるようになる。
  • オリジナルドメインでS3のドメインを選択する
  • S3バケットアクセスでOAIを作成する(既にあるならそれを選択する)
image

上手くいかなかった箇所と対処法

CORSエラー

cropper.js を使用している個所でCORSエラーが発生した。cropper.js内で画像を取得しに行く際に起きている様子。ちなみにこのエラーはS3のみの際も起きており、その時はS3のCORS設定を行うことで解消した。

対処法

ビヘイビア > キャッシュキーとオリジンリクエスト にて以下の設定を行った。
  • オリジンリクエストポリシーにCORS-S3Origin を選択
  • レスポンスヘッダーポリシーにSimpleCORSを選択
image

キャッシュによる即時反映の阻害

例えばサムネイル画像など、同じファイル名の画像データを更新した際、CloudFront のキャッシュが残っているため、画面に反映されるまで時間がかかってしまう。

対処法

公式のサポートにいくつかの対処法が載っていた。キャッシュクリアは料金的なコストがかかるのと、もともとサムネイルなどの決まったファイル名の画像にはクエリによるバージョン情報を付与していた(CloudFrontへのリクエストに既に付いている)ので、ここでもその方法を使う。ただし、CloudFrontはそのままではクエリパラメータを扱ってくれないため、キャッシュキー設定から有効にする必要がある。

CloudFrontでクエリパラメータを有効にする方法は以下の通り、
  • キャッシュポリシー キャッシュキー設定 > クエリ文字列にて、クエリ文字列を有効にする。
image
  • ビヘイビア > キャッシュキーとオリジンリクエスト >キャッシュポリシー にて、クエリを有効にしたポリシーを選択する。
image