CloudFront 導入検討時の備忘録

ExpiresCache-Control max-age

オブジェクトのキャッシュを制御するには、Expires ヘッダーフィールドではなく、Cache-Control max-age ディレクティブを使用することをお勧めします。
Cache-Control max-age と Expires の両方の値を指定した場合、CloudFront は Cache-Control max-age の値のみを使用します。
コンテンツがエッジキャッシュに保持される期間の管理 (有効期限) – Amazon CloudFront

Cache-ControlExpires と 各種TTLの関係

こちらの表にまとまってる。

特に、

  • 最小 TTL > 0
  • 「オリジンが、Cache-Control: no-cache、no-store、および private ディレクティブ、またはこのいずれかをオブジェクトに追加する」

上記の場合

「CloudFront は、CloudFront 最小 TTL の値に対応する期間、オブジェクトをキャッシュに保持します。」

知らないと死人が出そう。

WebSocket と CloudFront

WebSocket でコンテンツを取得するウェブサイト。CloudFront は WebSocket をサポートしていません。
CloudFront をウェブサイトと統合する

冷静に考えれば仕方がない。

CloudFront 独自のHTTPヘッダたち

アプリケーション側で個別対応が必要になる。

HTTPリクエストの Host ヘッダ

【CloudFront】HTTPリクエストのHostヘッダについて (カスタムオリジンを使用する場合)

ログについて

オリジンサーバーのアクセスログは CloudFront でのキャッシュミス時のアクセスのみになるので、 CloudFront ディストリビューションの Logging 設定を有効化して、 S3 に CloudFront のアクセスログを書き出すようにする。 さらに、ログの量次第では、S3に吐き出されたアクセスログのローテーションについても考慮が必要になる。

または、Google アナリティクス等のアクセス解析ツールを導入しても良いでしょう。

キャッシュを無理やり無効化する

ビヘイビア設定にて下記の設定を行えば、ビューアーのリクエストが CloudFront を素通りするようになる。

・Allowed HTTP Method: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE

・Cache Based On Selected Request Header: All
=> これを設定すると、Object Caching のところに 
"When you choose 'All' for 'Cache based on selected request headers', 
CloudFront doesnt cache your objects. 
In that configuration, Minimum TTL must be 0 seconds. " 
というメッセージが表示されてキャッシュが無効化される。

・Forward Cookies: All
・Query String Forwarding And Caching: Forward all, based on all