

東京リージョンのALBへの海外アクセス、CloudFrontとGlobal Acceleratorのどっちが正解か
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
東京リージョンのALBから配信してるサービスに、海外の特定の国からアクセスすると遅いという相談が来た。ユーザー体験に関わるレベルだったので、AWSのサービスで解決できないか検討した記録。
何が起きてたか
日本(東京リージョン)のALBに、海外からインターネット経由でアクセスすると遅延が大きい。原因はインターネット経路の距離と混雑らしい(実機でのtracerouteまでは追ってないので、あくまで一般的な要因としての推測)。
CloudFrontを検討して見送った
最初にCloudFrontを検討した。ただ、当時は以下の理由で見送った。
- 配信してるのはキャッシュしづらい動的なコンテンツが多く、キャッシュポリシーやオリジンリクエストポリシーの設計をちゃんと詰める時間がなかった
- 構成変更の余地がタイトだった
あと、DNSをCloudFrontのドメインに向け直す必要があるのは事実だけど、これはGlobal Acceleratorを使う場合も同様(後述のエイリアスレコード設定が必要)なので、CloudFront固有のデメリットとして挙げるのは筋が悪かった。
Global Acceleratorを選んだ理由
最終的に選んだのはGlobal Accelerator。理由は主に3つ。
- キャッシュの設計を考えずに使える(そもそもキャッシュしない、ネットワーク層の高速化)
- 既存のALB構成にほぼ手を入れずに導入できる
- AWSのグローバルネットワークを経由することで、公衆インターネットの混雑を回避できる
flowchart LR
User[海外ユーザー] -->|Anycast IP| GA[Global Accelerator]
GA -->|AWSバックボーン| ALB[東京リージョン ALB]
ALB --> App[アプリケーション]
やったこと
-
アクセラレーターの作成 Global Acceleratorのコンソールから新規作成。作成すると自動でIPv4の静的Anycast IPが2つ割り当てられる。
-
エンドポイントグループの設定 東京リージョンのALBをエンドポイントとして追加。ヘルスチェックを有効化して、ALBの死活監視をGlobal Accelerator側でも行うようにした。
-
DNS設定の変更 既存のDNSレコードを、Global Acceleratorが提供するエイリアスターゲットに向けた。IPを直接書くんじゃなくてエイリアス経由にしたので、内部でIPが変わっても追従できる。
結果
導入後、海外からの接続遅延は体感でも数値でも改善した。オリジン(ALB)側の構成はほぼ変えてないので、リリース作業自体は軽かった。運用開始後も特に追加の管理コストは発生してない。
わかったこと
- DNSの向け先変更は、CloudFrontでもGlobal Acceleratorでも避けられない。これを片方だけのデメリットとして扱うのは誤り