AWS SAA(Solutions Architect - Associate)対策

マルチリージョンとCloudFront

このレッスンでできるようになること。世界中の利用者へ配る要件と災害対策の要件を切り分け、CloudFront、Global Accelerator、マルチリージョン構成のどれを当てるかを選べるようになります。

要件の文から入る

ある会社が、S3 に置いた画像と動画を世界中の利用者へ配信しています。要件は次の2つです。「海外からの表示が遅いので改善したい」「S3 バケットを公開せず、CloudFront を経由したアクセスだけを許可したい」。何を設定しますか。

前半は素直に CloudFront です。静的なコンテンツを世界のエッジロケーションにキャッシュして、利用者に近い場所から返します。問題は後半で、ここが定番の出題です。答えは OAC (オリジンアクセスコントロール) です。CloudFront ディストリビューションに OAC を設定し、S3 のバケットポリシーで「この OAC を持つ CloudFront からのアクセスだけを許可する」と書き、パブリックアクセスブロックは有効のままにします。これで S3 の URL を直接叩いても届かず、CloudFront 経由だけが通ります。

古い教材では OAI (オリジンアクセスアイデンティティ) が同じ役割で説明されますが、現在の推奨は OAC です。

CloudFront と Global Accelerator の線引き

ここが第8章で最も間違えやすい対比です。どちらも「AWS のグローバルネットワークを使って利用者体験を速くする」ため、要件文をよく読まないと選べません。

観点CloudFrontGlobal Accelerator
何をするかコンテンツをエッジにキャッシュして、そこから返す利用者から最寄りのエッジで AWS 網に入れ、最適な経路で正常なエンドポイントへ運ぶ
対象のプロトコルHTTP と HTTPSTCP と UDP。HTTP 以外も含む
キャッシュするしない
利用者に見える宛先ディストリビューションのドメイン名固定の静的 IP アドレス
切り替えの速さオリジン側のフェイルオーバー設定に従うヘルスチェックに基づき、DNS のキャッシュに影響されずに経路を切り替えられる
向いている要件画像・動画・静的サイト・API のキャッシュ配信ゲームや音声のような非 HTTP、固定 IP が要る、即時のリージョン切り替え

一文でまとめます。キャッシュできる HTTP のコンテンツを速く配るのが CloudFront、キャッシュできない TCP や UDP の経路を最適化して素早く寄せ替えるのが Global Accelerator です。「UDP」「固定 IP をファイアウォールに登録したい」「DNS のキャッシュに左右されず切り替えたい」なら Global Accelerator、「静的コンテンツ」「オリジンの負荷を下げたい」なら CloudFront です。

マルチリージョンの配り方

災害対策としてリージョンを2つ使う場合、前段に何を置くかで挙動が変わります。

前段挙動向いている要件
Route 53 のフェイルオーバーDNS の応答を切り替えるDNS の切り替え時間を許容できる一般的な Web
CloudFront のオリジンフェイルオーバーオリジングループを作り、1つ目が失敗したら2つ目のオリジンへ配信面は同じまま、背後のオリジンだけ切り替えたい
Global Acceleratorエンドポイントグループの重みと正常性で経路を切り替える切り替えの即時性が要る、非 HTTP を含む

データ層も忘れずに揃えます。S3 はクロスリージョンレプリケーション、DynamoDB はグローバルテーブル、Aurora はグローバルデータベースが対応します。前段の振り分けだけ作ってデータを複製し忘れた構成は、選択肢としてよく紛れ込みます。

要件語から構成への対応表

要件文の言い回し選ぶもの
世界中で画像や動画の表示を速くしたいCloudFront
S3 を公開せず CloudFront 経由だけ許可OAC とバケットポリシー。パブリックアクセスブロックは有効のまま
UDP を使うアプリの遅延を減らしたいGlobal Accelerator
ファイアウォールに登録できる固定 IP が要るGlobal Accelerator
DNS のキャッシュに左右されずリージョンを切り替えたいGlobal Accelerator
オリジンが落ちたら別リージョンのオリジンへCloudFront のオリジンフェイルオーバー
オリジンへの同時アクセスを減らしたいCloudFront のキャッシュ
特定の国からのアクセスを遮断したいCloudFront の地理的制限

よくある引っ掛け

1つめは、S3 の保護をバケットポリシーの IP 制限で答えてしまうものです。エッジの送信元アドレスの範囲は変わり得るため、管理し続ける前提の構成になります。OAC が正解のところで選ぶと落とします。

2つめは、非 HTTP の要件に CloudFront を当ててしまうものです。UDP を使うゲームや音声の遅延改善は CloudFront の担当ではありません。プロトコルが書かれていたら必ず読み取ります。

3つめは、CloudFront を災害対策そのものと読んでしまうものです。CloudFront はキャッシュと配信の層なので、オリジンが1つしかなければオリジン障害には耐えられません。オリジングループか背後のマルチリージョン構成まで含めて答えます。

まとめ

  • CloudFront は HTTP のキャッシュ配信、Global Accelerator は TCP と UDP の経路最適化です
  • S3 を隠して CloudFront 経由だけ通すのは OAC とバケットポリシーの組み合わせです
  • 固定 IP、非 HTTP、DNS に依存しない即時切り替えは Global Accelerator の要件語です
  • マルチリージョンは前段の振り分けとデータの複製を必ず一組で設計します
  • CloudFront だけでは災害対策になりません。オリジン側の冗長化まで見ます
生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部

復習ミニクイズ

あるゲーム会社が、UDP を使うマルチプレイヤーのゲームサーバーを複数リージョンの EC2 で運用しています。要件は「世界中のプレイヤーの遅延を下げたい」「企業ネットワークのファイアウォールに登録できる固定の IP アドレスで公開したい」「あるリージョンが異常になったら、DNS のキャッシュに左右されず速やかに別リージョンへ寄せたい」です。最も適切な構成はどれですか。