はじめに

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 BalancerGlobal Accelerator の徹底比較と、Global Accelerator で実装する際の手順を紹介します。

解決策:NLB と Global Accelerator

外部DNS環境下でAPEXドメインをALBのような動的エンドポイントに向ける問題を解決するために、静的なIPアドレスを提供するサービスを利用する方法があります。AWSでは主に以下の2つが候補となります。

  1. 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. ルール1(優先): Hostヘッダーがy-ishikawa-test.com(APEX)なら`http://www.y-ishikawa-test.com`へ**301リダイレクト**する。**(主目的)**
  2. デフォルトアクション: 上記ルールに一致しない場合(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レコード設定:
  1. ホスト名が 空欄 または @ となるように指定し、レコードタイプに A を選択します。
  2. 値 (VALUE) として、Global Acceleratorから提供された 静的IPアドレスを2つ 設定します。(DNSサービスによっては、レコードを2つ作成するか、1つのレコードに複数の値を設定します)。
  3. TTLは適切に設定します。
  • www サブドメイン (例: www.y-ishikawa-test.com) のAレコード設定:
  1. ホスト名に www と入力し、レコードタイプに A を選択します。
  2. 値 (VALUE) に、Global Acceleratorから提供された 静的IPアドレスを2つ 設定します。
  3. TTLは適切に設定します。
    ※今回はDR要件を想定し、全てのトラフィックを Global Accelerator を経由する設定としています。サブドメインは、CNAMEレコードでALBを直接指定することも可能です。

6. 最終動作確認 (APEXドメイン経由)

DNSレコードが浸透したら、いよいよAPEXドメインでアクセスして最終的なリダイレクト動作を確認します。

  • DNSの浸透を確認します。ローカルマシンから dignslookup コマンドを実行し、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