「AWS Black Belt Online Seminar Amazon CloudFrontの概要」の自分向けメモ
CloudFront知ってるけど使ったことない......レベルの人向け
AWSのエッジサービス
- エッジサービスとはエッジロケーションから提供されるサービス群のこと
- ユーザーにより近い場所から提供
- リージョンとは別に176か所にある
- オリジンサーバーへのコンテンツ取得を軽減できる
- エッジロケーションも冗長化されている
一般的なWebアクセスの課題
レスポンスの遅延、不安定なレスポンス
- ネットワーク遅延は距離に依存
- 応答時間の多くがネットワーク転送の待ち時間を占める場合もある
大量アクセスへの対応
- 大量のアクセスをさばくために、不要なトラフィックをオリジンに到達させない仕組みが必要
- Webコンテンツには静的なデータが多く含まれる
- 同じデータを何度も取得するのはネットワーク帯域、サーバーリソースの無駄な消費
概要
特徴
- 高性能な分散配信
- 高パフォーマンス
- 自動でスケーラブル
- セキュリティ
- 容易に即時利用可能
- 充実したレポート
- 従量課金
CDN
- エッジからコンテンツをキャッシュしたり代理配信するサービス
- バックエンドはそのまま利用可能
- エッジからオリジンへのアクセスはHTTPSだが、インターネット経由
- gzipで圧縮して配信可能
- キャッシュコントロール機能あり
- TTL指定可能
エッジロケーションの割り当て
- DNSを応用した仕組みを利用
- DNSの問い合わせ先にCloudFront DNSがあり、最適なIPを返却している
リージョナルエッジキャッシュ
- エッジが増えるとオリジンの負荷が上がる課題があった
- リージョナルエッジキャッシュを挟むことで、オリジンの負荷が下がる
- 他CDNサービスより負荷が下がった実績がある
高速配信機能
配信の流れ
- S3等をオリジンサーバーに設定
- ファイルアップロード
- ディストリビューション作成
- ドメイン名割り当て
- ディストリビューションの構成を全てのエッジロケーションに送信
ディストリビューション
- ドメイン毎に割り当てられるCloudFrontの設定
- ディストリビューションあたりの使用量が決まっている
- デフォルトでは「xxxx.cloudfront.net」がディストリビューションのドメイン名として割り当てられる
動的コンテンツキャッシュ
- オリジンサーバーに対してHeader、Cookie、クエリ文字列情報をフォワードできる
- Cookie、クエリ文字列をオリジンへ転送
きめ細やかなキャッシング
- キャッシュ動作(Behaviors)を活用したマルチオリジン(オリジンを分ける)
カスタムエラーページ
- エラー時にS3から静的エラーページのコンテンツを返す
タイムアウトの設定可能
オリジン読み取りタイムアウト
- CloudFrontがカスタムオリジンからの応答を待つ時間を指定
キープアライブタイムアウト
- 接続を閉じる前にCloudFrontがカスタムオリジンとの持続的接続を維持する最大時間を指定
オリジンフェイルオーバー
- オリジングループを作成、プライマリ、セカンダリを設定
- 設定したエラーコードになった場合、バックアップオリジンにルーティング
データ保護機能
SSL証明書
- cloudfront.netドメインのSSL証明書は標準で利用可能
- ACMも可能
- 独自SSL証明書も可能(ACMにアップロード)
エッジとオリジン間の暗号化
- カスタムオリジンはHTTP、HTTPS、クライアントの通信プロトコルに合わせるを指定可能
- S3はHTTPのみ指定可能
オリジンカスタムヘッダー
- エッジからオリジンへの通信時にHTTPヘッダーを追加可能
- オリジン毎に固定で追加、または上書きが可能
地域制限
- 接続されるクライアントの地域情報を基に、エッジでアクセス判定
- ブラックリストもしくはホワイトリストで指定可能
- 制限されたアクセスには403を返却
署名付きURL/Cookie
- 認証サイトで署名付きCookieを取得してからアクセス
- 署名がないアクセスはブロック
データフィールドの暗号化
- 公開鍵で暗号化、オリジンの機能の中で復号化
- 個人情報を暗号化、特定の機能でしか復号できないようにする
オリジンサーバーの保護
S3
- Origin Access Identity(OAI)を利用
- S3バケットへのアクセスをCloudFrontのみ制限
カスタムオリジン
- CloudFrontで指定された任意のヘッダーをオリジンでチェック
- CloudFrontが利用するIPアドレスのみ許可する
AWS WAF連携
- ディストリビューションに適用
AWS ShieldによるDDOS攻撃
- デフォルトで有効
- 無料で利用可能
レポーティング
傾向分析やリアルタイム監視が可能
Cache Statistics
- I/Oの量やステータスコードをモニタリング
Monitorign / Alarms
- メトリクスはバージニア北部リージョンに出力される
- しきい値とアラートの設定可能
Popular Objects
- リクエスト数の多い上位50のコンテンツが一覧で見られる
Top Referrers
- ディストリビューション毎にリクエスト数の多い上位25の李ファラードメインが一覧で見られる
Usage
- ディストリビューション、アクセス元リージョン毎にリクエスト数が見られる
- エッジ、オリジン間のデータ転送容量が見られる
Viewers
- ディストリビューション毎のクライアントデバイス情報
- デバイス種別の比率
- ブラウザ種別の比率
- OS種別の比率
- ロケーション毎の比率
CloudFrontアクセスログ
- S3バケットに出力
- タイムラグあり
レポーティングまとめ
- レポート:AWSマネジメントコンソール
- リアルタイムモニター:CloudWatch
- アクセスログ:S3
Tips
- Route 53と連携し、DNS名前解決の高速化
- 障害異常検知はCloudWatch Alarmを活用する
- 自動キャッシュを無効化するときはS3アップロードをトリガーとしてLambdaを利用
Lambda@Edge
- CloudFront + Lambda = Lambda@Edge
- フルマネージド
- オートスケール
- 従量課金
- 対障害性
- グローバル分散
キャッシュヒット率の向上
- クエリ文字列、ユーザーエージェントの正規化
- ヘッダー、Cookie、クエリ文字列に基づき、複数のオリジンへ動的ルーティング
コンテンツ生成
- 画像リサイズ、HTMLページ生成
セキュリティ
- 認証
- セキュリティヘッダ付与
作成の流れ
- バージニア北部リージョンで作成
- ディストリビューショントリガーと関連付け
- 各リージョンにレプリケート
- ログは各エッジに紐づくリージョンに出力される
まとめ
- レスポンスの改善とオリジン負荷軽減
- WAFと組み合わせ、高いセキュリティを実現
- ログレポート機能でアクセス傾向分析
- Lambda@Edgeと組み合わせて、UX向上
- 大容量配信や大量アクセスがあるサイトに有効
- 小規模でもセキュリティが求められるサイトに有効