2022-12-17に更新

Route53

1. DNSって何?

WHAT IS DNS?」を参照

2. 「Route53」というサービスの概要

AWSのDNSサービスで、ネームサーバー(DNSサーバー)の役割を果たす。

2.1 特徴

■ 高可用性(可用性…システムが継続して稼働できる能力のこと)
SLA(Service Level Agreement)100%(定義した可用性以上で使用できるように AWSが努力するよ!という意。つまり、SLA100% = 稼働率が100% = Route53が落ちないことをAWSが保証している)
■ 高速
(なぜなら)エッジロケーション(Route53を提供している場所)の中で最も近いロケーションから応答を返すから
■ フルマネージドサービス
障害監視やバックアップ等の関わる作業をAWSが全て行うので、DNSサーバーの設計・構築・維持管理が不要

2.2 Route53の設定に関わる用語

2.2.1 ホストゾーン

  • リソースレコードのコンテナ
  • 従来のDNSにおいて、Authoritative Name Servers は各々の階層に分かれ、配置された階層のゾーン情報を管理しているが、ホストゾーンにはドメイン名(i.e., example.com)に関わるリソースレコードが含まれる。

image

Route53は分散型のDNS(Amazon CloudFront (CND) と同居)

参照:https://aws.amazon.com/jp/cloudfront/features/?whats-new-cloudfront.sort-by=item.additionalFields.postDateTime&whats-new-cloudfront.sort-order=desc
参照:https://aws.amazon.com/jp/cloudfront/features/?whats-new-cloudfront.sort-by=item.additionalFields.postDateTime&whats-new-cloudfront.sort-order=desc

Route53を使用しない時の動作

image

Route53使用時の動作

image

ホストゾーンを設定すると4つの権威サーバー名が払い出される

  • 一つのホストゾーンに対して4台のDNSサーバーが割り当てられる
  • DNSサーバーは全て異なるエッジロケーションに配置されている
  • 4つのTLD(.com, .org, .net, .co.uk)

2.2.2 レコード

リソースレコードの意

2.2.3 ヘルスチェック

サーバーの稼働状況をチェックする

2.2.4 TTL (Time to Live)

名前解決の結果得た情報のキャッシュのduration (300 min. by default)

2.2.5 ルーティングポリシー

Route53が名前可決要求(DNSクエリ)に応答する方法を決定するレコードの設定

< シンプル >

  • 従来のDNSと同様に、静的なマッピングによりルーティングが決定される(レコードセットで事前に設定された値に基づいてDNSクエリに応答する)

< 加重 >

  • レコードセットに重みを設定
  • 指定した比率で複数のリソースにトラフィックをルーティングする場合に使用する
  • より重み付けの高いリソースにより多くルーティングされる

image

< レイテンシー >

  • 複数のAWSリージョンでアプリケーションがホストされている場合、ネットワークレイテンシーが最も低いAWSリージョンのリソースへルーティングする
  • 一定期間中に実行されたレイテンシーの測定値に基づいており、時間の経過と共に変化する場合がある
  • 複数の国にリソースが存在する(マルチリージョン)場合に、最もレイテンシーが低いリージョンにユーザーをアクセスさせたいというニーズが実現できる

< 位置情報 >

  • クライアントの位置情報に基づいてDNSクエリに応答する
  • 特定の国・地域からのDNSクエリに対して、特定のアドレスで応答する
  • 想定されるユースケース:コンテンツのローカライズ、地域限定配信時

< フェイルオーバー >

image
* ヘルスチェックの結果に基づいて、利用可能なリソースへルーティングする
* 障害時に、S3静的ウェブサイトホスティングの Sorry Page を表示

3. Route53とドメインを結び付ける

上述した通り、Route53にホストゾーンを設定すると4つの権威サーバー(ネームサーバー)が払い出される。
image
しかしRoute53にホストゾーンを設定しただけでは、ドメインとRoute53を結び付けたことにはならない。

ホストゾーンを設定した時点で、EC2上でdigコマンド打ってみる。

$ dig arumakanakuy.com NS +short
dns2.onamae.com.
dns1.onamae.com.
# 「お名前.com」のネームサーバーが表示される
■ なぜ?
  • 当該ドメインのゾーンが「お名前.com」の権威サーバーに委任されているから
■ 解説
  • TLD(例では.com)に「arumakanakuy.com」に関する問い合わせが来ると、TLDは「お名前.com」の権威サーバーのIPアドレスを返すため
  • お名前.comでは、ドメインを購入すると当該ドメインの権威サーバーにデフォルトで二つの権威サーバー(digで表示されたネームサーバー)を登録し、その情報を当該 TLD server に報告している
■ どうすればネームサーバーをRoute53に設定できるのか?(具体的に言うと、どうすれば上記digコマンドでRoute53のネームサーバーが表示されるようになるのか?)
  • 「ゾーンはお名前.comでなく、Route53にあるよ!」と設定する必要がある
  • ネームサーバー設定は、お名前.com側で行う操作
■ ドメインにEC2のElastic IPを紐付けるには?
  • arumakanakuy.com(権威DNS)のゾーン情報にドメインに対応するIPv4アドレスを登録する
  • ∴ (ホスト)ゾーンにAレコードを登録する

4. CNAME vs Ailas

独自ドメイン(e.g. arumakanakuy.com)へのアクセスをELBやCloudFrontに向けたい

