はじめに
AWS サービス別資料 にある Amazon CloudFrontの概要 の資料をもとに社内で勉強会を実施しましたので、そのメモを共有します。
Amazon CloudFrontについて
概要
- AWSが提供するCDN(Content Delivery Network)サービス
- 世界中のエッジにオリジンのキャッシュが展開する
- リージョンによらず世界中のアクセスからのレスポンスを改善し、オリジンの負荷を削減
構成要素
-
オリジン
- キャッシュ元のWebサイト・サービス
-
エッジロケーション
- 「エッジ」はIoTでも使われるエッジコンピューティングのエッジと同じで、利用者の近くでコンピュータ資源を使うことを指す
- エッジロケーションは世界に約200拠点ある。リージョン、AZの中または近くにある(はず)
- グローバルサービス(Route53とか)も AWS エッジロケーションでホストされている
- ユーザに近い拠点で配信することになり、レイテンシ(通信遅延)が減少し、ユーザ体験を高めることにつながる
-
リージョナルエッジキャッシュ
- 最近はエッジロケーションとオリジンの間にリージョナルエッジキャッシュという大容量キャッシュ層が挟まれていて、スペック向上している
- https://dev.classmethod.jp/articles/cloudfront-regional-edge-cache/ が参考になる
-
「ユーザの近く」はどうやってわかる?
- 謎テクノロジー
- 資料p.15の図によると、CloudFront専用のDNS(機械学習込み)で99.8%の精度で位置および国情報がわかるらしい
機能
-
以下のHTTP/HTTPSメソッドに対応
- GET, HEAD, OPTION(選択可能) (Cacheモード)
- PUT, POST, DELETE, OPTION, PATCH (Proxyモード) → キャッシュはされず、 オリジンにフォワードする
-
キャッシュ時間
- デフォルトは24時間
- キャッシュコントロールヘッダー(デフォルトTTL、最小TTL 、 最大TTL) の 3 つの値でコントロール可能
- 最小TTL = 0秒 の場合とそれ以外の場合でCache-Control no-cacheの挙動が違うため注意
-
キャッシュの無効化
- コンテンツごとまたはワイルドカード指定可能。(ただし料金はかかる)
-
ヘッダーをオリジンへ転送
- 任意のヘッダーを付与することが可能
- CroudFront独自ヘッダーとして、接続プロトコル、デバイス判定、地域・国判定した結果をオリジンに送ることが可能
-
Cookie をオリジンへ転送
- Cookieもキャッシュする
- セッション情報などキャッシュできないものに絞ってホワイトリストに追加してフォワードする
-
クエリパラメータ値をオリジンへ転送
- クエリパラメータと値もキャッシュする
- languageなどキャッシュできないものに絞ってホワイトリストに追加してフォワードする
-
カスタムエラーページの生成
- オリジンで5xxエラー発生時にS3のカスタムエラー静的HTMLを表示する
- エラーキャッシュ期間はデフォルト5分
-
タイムアウト
- オリジンの読み取りタイムアウト(デフォルト30秒、4秒〜60秒まで指定可能)
- キープアライブタイムアウト(デフォルト5秒、1秒〜60秒まで指定可能)
-
オリジンフェイルオーバー
- プライマリオリジン、セカンダリオリジンを指定可能
- オリジンシールド(オリジンへの到達の前に必ず通過する配信拠点)を設定可能
-
セキュリティ
- 地域・国制限 - クライアントの地域情報を元にアクセス制御できる(ブラックリストまたはホワイトリスト)
- 署名付きURL/Cookie - セキュリティ要件が厳しいデバイス - オリジン間で使える?
- AWS WAF、AWS Shield - オプションでCloudFrontの前段に設置できる
-
レポート・統計
- CloudWatch連携あり
- Google Analytics的に分析用途にも使える?
- アクセスログの詳細解析用としてAmazon Athena、QuickSightに流す用途もあり
性能
- 他CDNよりもトラフィック減少
- p.20の図は悪いグラフ図(赤線が同じ位置にない)
料金体系
- AWS EC2やS3のオリジンからCloudFrontのエッジへの通信量は無料(逆はかかる)
- データ転送アウト(GBあたり)とリクエスト(10000件あたり)とオリジンへのデータ転送アウト(GBあたり)でそれぞれ料金発生
- キャッシュの無効化リクエスト(最初の1000ファイル/月は無料、それ以降はかかる)
Lambda@Edgeについて
概要
- CloudFrontのエッジで展開(ディストリビューション)されて動作するAWS Lambda(Node.js、Python)
- 4つのCloudFront周辺のイベントでLambdaをトリガーできる1
- CloudWatchのメトリクスもある
まとめ
- CloudFront は世界中のエッジにオリジンのキャッシュが展開されることでユーザーへのレスポンスを改善し、オリジンの負荷を削減
- CloudFront は AWS WAF との組み合わせや、組み込みの DDoS 対策により、高いセキュリティを実現
- ログ & レポート機能でアクセス傾向分析も可能
- 大容量の画像・動画配信や大量アクセスがあるサイトでの活用が有用
- 小規模でも WAF/DDoS 等のセキュリティ対策が必要なサイトで有用