AWS再入門ブログリレー Amazon Route 53編

2020.08.18

こんにちは、onz(オンジー)です!

当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2020』の 11日目のエントリです。

このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとっても AWSサービスの再発見や2020 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。11日目のテーマはAmazon Route 53です。

本題の前に

Route53ナンモワカランってなるのはDNSの基本を知っていないことが原因だったりします(ソースは僕)。

Yui さんが紹介されているこの本を読んでみてとても良かったのでオススメしておきます!

こちらの記事もDNSの基本をおさらいしながらRoute53を触っているので読んでみてください。

本記事ではDNSの用語や仕組みにはあまり突っ込んで触れません。

Amazon Route 53とは

AWSのドメインネームシステム(DNS)ウェブサービスです。

ざっくり何ができるかをまとめると

  • Amazon Route 53 Hosted Zone
    • ネームサーバをマネージドで提供するサービス
    • 特定のVPCからの問い合わせと、それ以外からの問い合わせを識別し、異なる応答を返すことができる
    • Public Hosted Zone
      • インターネットを含む特定のVPC以外向け
      • インターネット上に公開されたDNSドメインのレコードを管理するコンテナ
    • Private Hosted Zone
      • VPCに閉じたプライベートネットワーク内のDNSドメインのレコードを管理するコンテナ
      • Amazon Route 53 Resolverを使ってアクセスする
  • Amazon Route 53 Resolver
    • VPCに標準で備わるDNSサーバー(フォワーダー+フルサービスリゾルバー)
      • インターネットに公開されたゾーンの名前解決をしたい
      • VPC内部に閉じたゾーンの名前解決をしたい
    • VPC作成時にデフォルトで有効、必要な場合はVPC毎に有効/無効に設定可能
    • IPアドレスはDHCPで自動的に配布される
  • Amazon Route 53 Resolver for Hybrid Clouds
    • ハイブリッド環境での名前解決を一元化するRoute53 Resolverの拡張機能

Amazon Route 53 Hosted Zoneについて具体的に見ていきます。

Amazon Route 53 Hosted Zoneの特徴

特徴として次のようなものがあげられます。

信頼性

  • 冗長化されたロケーション
  • SLA設定

高速

  • 全世界で動作するAnycastネットワーク
  • 変更の高速伝播

AWSサービスとの統合

  • エイリアスレコード
  • IAM
  • CloudWatchメトリクス
  • CroudTrail

使いやすさ

  • フルマネージドサービス
  • トラフィックフロー
  • CLI/APIでの操作
  • 数分で利用開始

経済性

  • 安価
  • 使用した分だけの課金

柔軟性

  • 重み付けラウンドロビン
  • レイテテンシベース
  • DNSフェイルオーバー
  • 位置情報ルーティング

Amazon Route 53 Hosted Zoneでできること

  • フルマーネジドのネームサーバー
    • 自前のネームサーバーを立てないでいい
  • トラフィックルーティング
    • DNSの仕組みを使ってクライアントからのトラフィックをリソースにルーティングする
  • ヘルスチェック&DNSフェイルオーバー
    • ステータスが正常なリソースのみにルーティングする

端的に言うとAmazon Route 53 Hosted Zone = ネームサーバー+グローバルサーバーロードバランシング(GSLB) の機能を有しているサービス

Amazon Route 53 Hosted Zoneの機能

ホストゾーン

  • ドメイン、サブドメイン内のDNSリソースレコードを管理するコンテナ
    • ホストゾーンの中にDNSリソースレコードを登録
  • ホストゾーンにはゾーンを管理する複数のDNSサーバーが割り当てられる(Delegation Set)
    • 1つのホストゾーンに対して4台のDNSサーバーが割り当て
    • DNSサーバーは全て異なるエッジロケーションに配置されている
    • 4つのトップレベルドメイン(*.com,*.org,*.net,*.co.uk)
  • パブリックホストゾーン、プライベートホストゾーンを作成可能

実際にホストゾーンを作成してみるとStart of Authority(SOA)レコードとネームサーバー(NS)レコードが4つ作成されていることがわかります。

※原則これらのレコードは変更しない

Public Hosted ZoneとPrivate Hosted Zone

  • Public Hosted Zone
    • インターネット上に公開されたDNSドメインのレコードを管理するコンテナ
      • インターネットのDNSドメインに対して、トラフィックをどのようにルーティングするかを定義

冒頭でも紹介した記事はPublic Hosted Zoneを使っています。

