はじめに
今回は、Amazon Route53, ACM(AWS Certificate Manager), CloudFrontの構成で、外部ドメインサービスで取得したドメインを使ってアプリを公開する手順(AWSコンソール上での手動設定)をまとめてみました。
少しでも参考になれば幸いです。
実装順に関連記事を公開していますので、過去の記事もぜひ合わせてご参照ください。
前提
・外部ドメインサービスで取得したドメインがあることとします(私はお名前ドットコムで初回1年無料のドメインを購入しました)
・CloudFrontで公開済みのアプリがあることとします。
CloudFrontでアプリを公開するまでの手順はこちらをご参照ください。
今回のインフラ構成図
操作の流れ
- Route 53でHosted Zoneを作成
- 外部レジストラ側でネームサーバーをRoute 53に切り替える
- ACMでSSL/TLS証明書を発行する(必ず us-east-1)
- ACMのDNS検証を行う
- CloudFront に独自ドメインと証明書を関連付ける
- Route 53でCloudFrontへのエイリアスレコードを作成する
- 動作確認
1. Route 53でHosted Zoneを作成
AWSコンソール >> Route 53 >> ホストゾーン画面を開き、「ホストゾーンの作成」を押します。
① 「ドメイン名」に取得済みの独自ドメインを入力します。
② 「タイプ」は「パブリックホストゾーン」を選択します。
③ (必要であれば)タグを設定します。
④ 「ホストゾーンの作成」を押します。
以下のように、NSレコードとSOAレコードが自動で作成されます。
SOAレコードとは
SOA(Start of Authority)レコードは、「このDNSゾーン自体の管理情報」を表すDNSレコードです。
「DNS管理責任者は誰か」「このゾーンの正式なネームサーバーはどこか」「DNSキャッシュは何秒保持するか」などといったメタデータを保持する役割を持ちます。
NSレコードとセットで存在し、「このDNSゾーンを誰が管理しているか」を示します。
通常のWeb公開利用では、SOAレコードを触ることはほとんどありません。
NSレコードとは
NS(Name Server)レコードは、「このドメインを管理しているDNSサーバー」を示すDNSレコードです。
Route 53 Hosted Zoneを作成すると、自動で4つのNSレコードが発行されます(可用性・耐障害性・分散のため)
外部ドメインサービスをRoute 53で管理したい場合、外部レジストラ側へこのNSを設定します。
.com., .org., .net., .co.uk.などが末尾についていますが、私たちが取得した独自ドメインの末尾とは無関係です。
DNS問い合わせはランダムに実行され、上記4つのうちどれか応答可能なサーバーを使います。
外部レジストラ側へこのNSを設定した後の問い合わせの流れ
(ユーザーが)https://your-domain.net へブラウザでアクセス
↓
(ブラウザが)DNSリゾルバ(DNSを代わりに調べてくれるサーバー)へIPアドレスを問い合わせる
↓
(DNSリゾルバが)わからないのでルートDNSへ問い合わせる
↓
今回の場合、末尾が.netドメインなので、.netのDNSに聞いてくださいと言われる
↓
(DNSリゾルバが).netのTLD(トップレベルドメイン)DNSへ問い合わせる
↓
(.netのTLD DNSが)「取得した独自ドメインサービス」で登録されているネームサーバー情報(Route 53のNS)を答える
↓
(DNSリゾルバが)4つあるRoute 53のNSのどれかに問い合わせる
↓
(Route 53 NSが)https://your-domain.netの接続先(CloudFrontのドメインなど)を返す
↓
(DNSリゾルバが)結果をブラウザへ返す
2. 外部レジストラ側でネームサーバーをRoute 53に切り替える
(お名前ドットコムの画面です)
切り替える前のネームサーバーは以下のようになっています。
ターミナルで以下のコマンドを実行することで、DNS情報を取得することができます。
dig NS example.com +short
独自ドメインサービスの手順にしたがって、Route 53のネームサーバーを設定します。
.com.などの末尾の.は省略される場合があるため、必要かどうかは調べてみてください。
(お名前ドットコムの画面です)
3. ACMでSSL/TLS証明書を発行する(必ず us-east-1)
CloudFrontに紐づけるACM証明書(SSL/TLS証明書)を発行します。
独自ドメイン(example.com)をHTTPS化する場合は、そのドメイン専用の証明書が必要になります(CloudFrontはその証明書をACMから取得してブラウザへ提示し安全性を証明します)
※CloudFrontのデフォルトドメイン(~.cloudfront.net)はAWS共有証明書が使われるため、ACM不要です
また、CloudFrontはグローバルサービスのため、us-east-1リージョンで発行する必要があります。
AWSコンソール >> Certificate Manager画面を開き、コンソール右上のリージョン選択を「米国東部(バージニア北部)us-east-1」に切り替えます
「証明書をリクエスト」を押します。
「証明書タイプ」で「パブリック証明書をリクエスト」を選択し、「次へ」を押します。
① 「完全修飾ドメイン名」に取得した独自ドメインを入力します。
②③④ デフォルトの値を使用します(DNS検証を選択)
⑤ (必要であれば)タグを設定します。
⑥ 「リクエスト」を押します。
4. ACMのDNS検証を行う
DNS検証とは
DNS検証とは「このドメインを本当に管理してる?」をAWSが確認する作業です。
ACMは、指定したDNSに特殊なCNAMEレコードを置かせることで所有権確認を行います。
このDNSレコードを置いてください、置けたら所有者だと信じます
AWSは実際にDNSを問い合わせて、そのレコードが存在するか確認しています。
(内部ではdig _acme-challenge.example.comなど)
このプロセスを通して、「証明書を発行してよい相手か」を確認しています。
DNS検証の大きなメリット
ACMは証明書期限前に「DNSレコードまだある?」を確認します。
DNS検証レコードを消さずに残していれば、証明書の自動更新を行なってくれます。
先ほどのリクエストが完了した画面で、「Route 53でレコードを作成」を押します。
(自動でCNAMEレコード(名と値)をHosted Zoneに追加してくれます)
※Hosted Zoneが別アカウントの場合は、表示されたCNAMEを手動でRoute 53にレコード追加する必要があります
先ほど作成したHosted Zoneを選択し、「レコードを作成」を押します。
ステータスが「成功」になるまでしばらく(5~15分程度)待ちます。
5. CloudFront に独自ドメインと証明書を関連付ける
AWSコンソール >> CloudFront >> ディストリビューション画面を開き、紐づけたい対象のディストリビューションを押します。
「一般」>>「編集」を押します。
① 「Alternative domain name (CNAMEs) - optional」に独自ドメインを入力します。
※ディストリビューションはここで登録した独自ドメインからのアクセスを許可します。
② 「Custom SSL certificate - optional」に先ほど発行した証明書を選択します。
③ 「Security policy」には「TLSv1.2_2021 (推奨)」を選択します。
④⑤ 「Supported HTTP versions」は「HTTP/2」と「HTTP/3」の両方を選択します。
※HTTP/3未対応ブラウザでも、自動的にHTTP/2へフォールバックされるためデメリットはありません
「変更を保存」を押します。
ディストリビューションのデプロイが完了するまで待ちます(2~5分程)
6. Route 53でCloudFrontへのエイリアスレコードを作成する
AWSコンソール >> Route 53 >> ホストゾーン画面を開き、対象のホストゾーンを押します。
「レコードを作成」を押します。
① 「レコード名」は空欄のままにします(右に表示されている独自ドメインが使われます)
② 「レコードタイプ」は「A」を選択します。
③ 「エイリアス」をONにします。
「なぜ最初から'ALIASレコード'が存在しないのか」
→ それは、DNS RFC標準に存在しないから
→ そのため、A/AAAAレコードを拡張したAWS独自機能として提供されています。
④ 「トラフィックのルーティング先」に「ディストリビューション」を選択します。
⑤ 対象のディストリビューションを選択します。
⑥ 「ルーティングポリシー」は「シンプルルーティング」のままにします。
⑦ 「ターゲットのヘルスを評価」は「いいえ」のままにします。
⑧ 「レコードを作成」を押します。
※サブドメイン(例:www.example.com)なども使う場合は同じ手順でもう1レコード作成(レコード名にwwwを入れる)します
7. 動作確認
独自ドメインにアクセスして、もともと「CloudFrontディストリビューションのドメイン」で表示されていたアプリにアクセスできることが確認できたら完了です!
今回は以上になります。
















