モチベーション
CloudFrontを実務で使う機会があったのだが、全体的に何ができるか?なんの設定が必要なのか?何と組み合わせて使うと効果的なのか?がわからなかったためまとめる。
参照
20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive
Amazon CloudFront を活用したウェブサイトの可用性向上 | Amazon Web Services
CloudFrontの基本機能
AWS global networkを使用することで非キャッシュコンテンツの高速化
CloudFrontを使うとオリジンまでの通信は AWS global network を使用するためインターネット上でのルーティング回数削減などにより、高速な配信が可能になる。
フラッシュクラウドからのオリジンサーバーの保護
カスタムオリジンの場合のリクエストおよびレスポンスの動作 - Amazon CloudFront
リクエストを折りたたむという表現が使われることが多いが、大量の同時リクエストをオリジンに届かないようにしてくれる。
- 同一オブジェクトの同時リクエストが大量に来た場合、最初のリクエストだけ即時オリジンに投げ、それ以外のリクエストは一時停止する。
- この間にレスポンスがあれば、他のリクエストはレスポンスを使い回すため負荷軽減となる。
- レスポンスが停止終了までに間に合わない場合は、停止後オリジンにリクエストを投げる。
キャッシュキーについて
-
CloudFrontはキャッシュキーを共有するリクエストを折りたたむ。
-
デフォルトのキャッシュキーは以下情報を含む。
- CloudFront ディストリビューションのドメイン名 (d111111abcdef8.cloudfront.net など)
- リクエストされたオブジェクトの URL パス (例: /content/stories/example-story.html)
つまり以下のようなリクエストの場合、キャッシュキーに含まれるのは赤文字部分となる。
GET **/content/stories/example-story.html**?ref=0123abc&split-pages=false HTTP/1.1 Host: **d111111abcdef8.cloudfront.net** User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/68.0 Accept: text/html,*/* Accept-Language: en-US,en Cookie: session_id=01234abcd Referer: <https://news.example.com/>
キャッシュキーのカスタマイズ
-
キャッシュポリシーを作成することでキャッシュキーに含める情報をカスタマイズできる。
すべてのリクエストの折りたたみを防ぐ
- マネージドキャッシュポリシーの
CachingDisabled
を使用すると、リクエストの折りたたみとキャッシュをしなくなる。
DDoS 攻撃からの保護
CloudFrontでは、AWS Shield によるDDoS 保護が有効化されており、ネットワーク層/トランスポート層のDDoS 攻撃に対する緩和が自動的に行われる。
また、AWS WAF と連携することでアプリケーション層のDDoS保護も可能。
アプリケーション層 |
---|
プレゼンテーション層 |
セッション層 |
トランスポート層 |
ネットワーク層 |
データリンク層 |
物理層 |
DDoS耐性の高いアーキテクチャ
Behavior関連機能
配信コンテンツのGzip,Brotli圧縮機能
配信コンテンツファイルを圧縮してレスポンスすることができる。
署名付きURL/署名付きCookie
署名付きURL
- S3の署名付きURLと仕組みとしては同じ
- CloudFrontから発行する場合、CloudFrontのキーペアで署名されるためCloudFrontで署名検証されたものだけOACでS3に届くという形になる。
- S3と比較したメリット
- データ転送料の無料枠が大きい。
- S3の外部へのデータ転送料の無料枠は100GBなのに対し、CloudFrontの無料枠は1TBであるためより大きいファイルのアップロード・ダウンロードなどがある場合に料金面で有利なことがある。
- S3 ←→ CloudFront 間の通信料はS3リクエスト料のみかかるが非常に少額である。
- S3の外部へのデータ転送料の無料枠は100GBなのに対し、CloudFrontの無料枠は1TBであるためより大きいファイルのアップロード・ダウンロードなどがある場合に料金面で有利なことがある。
- キャッシュが使える
- より大量のアクセスがS3にかかる場合、CloudFrontのキャッシュを使うことで高速な配信が可能になる。
- リクエスト料金は常時1,000万リクエストまでの無料枠がある。
- これをキャッシュと組み合わせれば、S3のリクエスト料金なしでコンテンツ配信ができたりする。
- データ転送料の無料枠が大きい。
署名付きCookie
- TODO: 後ほど記載予定
Distribution関連機能
- 特定の国のユーザーに関するアクセス制限
- カスタムエラーページの設定
- キャッシュファイルの無効化
リクエストのログ記録
CloudFrontのアクセスログ保存方式は2種類ある。
- 標準ログ (アクセスログ)
- 選択したS3バケットに記録され、S3に保存する分の料金のみかかる。
- リアルタイムログ
- ログの出力は、ディストリビューションにリクエストされてから数秒以内。
- 送信されるのは、Kinesis Data Streams で選択したストリーム。
- 料金は、リアルタイムログ自体 と Kinesis Data Streams の使用料。
CloudFront とエッジ関数のログ記録 - Amazon CloudFront