【初心者向け】無料ドメインを使ってAmazon Route 53で実装しながら理解するDNS

  • Private Hosted Zone
    • VPCに閉じたプライベートネットワーク内のDNSドメインのレコードを管理するコンテナ
      • VPC内のDNSドメインに対してどのようにトラフィックをルーティングするかを定義
    • インターネットにリソースを公開せずに名前解決が可能
    • 1つのプライベートホストゾーンで複数のVPCをサポート
      • 複数のVPCネットワークで同じホストゾーンを利用可能
      • 複数リージョンのVPCでも、同じホストゾーンを利用可能。ただしVPCが相互にアクセスできることが必要
        • パブリックホストゾーンと合わせて、スプリットビューが設定可能

こちらの記事で一番シンプルな使い方を実際に構築しているので一読していただければイメージが掴めるかと思います!

また同アカウント内のVPC間、クロスアカウントでの名前解決については次の記事をご参照ください。

エイリアスレコード

Route53固有の機能です。

少しCNAMEレコードの話に逸れますが、CNAMEレコードはDNSの仕組み上、制約があります。

同一の名前で他のリソースレコードを定義できない、というものです。

次の図でいうとexample.comのSOAレコードとNSレコードが既に存在している

→example.comのCNAMEレコードを定義できない

→example.comでサービスをホストできない

(引用)20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone

CNAMEレコードの場合はこのような制約があるのでZone Apex(サブドメインを含まないドメイン名)でサービスをホストできないのですが、エイリアスレコードならできます。

エイリアスレコードは次の特徴を持っているためです。

  • 問い合わせ元にCNAMEを応答せず、最終的に必要とするレコードデータのみを応答する
  • CNAMEを利用しないことで、ZoneApex(サブドメインを含まないドメイン名)でサービスをホスト可能とする

Zone Apexのケース以外でもエイリアスレコードを使用するメリットは多数あります。

例えばELBの名前解決をする際にもCNAMEレコードを使った名前解決ではなくエイリアスレコードを使うことが推奨されます。

詳細はこちらの記事をご覧ください。

トラフィックルーティング

  • DNSの応答をカスタマイズすることで、クライアントからのトラフィックをより適したリソースにルーティング
  • レコードの作成時に、Amazon Route53がクエリに応答する方法を決定するルーティング方針を決定するルーティングポリシーを選択

マネジメントコンソールからホストゾーンを新しくレコードを作成しようとすると最初に次の画面が表示されます。

(引用)20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone

選択できるルーティングポリシーを紹介していきます。

シンプル

従来のDNSと同様に静的なマッピングでルーティングされます。

複数の値を1レコードに指定するとランダムに応答します(いわゆるDNSラウンドロビン)。

加重

指定した比率で複数のリソースにトラフィックをルーティングできます。

フェイルオーバー

ヘルスチェックの結果をもとに実際に使えるリソースのみトラフィックをルーティングします。

また、仮に全てのリソースのヘルスチェックに失敗した場合は全てのリソースにトラフィックをルーティングします。

これはヘルスチェックの機能自体に不具合が生じた場合にサービスを止めないための設計になっている(フェイルセーフ)ためです。

複数値回答

  • 最大8つのランダムに選択された正常なレコードでDNSクエリに応答
  • 各リソースが正常かどうかも確認し、正常なリソースの値のみを応答
  • 応答をキャッシュされた後にリソースが使用できなくなった場合にもクライアントは応答内の別のIPアドレスを利用できる

1レコードに複数の値を定義したシンプル(1枚目)と複数値回答(2枚目)で何が違うかいうと後者はヘルスチェックで正常だったリソースのみを返すことができます。

 

詳細はこちらをご覧ください。

レイテンシー

複数のリージョンにアプリケーションがホストされている場合に最もレイテンシーが低いリージョンにユーザーをアクセスさせたいというニーズを実現できます。

位置情報

特定の地域・国からのDNSクエリをポリシーを持って特定のアドレスを応答することができます。

物理的近接性

ユーザーと地理的場所に基づいてDNSクエリに応答する。

トラフィックフローを用いる必要があります。

トラフィックフロー

ポリシーベースのトラフィックルーティングを簡単に作成・管理できる機能です。

大規模なシステムで複数のポリシーを組みあせて使う場合に管理が複雑になってしまうのは避けるためのものになります。

次の図の右側を見るとトラフィックフローの効果がわかるかと思います。

ドメインの取得もできます

Route 53内の機能でドメインを取得することもできます。

もちろん「お名前.com」などのドメイン公式登録サービスで取得したドメインをRoute 53に移管して使用することもできます。

参考

20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone

20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver

おしまい

以上、『AWS 再入門ブログリレー 2020』の 11日目のエントリ『Amazon Route 53』編でした。 明日 (8/19) は 後藤 さんの「Amazon Gamelift」の予定です。お楽しみに!!