#CloudFront
・CDN
- Contents Delivery Network
- エッジのキャパシティを利用して効率的かつ高速にコンテンツ配信
→ユーザに最も近いサーバに誘導して、配信を高速化
→エッジサーバではコンテンツのキャッシングを行い、オリジンに負荷をかけない
・最適なエッジへの誘導方法
①ドメイン名問い合わせ(クライアント→DNS)
②IPアドレス問い合わせ(DNS→CloudFrontDNS)
③最適なEdgeアドレス応答(CloudFrontDNS→DNS)
④最適なEdgeへアクセス(クライアントからEdge)
⑤キャッシュがある場合:コンテンツ配信
キャッシュがない場合:オリジンサーバから取得
・CloudFront特徴
- 84拠点のエッジサーバ
- 予測不可能なスパイクアクセスへの対応
- ビルトインのセキュリティ機能(WAF連携、DDoS対策)
- 充実したレポート
・動的コンテンツ:ELBでEC2に負荷分散。HTML
静的コンテンツ:S3などで保存
・84エッジロケーション→11リージョナルキャッシュ→オリジン
→オリジンに対するコンテンツ取得を削減
・CloudFront Distribution
- ドメインごとに割り当てられるCloudFrontの設定
- 40Gbpsもしくは100,000RPSを超える場合上限申請必要
- HTTP/2対応
- IPv6対応
- CNAMEエイリアスを利用して独自ドメイン名の指定可能
→Route53と合わせたZone Apex(wwwがないもの)
も利用可能
・Gzip圧縮機能
エッジでコンテンツをGzip圧縮することでより高速にコンテンツ配信
※S3はGzip圧縮をサポートしていないので有効
・キャッシュコントロール
- キャッシュヒット率の向上がCDNのポイント
→URLおよび有効化したパラメータ値の完全一致でキャッシュが再利用
・キャッシュの無効化
コンテンツごとの無効化パス指定
・ダイナミックコンテンツ機能
オリジンサーバに対して下記情報をフォワードすることで、動的なページの配信にも対応
- ヘッダー(必要最小限)
- Cookie(Cookie名と値をセットでCloudFrontがキャッシュ)
- クエリ文字列パラメータの値
・ダイナミックキャッシング
リクエストパターンをもとにオリジンへのアクセスルールを個別指定可能
・カスタムエラーページ
4xx系
:クライアントエラー。オリジン側で対処
5xx系
:サーバエラー。CloudFrontで対処
参考URL:https://goo.gl/NcUQiY
・読み取りタイムアウト
CloudFrontがオリジンからの応答を待つ時間を指定
デフォルトは30秒
・キープアライブタイムアウト
接続を閉じる前に、CloudFrontがオリジンとの接続を維持する最大時間
デフォルトは5秒
・セキュリティ
- HTTPS対応
- SSL証明書
→専用IPアドレスSSL証明書には申請必要 -
ビューワーSSLセキュリティポリシー
→クライアントとCloudFront間のSSL/TLSプロトコルとCipherの組み合わせを指定可能 - オリジン暗号化通信
- オリジンカスタムヘッダー
-
GEOリストリクション
→地域情報でアクセス判定。制御されたアクセスには403を応答 -
署名付きURL
→プライベートコンテンツ配信。
→署名付きURLを生成する認証サイトにクライアントから認証リクエスト
→認証サイトからEdgeにアクセス※署名付き出ない場合は、403を返す
-オリジンサーバーの保護
→Origin Access Identitiy(OAI)を利用
S3のバケットへのアクセスをCloudFrontからのみに制限 - AWS WAF連携
AWS ShieldによるDDoS攻撃対策
ブロック時は403応答 - AWS ShieldによるDDoS攻撃対策
デフォルトで有効
・CloudFrontレポート・アクセスログ機能
任意のS3バケットに出力可能
・CloudWatchアラームの活用
リアルタイム障害・異常検知
・S3オリジン自動キャッシュの無効化(Invalidation)
S3にアップロード→Lambdaファンクション呼び出し→CloudFront Invalidation APIの呼び出し→CloudFront上でキャッシュの無効化
Lambda
高度にパーソナライズされたウェブサイト
ビューワーリクエストに応じたレスポンス生成
URLの書き換え
エッジでのアクセスコントロール
リモートネットワークの呼び出し