コンテンツ配信 - SunHigh105/AWS_SAA GitHub Wiki

Route53

  • DNS: URLをIPアドレスに変換するための仕組み
  • Route53はAWSが提供する権威DNSサーバ ポート53で動作
  • 主要機能
    • ドメイン登録
    • DNSルーティング
    • ヘルスチェック

ホストゾーン

  • パブリックホストゾーン
    • インターネット上に公開されたDNSドメインレコードを管理
  • プライベートホストゾーン
    • VPC内プライベートネットワーク内のDNSドメインのレコードを管理
    • 1つのプライベートホストゾーンで複数VPCに対応

フェイルオーバーの設定

複数のHTTPサーバあるいはメールサーバなど同一機能のリソースが重複して存在する場合、それらのリソースの正常性をチェックして、正常なリソースのみ使用してDNSクエリに応答するよう設定できる。

  • アクティブ/アクティブ
    • 全てのリソースをほとんどの時間で利用できるようにする
    • 利用不可になったリソースは、Route53が異常であることを検出し、クエリ応答時にそのリソースを含めない
  • アクティブ/パッシブ
    • プライマリリソースを常に利用可能とする
    • プライマリが使用できなくなった場合に備えセカンダリリソースまたはリソースグループをスタンバイ状態にする
    • 全てのプライマリが異常となった場合は、クエリ応答時に正常なセカンダリリソースを含める

レコードタイプ

  • SOA: ドメインのDNSサーバ/ドメイン管理者のメールアドレス/シリアル番号などを保持して、ゾーン転送時に情報が更新されているかの判断に利用
  • A: ドメイン名→IPアドレス(IPv4)
  • AAAA: ドメイン名→IPアドレス(IPv6)
  • CNAME: ドメイン名→別のドメイン名
  • MX: 対象ドメイン名のメール配送先ホスト名を定義
  • NS: ドメインのゾーン情報を管理するDNSサーバを定義
  • TXT: ホスト名に関連づけるテキスト情報
  • DNAME: 別のドメイン名に対してDNS名の部分木全体をマッピング
  • ALIAS
    • DNSクエリにAWSサービスのエンドポイントのIPアドレスを返答
      • 静的ウェブサイトとして設定されたS3バケット
      • CloudFront
      • ELB
      • ホストゾーン内のリソースレコードセット
    • メリット
      • DNSクエリに対するレスポンスが高速
      • CloudFrontでのクエリ回数削減
      • ALIASレコードに対するクエリが無料 etc...

ルーティング

  • シンプル: トラフィックを複数インスタンスなどに分散してルーティング ランダムに制御
  • レイテンシ: 基本はユーザの最寄りのリージョンに返答 より低遅延となるリージョンにリダイレクト
  • 位置情報: ユーザの位置情報(DNSクエリの発信元の場所)に基づく
  • 地理的近接性: ユーザとリソースの場所に基づいて地理的近接性ルールを作成しトラフィックをルーティング
  • フェイルオーバー: ヘルスチェックの結果に基づいて、利用可能なリソースをDNSクエリに応答
  • マルチバリュー(複数値回答)
    • ランダムに選ばれた最大8つの別々のレコードを使用してIPアドレスを設定し、複数の値を返答
    • DNSクエリに対する応答として複数の値(Webサーバの値など)を返すように設定可能
  • 加重: 複数のリソースを単一ドメインまたはサブドメイン名に関連付けて、各リソースにルーティングされるトラフィック量を選択できる
    • Blue/Greenデプロイメントに必要なテストに利用できる

トラフィックフロー

Route 53を利用したDR(ディザスタリカバリ)方式

  • コールドスタンバイ
    • バックアップ格納先: S3
    • 事前にシステムイメージをクラウド上に準備し、災害発生時に起動してRoute53で切り替え
  • ウォームスタンバイ
    • クラウドのスタンバイ環境にデータを常時レプリケート