4.1 CNAMEの場合

  • CNAME レコードは、DNS クエリを任意の DNS レコードにリダイレクトできる
  • 通常はarumakanakuy.comの権威DNSに対して、CNAMEレコードにELBのDNS名を設定する(多段CNAME = CNAMEレコードに別のCNAMEレコードを設定すること)

image

# arumakanakuy.comのホストゾーンに設定されたCNAMEレコード
% dig app.arumakanakuy.com CNAME +short
tutorial-alb-1141980320.ap-northeast-1.elb.amazonaws.com.
% dig app.arumakanakuy.com +noall +answer

; <<>> DiG 9.10.6 <<>> app.arumakanakuy.com +noall +answer
;; global options: +cmd
app.arumakanakuy.com.   60  IN  CNAME   tutorial-alb-1141980320.ap-northeast-1.elb.amazonaws.com.
tutorial-alb-1141980320.ap-northeast-1.elb.amazonaws.com. 60 IN A 52.198.118.134
tutorial-alb-1141980320.ap-northeast-1.elb.amazonaws.com. 60 IN A 18.176.240.70

上記の例:
1. app.arumakanakuy.comをDNSに問い合わせるとtutorial-alb-1141980320.ap-northeast-1.elb.amazonaws.comがレスポンスされる
2. レスポンス結果であるtutorial-alb-1141980320.ap-northeast-1.elb.amazonaws.comをDNSに問い合わせると、Aレコードがレスポンスされる

  • 上記が示す通り、多段CNAMEは名前解決までのクエリ数が増える上、RFCでは既定がないため何段まで動作するかは実装によるので非推奨
  • じゃあ18.176.240.70のAレコードを登録すればいいのでは?と思うかもしれないが、ELBのDNS名に対するIPアドレスは動的に変化する可能性があるため、できない

⚠︎ CNAMEに「Zone Apex / Naked Domain / Root Domain」は設定してはいけない

まず「zone」とは。DNSがドメインを管理する範囲です。例えば、example.comドメインを取得した場合、自分のDNSではexample.com及び.example.comに対するレコードを管理できます。この範囲がゾーンです。
Amazon Route 53のALIASレコード利用のススメ

Zone Apex / Naked Domain / Root Domain(※以降Zone Apex):
サブドメイン(e.g. www.arumakanakuy.com, blog.arumakanakuy.com, etc.)に対してarumakanakuy.comをZone Apexと呼ぶ

  • RFCの仕様は、CNAMEレコードと同一ドメイン名の、他のレコードが存在出来ない規則になっている
  • つまり、example.comのCNAMEレコードを定義してしまうと、example.comのMXレコードやNSレコードも存在出来なくなってしまう
  • Route53では、ホストゾーンを作成した時点でZone ApexのNSレコードとSOAレコードが払い出されるため、Zone ApexをCNAMEとして設定することはできない
    例:arumakanakuy.comのホストゾーンを作成
    image

4.2 Ailasの場合

  • Aliasレコードは、CNAMEのようなマッピングをCNAMEのような制約なしで実装できる
  • Ailiasレコードの場合、マッピング先のAWSリソースのIPアドレスが変化しても自動的に変化を認識するため、Zone Apexも登録できる
# arumakanakuy.comのホストゾーンに設定されたAレコードで設定されたAlias
% dig arumakanakuy.com +noall +answer

; <<>> DiG 9.10.6 <<>> arumakanakuy.com +noall +answer
;; global options: +cmd
arumakanakuy.com.   60  IN  A   52.198.118.134
arumakanakuy.com.   60  IN  A   18.176.240.70

上記の例:
* CNAMEとは異なり、直接Aレコードに名前解決している(クエリ数が1回)ことに加え、Zone Apexでも問題なく動作する

その他の特徴

  • Route53はDNSクエリへの応答ごとに料金が発生するので、DNS クエリを任意の DNS レコードにリダイレクトさせるCNAMEレコードは課金の対象だが、Ailasレコードは追加料金なしで利用できる

Amazon Route 53 では、前金の支払いは必要なく、ドメインに返答するクエリ数の制限がありません。他の AWS サービスと同様に、使用時に使用したものに対してのみ支払いを行います。

  • ホストゾーンの管理: Route 53 で管理した各ホストゾーンに対する月額料金を支払います。
  • DNS クエリへの応答: DNS クエリに対する Amazon Route 53 サービスからの応答には、料金が発生します。ただし、クエリの対象がエイリアス A レコードであり、Elastic Load Balancing インスタンス、CloudFront ディストリビューション、AWS Elastic Beanstalk 環境、API Gateway、VPC エンドポイント、または Amazon S3 ウェブサイトバケットにマッピングされている場合は、追加料金は不要です。
  • ドメイン名の管理: Route 53 経由で登録された各ドメイン名または Route 53 に転送された各ドメイン名に対して年間料金を支払います。
    Amazon Route 53 料金表
  • CNAMEと違って、TTLはAWS側から設定される(ユーザー側で設定できない)

参考資料

ルーティングポリシーの選択 - Amazon Route 53 | doc.aws.amazon.com
AWS再入門ブログリレー Amazon Route 53編 | DevelopersIO dev.classmethod.jp
Amazon Route 53のALIASレコード利用のススメ | Developers IO dev.classmethod.jp

ツイッターでシェア
みんなに共有、忘れないようにメモ

光の勢力

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント