3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CDKでNext.jsを本番構成にする【第2回】〜Route53で独自ドメインを設定する〜

3
Last updated at Posted at 2026-03-18

はじめに

ALBのDNS名(xxxx.ap-northeast-1.elb.amazonaws.com)のままでもアプリにはアクセスできますが、この状態では「独自ドメインで公開できない」「HTTPS化できない」といった問題があります。

実運用では、独自ドメインを設定し、ALBに紐付けることが前提になります。

本記事では、Route53を使って独自ドメイン「example.com」と
アプリ用サブドメイン「app.example.com」をALBに紐付ける手順を解説します。

本シリーズの構成

1. VPC編
2. Route53 独自ドメイン編(本記事)
3. ACM HTTPS化編
4. WAFセキュリティ編
5. ECS Auto Scaling編
6. CI/CD編

今回のゴール

今回のゴールは次の通りです。

  • Route53のホストゾーンを利用する
  • ALBへ向けるAレコード(Alias)を作成する
  • 独自ドメインでNext.jsアプリにアクセスできるようにする

すでにドメインを取得済みという前提で進めます。

独自ドメインアクセスの仕組み

ユーザーが独自ドメインへアクセスすると

  • DNS Resolver(DNSサーバー)がRoute53へ問い合わせ
  • Route53がALBのDNS名を返す
  • ユーザーがALBへアクセス

という流れになります。

DNS管理の方針

DNSはインフラの中核であり、アプリケーションより長いライフサイクルを持ちます。
そのため、CDKのスタック削除に伴って意図せず削除されることを防ぐため、アプリケーション用スタックとは分離して管理します。

前提条件

  • ドメインを取得済みであること

もしドメインをRoute53以外(お名前.comなど)で取得している場合は、
ネームサーバーをRoute53へ変更する必要があります。
この手順は後ほど説明します。

2-1. ホストゾーンを作成する(事前準備)

Route53にホストゾーンを作成します。

ホストゾーン作成手順

AWSコンソール → Route53 → ホストゾーン

ホストゾーンの作成を押下します。

②以下を入力し、作成処理を実行します。

  • ドメイン名: example.com
    example.com はサンプルです。実際には、ご自身で取得済みのドメイン名に置き換えてください。
  • タイプ: パブリックホストゾーン

実行すると、自動で2つのレコードが作られます。

example.com NS
example.com SOA

これらはDNSの基本レコードで、ホストゾーンの管理に必要なため自動で作成されます。

2-2. Route53でALBへ向ける仕組み

Route53のAliasレコードを使って、ALBに独自ドメインを設定します。

  • Route53のホストゾーンを利用する
  • AliasレコードでALBのDNS名を参照する

ALBは固定IPではなくDNS名で公開されるため、通常のAレコード(IP指定)は使用できません。
そのため、Route53ではAWSリソースを直接参照できるAliasレコードを使用します。
AliasレコードはRoute53独自の仕組みで、ALBなどのAWSリソースの状態に応じて動的に名前解決されます。

2-3. Route53の設定をCDKに追加する

ホストゾーンを作成したら、次にCDKからそのホストゾーンを参照し、
ALBへ向けるAliasレコードを作成します。

対象ファイル
今回のコードは、ALBを作成しているスタックに追記します。
前回シリーズの構成では、lib/alb-stack.tsが対象ファイルになります。

2-3-1. Route53関連のimportを追加する

まずは lib/alb-stack.ts に Route53 関連の import を追加します。

import * as route53 from 'aws-cdk-lib/aws-route53';
import * as targets from 'aws-cdk-lib/aws-route53-targets';

2-3-2. 既存ホストゾーンを参照する

AlbStackのコンストラクタ内に以下を追加します。

const hostedZone = route53.HostedZone.fromLookup(this, 'HostedZone', {
  domainName: 'example.com',
});

これにより、「example.com」のホストゾーンをCDKから参照できるようになります。

2-3-3. ALBへ向けるAliasレコードを作成する

次に、独自ドメインをALBへ向けるAliasレコードを作成します。
AlbStackのコンストラクタ内に以下を追加します。

new route53.ARecord(this, 'AliasRecord', {
  zone: hostedZone,
  recordName: 'app',
  target: route53.RecordTarget.fromAlias(
    new targets.LoadBalancerTarget(alb)
  ),
});

ポイント
recordName: 'app' とすることで、app.example.com が作成されます。

これにより次のDNSルーティングが作成されます。

app.example.com → ALBのDNS名(xxxx.ap-northeast-1.elb.amazonaws.com)

ユーザーが「app.example.com」へアクセスすると、
Route53がALBのDNS名を返し、ユーザーはその情報をもとにALBへアクセスします。
ALBは固定IPを持たず、

xxxx.ap-northeast-1.elb.amazonaws.com 

のようなDNS名のみで公開されています。
そのため、通常のAレコード(IP指定)では登録できません。
この問題を解決するために、Route53ではAliasレコードを使用します。
AliasレコードはALBなどのAWSリソースを直接指定でき、
内部的に適切なIPへ名前解決してくれるRoute53特有の仕組みです。

2-4. CDKをデプロイする

ここまでの設定をデプロイします。

本記事ではALBへのDNS設定のみを行うため、AlbStackのみをデプロイします。
※関連スタックはデプロイ済の想定です。

cdk deploy NextjsInfraAlbStack --profile <プロファイル名>

デプロイ後、Route53に次のレコードが作成されます。

app.example.com
A (Alias)
→ ALB

本記事で作成したスタックに含まれるAWSリソースは、削除するまで料金が発生します。
検証が不要になった場合は、以下のコマンドでスタックを削除してください。

cdk destroy <スタック名> --profile <プロファイル名>

2-5. ネームサーバーを変更する

この手順はドメインをRoute53以外で取得している場合のみ必要です。

ネームサーバーの変更を行わないと、Route53でレコードを作成しても反映されませんので注意してください。

ドメイン取得場所 対応
Route53 ネームサーバー変更不要
お名前.com / ムームードメイン など ネームサーバー変更が必要

Route53でホストゾーンを作成しただけでは、まだドメインはRoute53を参照していません。
そのため、ドメイン取得サービス側でネームサーバーをRoute53へ変更する必要があります。

2-5-1. Route53のネームサーバーを確認する

1.AWSコンソール → Route53 を開く
2.左メニュー → 「ホストゾーン」をクリック
3.対象ドメイン(example.com)をクリック
4.「レコード」タブを開く
5.NSレコードを確認する

次のようなネームサーバーが表示されます。

ns-xxxx.awsdns-xx.com
ns-xxxx.awsdns-xx.net
ns-xxxx.awsdns-xx.org
ns-xxxx.awsdns-xx.co.uk

2-5-2. ドメイン取得元でネームサーバーを変更する

ドメイン管理画面から、ネームサーバーの設定を変更します。
設定項目の名称や画面構成はサービスによって異なりますが、
「ネームサーバー(NS)」の設定画面を開き、Route53のネームサーバーの値を設定します。

2-6. DNS反映を待つ

ネームサーバー変更後、DNSが反映されるまで少し時間がかかります。
一般的には数分〜数時間程度です。

DNSが正しく反映されているかを、次の手順で確認します。

まず、ドメインのネームサーバーがRoute53へ切り替わっているかを確認します。

nslookup -type=ns example.com

Route53のネームサーバーが表示されれば、
ドメインの参照先がRoute53へ正しく委任されています。

example.com      nameserver = ns-xxxx.awsdns-xx.com
example.com      nameserver = ns-xxxx.awsdns-xx.net
example.com      nameserver = ns-xxxx.awsdns-xx.org
example.com      nameserver = ns-xxxx.awsdns-xx.co.uk

次に、作成したサブドメインがALBに向けて正しく名前解決されているかを確認します。

nslookup app.example.com

以下のように名前解決の結果が返ってくれば、
「app.example.com → ALB」へのDNS設定(Aliasレコード)が正しく機能しています。

Name:   app.example.com
Address: xxx.xxx.xxx.xxx
Address: xxx.xxx.xxx.xxx

※名前解決に失敗する場合やエラーとなる場合は、
ネームサーバーの設定やレコード設定が正しく反映されていない可能性があります。

2-7. 動作確認

ブラウザで次のURLへアクセスします。

http://app.example.com

HTTPS化は次回実施予定です。
この時点ではHTTPでの動作確認を行います。

Next.jsアプリが表示されれば、独自ドメインの設定は完了です。

ここまでの成果

今回の対応により、ALBのDNS名ではなく、独自ドメイン(app.example.com)でアプリを公開できるようになりました。

次回

次回は「ACM証明書を使ってALBをHTTPS化」します。

最終的に次のようなURLになります。

https://app.example.com

HTTPアクセスをHTTPSへリダイレクトする設定も行い、より実運用に近い構成へ修正していきます。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?