こんにちは、小林です。
みなさん、GWはどのように過ごしましたか?
私は信州に旅行に行きましたが、電車やバスの時間を調べておらず、2日で30km歩くという苦行を課すことになってしまいました。。。
さて、今回もAWS関連のブログを書きましたので、よろしくお願いします。
はじめに
2020年12月ごろに初めてCloudFrontを使用しました。
その際にキャッシュをLegacy cache settingsを使用して、設定していました。
キャッシュの設定は、ビヘイビアごとに設定する必要があるにもかかわらず、同じ設定を複数の箇所に指定するのはとても手間がかかりました。
さらにその1年後にキャッシュの設定を確認したところ、当時設定した内容と異なっていることに気づきました。
これらの解決策を調べていたところ、以下のブログを見つけました。
なぜ、設定内容が変更されてしまったのかはわかりませんでしたが、「ポリシー」を利用することで冗長な設定が不要になり、設定も楽になりました。
このブログは2020年7月に公開になったもので、よく調べていれば、苦労することなく構築できたのかもしれません。(反省)
今回はそのポリシー、特にキャッシュポリシーとオリジンリクエストポリシーについて紹介します。
※CloudFrontを使用したことがある人を対象としているため、ポリシー以外の説明は省略しています。
CloudFrontポリシー
CloudFrontイベント
ポリシーの話をする前に少しCloudFrontのイベントの話をします。
CloudFront全体での正式な名称なのかが曖昧ですが、クライアント-ディストリビューション-オリジン間でのリクエスト/レスポンスの名称として、以下が定義されています。
- クライアント-ディストリビューション間・・・ビューワーリクエスト/レスポンス
- ディストリビューション-オリジン間・・・オリジンリクエスト/レスポンス
参考:Lambda@Edge 関数をトリガーできる CloudFront イベント
※Lambda@Edge関数としては、マニュアルが用意されていますが、それ以外では見つかりませんでした。しかし、CloudFront全体で使用されている言葉だと感じています。
CloudFrontポリシー
CloudFrontでは、以下の3種類のポリシーが用意されています。
- キャッシュポリシー
- ビューワーリクエスト時に使用する
- キャッシュの条件に含める値を指定する
- オリジンリクエストポリシー
- オリジンリクエスト時に使用する
- オリジンリクエストに含める値を指定する
- ビューワーレスポンスポリシー
- ビューワーレスポンス時に使用する
- ビューワーレスポンスに追加するHTTPヘッダーを指定する
参考:ポリシーの使用
キャッシュポリシー
キャッシュポリシーでは、2つの設定を行うことが可能です。
- キャッシュの条件
- キャッシュの有効期限
キャッシュの条件
HTTPヘッダー、Cookie、クエリ文字列によって、キャッシュの条件を指定します。
上記の設定では以下の値が全て一致する場合にキャッシュされている内容をレスポンスとして返却することになります。
- HTTPヘッダーに含まれるUser-Agentの値
- cookieに含まれるsampleの値
- リクエストクエリ文字列に含まれるnameの値
参考:キャッシュキーについて
キャッシュの有効期限
キャッシュの有効期限は複雑な条件分岐によって決定します。
(ここでは省略しますので、公式ドキュメントを参考にしてください)
参考:コンテンツがキャッシュに保持される期間 (有効期限) の管理
オリジンリクエストポリシー
キャッシュミス(キャッシュされていない)した場合に、オリジンリクエストに送信する値を設定します。
デフォルトで以下の値が含まれます。
- URLパス(ドメイン名、クエリ文字列を含まない)
- リクエストボディ
- CloudFrontがオリジンリクエストに自動的に含めるHTTPヘッダー
-
Host
、User-Agent
、X-Amz-Cf-Id
、etc
-
また、上記に加えてキャッシュポリシーに指定した内容は、オリジンリクエストに含まれます。
上記のオリジンリクエストポリシーがあり、以下のリクエストをした場合
curl -H ‘User-Agent: sample_agent’ -b ‘sample=true’ -d ‘sample=false’ -d ‘name=kobayashi’ -d ‘age=30’ https://example.com
- キャッシュポリシーの設定により、オリジンに送信されるもの
- HTTPヘッダーの
User-Agent
- cookieの
sample
- クエリ文字列の
name
- HTTPヘッダーの
- オリジンリクエストポリシーの設定により、オリジンに送信されるもの
- クエリ文字列の
age
- クエリ文字列の
参考:オリジンリクエストの制御
感想
冒頭で書いた通り、設定が冗長ではなくなったので、管理が楽にはなったものの、まだ仕様を把握しきれていない部分が多いため、使いこなせているとは言えない状態です。
これからも精進を怠らず、使いこなせるようになりたいと思います。