CloudFront

  • CDN(Contents Delivery Network)サービス
    • WEBコンテンツ配信を高速化するためのサービス
  • グローバルにコンテンツ配信
  • 低遅延のエッジロケーションからコンテンツ提供→配信を高速化
  • クエリ文字列パラメータ「?language=ja」に基づくキャッシュ設定で、HTTPフィールド内の言語表示に基づいて配信方法を切り替えられる
  • 料金
    • エッジロケーションの場所、リクエスト数、データ転送量で算出

署名付きURLと署名付きCookie

署名付きURL

  • 以下の場合は利用
    • アプリのインスールやダウンロードなど、個々のファイルへのアクセスを制限
    • ユーザがCookieをサポートしないクライアントを使用している

署名付きCookie

  • 以下の場合は利用
    • HLS形式動画の全てのファイル、Websaitono購読者領域の全てのファイルなど、制限のある複数のファイルへのアクセスを制限
    • 現在のオブジェクトURLを変更したくない

ディストリビューション (分布)

  • CloudFrontでコンテンツ配信するときに作成
  • 構成設定
    • コンテンツオリジン: S3バケット, MediaPackageチャネル, HTTPサーバ
    • アクセス: ファイルアクセスの許可設定
    • セキュリティ: コンテンツのアクセスにHTTPSを必須にするかどうか
    • キャッシュキー
    • オリジンリクエスト設定: オリジンに送信するリクエストにHTTPヘッダー、Cookie、またはクエリ文字列を含めるかどうか
    • 地域制限
    • アクセスログ
  • フェールオーバーオプションが提供される(オブジェクト単位のフェールオーバー
  • 地理的ディストリビューションの制限 (特定地域のユーザによるアクセス回避)が可能

キャッシュコントロール機能

キャッシュヒット率を上昇させて効果的なキャッシュ活用を可能にする

  • パラメータ値の完全一致: URLとフォワードオプション機能のパラメータ値の完全一致でキャッシュが指定される
  • キャッシュ無効化: 期限切れになる前に必要のないキャッシュを無効化

クエリ文字列パラメータ

  • クエリ文字列 hoge=huga を用いてオリジンに情報を送信
  • ディストリビューションでクエリ文字列に基づいてコンテンツのキャッシュを制御

オリジンフェイルオーバー

  • 高可用性が必要なシナリオで適用
  • プライマリとセカンダリの2つのオリジングループを作成、プライマリオリジンが使用でない場合、自動的にセカンダリオリジンに切り替え
    • 少なくとも2つのオリジンを持つディストリビューションが必要

ログ記録

  • 標準ログ(アクセスログ)
    • ディストリビューションに対して行われた全てのリクエストに対する詳細なレコードを提供
    • S3バケットに配信
  • リアルタイムログ
    • ディストリビューションに対して行われたリクエストをリアルタイムで提供
    • Kinesis Data Streamsで選択したデータストリームに配信
  • CloudTrailでAWSアカウントのCloudFrontサービスアクティビティをログに記録できる
    • CloudFrontのユーザー/ロール、AWSサービスによって実行されたアクションを記録

セキュリティ機能

  • コンテンツ配信時のHTTPS対応
  • SSL証明書
  • ビューワーアクセスのSSLセキュリティポリシー対応
  • オリジン配信時の暗号化通信
  • オリジンカスタムヘッダーによる通信制御
  • AWS WAFによるファイアウォール連携
  • AWS ShieldによるDDoS対応
  • 署名付きURL/Cookieによる有効時間指定
  • GEOリストリクションによる地域情報でアクセス判定

OAI (Origin Access Identity)

  • OAIのCloudFrontユーザを作成しディストリビューションに関連づけ→OAIでアクセスできるようにS3バケットのアクセス許可設定
    • →ユーザはS3から直接ではなく、CloudFront経由でのみファイルにアクセスできる

オリジンサーバ

  • ファイル取得時に各エッジロケーションでファイルを圧縮
    • S3オリジン(バケット / 静的ホスティング)
    • カスタムオリジン: 一般的なWebサーバ パブリック/プライベート両方利用可