はじめに
AWSでウェブサイトを公開する際、Application Load Balancer (ALB) を利用してHTTPSへの強制リダイレクトや、www
あり/なしのドメイン統一を行うのは一般的な構成です。ALBのリスナールールを使えば、これらの設定は比較的簡単に行えます。
しかし、AWSのRoute 53以外の外部DNSサービスを利用している場合、APEXドメイン(ネイキッドドメイン、例: example.com
) の扱いで問題が発生することがあります。DNSの仕様上、APEXドメインにはCNAMEレコードを設定できません。Route 53の場合、エイリアスレコードを使ってAPEXドメインをALBに向けることができます。外部DNSではこのエイリアスレコードが利用できないケースがほとんどです。APEXドメイン → ALBのDNS名
のルーティングが外部DNSだと設定できないのです。
その結果、「www.example.com
はALBに向けられるが、example.com
はALBに向けられない」という状況が発生し、APEXドメインでのアクセスやリダイレクト処理に困ることがあります。
この記事では、上記の課題を解決策として使用される代表的なAWSサービスである Network Load Balancer と Global Accelerator の徹底比較と、Global Accelerator で実装する際の手順を紹介します。
解決策:NLB と Global Accelerator
外部DNS環境下でAPEXドメインをALBのような動的エンドポイントに向ける問題を解決するために、静的なIPアドレスを提供するサービスを利用する方法があります。AWSでは主に以下の2つが候補となります。
- Network Load Balancer (以降、NLB):
* TCP/UDPレベル(レイヤー4)で動作するロードバランサー。
* 静的なIPアドレス(Elastic IPまたはAWSが自動割り当て)を持つことができます。
* APEXドメインのAレコードにNLBの静的IPアドレスを設定し、NLBからALBやEC2インスタンスにトラフィックを転送します。
2. AWS Global Accelerator (以降、GA):
* アプリケーションのパフォーマンスと可用性を向上させるネットワークサービス。
* AWSグローバルネットワークのエッジロケーションを利用し、2つの静的なエニーキャストIPアドレスを提供します。
* APEXドメインのAレコードにGAの静的IPアドレスを設定し、GAが最適な経路でALBなどのエンドポイントにトラフィックを転送します。
NLB vs Global Accelerator 徹底比較
どちらのサービスを利用すべきか判断するために、いくつかの観点から比較してみましょう。
項目 (要件/目的) | 概要 | 適したサービス |
---|---|---|
外部DNSでのAPEXドメイン対応 | 静的IPアドレスをAレコードに設定し、外部DNSの制約を回避したい。 | GA / NLB(どちらも静的IPアドレスを提供するため対応可能です) |
DR/複数リージョン高可用性 | リージョン障害時にもサービスを継続させたい。複数リージョンへの自動フェイルオーバーが必要。 | GA(複数リージョンへの自動フェイルオーバー機能が組み込まれており、容易にDR構成を実現できます。NLBはRoute 53等との組み合わせが別途必要です) |
DR構成の柔軟性/独自構築 | DRのフェイルオーバー条件やルーティングロジックを、Route 53など他のサービスと組み合わせて細かく制御・カスタマイズしたい。 | NLB + 他サービス(GAは統合された機能を提供する分、より細かいカスタム制御を行いたい場合は他のサービスとの組み合わせの方が柔軟な場合があります) |
グローバルパフォーマンス向上 | 地理的に分散した世界中のユーザーに対し、低遅延・高スループットを提供したい。AWSエッジと最適化経路を利用したい。 | GA(AWSのグローバルネットワークとエッジロケーションを活用し、パフォーマンス向上に最適化されています) |
運用管理のシンプル化 | セキュリティグループ、監視、ログ、WAF適用、トラブルシューティングなどをシンプルかつ一貫性をもって行いたい。 | GA(経路統一により、各種設定や運用タスクが一元化され、シンプルになる傾向があります) |
コスト削減/最適化 | サービス利用料金をできるだけ抑えたい。 | NLB(一般的にGAよりも時間単価やデータ処理単価が安価です) |
リージョン内高パフォーマンス | 主に単一AWSリージョン内のユーザーに対して、高性能な負荷分散を行いたい。 | NLB / GA(どちらもリージョン内で高性能ですが、この用途に特化する場合はNLBの方がコスト効率が良い可能性があります) |
Global Accelerator 検証手順
ここからは、Global Accelerator でAPEXドメインからのアクセスをALBにルーティングし、APEXドメインから www
ありドメインへのリダイレクトを実装する際の手順を検証します。
※注意: 今回の検証では、わかりやすくするためにHTTPのみを使用します。実際の公開ウェブサイトではセキュリティ確保のため、必ずHTTPS化(SSL/TLS証明書の設定とHTTPS通信の強制)を行ってください。
以下今回の検証の構成図です。
1. 検証環境の準備
Global Accelerator以外の検証リソースを準備します。
- VPC/サブネット: 複数AZにまたがるパブリックサブネットを持つ検証用VPC
- セキュリティグループ: EC2用(ALBから80許可)とALB用(インターネットから80許可)のSG
- ターゲットグループ: EC2インスタンスを登録したHTTP/80ターゲットグループ
- EC2インスタンス: Amazon Linux 2023、ApacheWebサーバー、テストHTML配置
# EC2セットアップコマンド例 (Amazon Linux 2023) sudo dnf update -y sudo dnf install -y httpd sudo systemctl start httpd sudo systemctl enable httpd echo " <h1>Hello from EC2! Reached via www domain (HTTP). Host: $(hostname -f)</h1> " | sudo tee /var/www/html/index.html
- Application Load Balancer (ALB): インターネット向けALB。
- リスナー設定:
- HTTP(80)リスナーのみ設定:
- ルール1(優先): Hostヘッダーが
y-ishikawa-test.com
(APEX)なら`http://www.y-ishikawa-test.com`へ**301リダイレクト**する。**(主目的)** - デフォルトアクション: 上記ルールに一致しない場合(
www
ドメインでのアクセスなど)は、作成したターゲットグループへ転送する。
これにより、ALBに到達したAPEXドメイン(y-ishikawa-test.com)はwww
付きのドメインへリダイレクトされます。しかし、外部DNSを使っていると、APEXドメインはCNAMEレコードを設定できないため、APEXドメイン → ALB のDNS名
のルーティングができません。
2. ALB単体での動作確認
Global Acceleratorを設定する前に、ALBが単体で APEXドメインからwwwドメインへのリダイレクト を正しく行うかを確認します。
- ALBのDNS名(例:
my-alb-xxxx.ap-northeast-1.elb.amazonaws.com
)を確認します。
curl
コマンドで動作を確認します。
# 1. HTTP(APEX相当) -> HTTP(www) リダイレクト確認 (最重要) curl -I http://<ALBのDNS名> -H "Host: y-ishikawa-test.com" -I # -> Location: http://www.y-ishikawa-test.com/... が返ることを期待
実行結果↓
y-ishikawa1:~ y-ishikawa$ curl http://y-ishikawa-terraform-alb-1256783456.ap-northeast-1.elb.amazonaws.com -H "Host: y-ishikawa-test.com" -I HTTP/1.1 301 Moved Permanently Server: awselb/2.0 Date: Mon, 21 Apr 2025 12:10:56 GMT Content-Type: text/html Content-Length: 134 Connection: keep-alive Location: http://www.y-ishikawa-test.com:80/ # ← ここで www つきドメインにリダイレクトされていることが確認できる
# 2. HTTP(www) -> EC2コンテンツ表示確認 curl http://<ALBのDNS名> -H "Host: www.y-ishikawa-test.com" # -> EC2のテストページHTMLが返ることを期待
実行結果↓
y-ishikawa1:~ y-ishikawa$ curl http://y-ishikawa-terraform-alb-1256783456.ap-northeast-1.elb.amazonaws.com -H "Host: www.y-ishikawa-test.com" <h1>Hello from EC2! Reached via www domain (HTTP). Host: ip-10-0-1-107.ap-northeast-1.compute.internal</h1> y-ishikawa1:~ y-ishikawa$
これらの結果から、ALBが単体でHTTP(APEX)からHTTP(www)へリダイレクトし、HTTP(www)でアクセスされた場合にEC2へトラフィックを転送することが確認できました。
3. Global Acceleratorのセットアップ
いよいよGlobal Acceleratorを作成し、エンドポイントとしてALBを設定します。
- AWSマネジメントコンソールで Global Accelerator を作成します。
- 基本設定: アクセラレータ名を入力します。
- リスナーの追加: ポート
80
をTCPプロトコルで追加します。クライアントアフィニティは通常なし
でOKです。(HTTPSは今回使用しないためポート443は不要)
- エンドポイントグループの追加: ALBが存在するAWSリージョンを選択します。
- エンドポイントの追加: エンドポイントタイプとして「Application Load Balancer」を選択し、先ほど作成したALBを指定します。ウェイトは
128
のままにします。
- 作成後、Global Acceleratorのステータスが「デプロイ済み」になるまで待ちます。デプロイが完了すると、2つの静的IPアドレス と DNS名 が割り当てられます。これらを控えておきます。
4. Global Accelerator経由での動作確認
外部DNSを設定する前に、Global AcceleratorのDNS名を使ってアクセスし、ALBまでトラフィックが到達し、リダイレクトが機能するか 確認します。
- 控えておいたGlobal AcceleratorのDNS名(例:
xxxx.awsglobalaccelerator.com
)にcurl
でアクセスします。
# 1. HTTP(Host:APEX) -> HTTP(www) リダイレクト確認 (GA経由) curl -I http://<GAのDNS名> -H "Host: y-ishikawa-test.com" # -> Location: http://www.y-ishikawa-test.com/... が返ることを期待
実行結果↓
y-ishikawa1:~ y-ishikawa$ curl -I http://a0291a681be93bc59.awsglobalaccelerator.com -H "Host: y-ishikawa-test.com" HTTP/1.1 301 Moved Permanently Server: awselb/2.0 Date: Mon, 21 Apr 2025 12:52:21 GMT Content-Type: text/html Content-Length: 134 Connection: keep-alive Location: http://www.y-ishikawa-test.com:80/ # ← www 付きのドメインにリダイレクトされていますね
# 2. HTTP(Host:www) -> EC2コンテンツ表示確認 (GA経由) curl http://<GAのDNS名> -H "Host: www.y-ishikawa-test.com" # -> EC2のテストページHTMLが返ることを期待
実行結果↓
y-ishikawa1:~ y-ishikawa$ curl http://a0291a681be93bc59.awsglobalaccelerator.com -H "Host: www.y-ishikawa-test.com" <h1>Hello from EC2! Reached via www domain (HTTP). Host: ip-10-0-1-107.ap-northeast-1.compute.internal</h1> y-ishikawa1:~ y-ishikawa$
これにより、Global Accelerator経由のアクセスでも、ALBで設定したリダイレクトルール(HTTP(APEX)→HTTP(www))が機能し、最終的にwwwドメインでEC2へ到達することが確認できました。あとは、DNSで APEX ドメインと Global Accelerator を紐づけるだけです。
5. 外部DNSでの設定
ご利用の外部DNSサービスの管理画面で、APEXドメインと www
サブドメインのレコードを設定します。
- APEXドメイン (例:
y-ishikawa-test.com
) のAレコード設定:
- ホスト名が 空欄 または
@
となるように指定し、レコードタイプに A を選択します。 - 値 (VALUE) として、Global Acceleratorから提供された 静的IPアドレスを2つ 設定します。(DNSサービスによっては、レコードを2つ作成するか、1つのレコードに複数の値を設定します)。
- TTLは適切に設定します。
www
サブドメイン (例:www.y-ishikawa-test.com
) のAレコード設定:
- ホスト名に www と入力し、レコードタイプに A を選択します。
- 値 (VALUE) に、Global Acceleratorから提供された 静的IPアドレスを2つ 設定します。
- TTLは適切に設定します。
※今回はDR要件を想定し、全てのトラフィックを Global Accelerator を経由する設定としています。サブドメインは、CNAMEレコードでALBを直接指定することも可能です。
6. 最終動作確認 (APEXドメイン経由)
DNSレコードが浸透したら、いよいよAPEXドメインでアクセスして最終的なリダイレクト動作を確認します。
- DNSの浸透を確認します。ローカルマシンから
dig
やnslookup
コマンドを実行し、APEXドメインのAレコードとしてGlobal Acceleratorの静的IPアドレスが返ってくること、およびwww
ドメインが正しく解決されることを確認します。
dig y-ishikawa-test.com A +short dig www.y-ishikawa-test.com A +short
実行結果↓
y-ishikawa1:~ y-ishikawa$ dig y-ishikawa-test.com A +short 13.248.192.166 99.83.190.72 y-ishikawa1:~ y-ishikawa$ dig www.y-ishikawa-test.com A +short 13.248.192.166 99.83.190.72 y-ishikawa1:~ y-ishikawa$
- 最終的に `http://www.y-ishikawa-test.com` にリダイレクトされ、EC2インスタンスのテストページが正しく表示されること を確認します。
# 1. HTTP(APEX) -> HTTP(www) リダイレクト確認 (最終確認) curl -I http://y-ishikawa-test.com # -> Location: http://www.y-ishikawa-test.com/... が返ることを期待
実行結果↓
y-ishikawa1:~ y-ishikawa$ curl -I http://y-ishikawa-test.com HTTP/1.1 301 Moved Permanently Server: awselb/2.0 Date: Wed, 23 Apr 2025 13:09:47 GMT Content-Type: text/html Content-Length: 134 Connection: keep-alive Location: http://www.y-ishikawa-test.com:80/ y-ishikawa1:~ y-ishikawa$
# 2. HTTP(www) -> EC2コンテンツ表示確認 (最終確認) curl http://www.y-ishikawa-test.com # -> EC2のテストページHTMLが返ることを期待
実行結果↓
y-ishikawa1:~ y-ishikawa$ curl http://www.y-ishikawa-test.com <h1>Hello from EC2! Reached via www domain (HTTP). Host: ip-10-0-1-107.ap-northeast-1.compute.internal</h1> y-ishikawa1:~ y-ishikawa$
以上の確認により、外部DNSに設定したAPEXドメインのAレコードを経由してGlobal Acceleratorにアクセスした場合でも、意図通り `http://www.y-ishikawa-test.com` へリダイレクトされ、コンテンツが表示されることが確認できました。
まとめ
今回は、Route 53以外の外部DNSを利用している場合に発生するAPEXドメインとALBの連携問題を解決し、APEXドメインから www
ありドメインへのリダイレクトをALBで一元管理する 方法として、NLBとGlobal Acceleratorを比較し、Global Acceleratorを用いた具体的な検証手順を紹介しました。
外部DNS + APEX ドメインのリダイレクト + DR要件がある時、Global Accelerator は強力な解決策となります。
機会があれば活用して見てください。少しでもお役に立てたら幸いです。
参考にしたAWS公式ドキュメント
AWS Global Accelerator とは?
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/load-balancer-target-groups.html
AWS Global Accelerator の静的 IP アドレス
https://docs.aws.amazon.com/ja_jp/global-accelerator/latest/dg/what-is-global-accelerator.html
Application Load Balancer とは?
https://docs.aws.amazon.com/ja_jp/global-accelerator/latest/dg/about-accelerators.eip-accelerator.html
Application Load Balancer のリスナールール
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/introduction.html
Network Load Balancer とは?
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/introduction.html
Network Load Balancer の静的 IP アドレス
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/network-load-balancers.html
エイリアスレコードと非エイリアスレコードの選択 (CNAMEの制約について)
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html
サポートされているレコードタイプ – Route 53 (Aレコード、CNAMEレコードについて)
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/ResourceRecordTypes.html