Amazon Route53を使ってルーティングしてみた


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

はじめに

Route53を使って複数のルーティングポリシーをハンズオンにて行いました。
そちらについて復習を兼ねてまとめてみました。
この記事では、加重ルーティングポリシーを用いることで段階的にサービスを一部のランダムなユーザーにのみ公開することを想定としています。
そうすることで、新しいサービスを一斉に配信するのではなく、実験的に少数の人向けに配信をすることで、システムに問題があった場合に少ないリスクで済むといったメリットがあります。
このような配信方法を「カナリアリリース」と言ったりもします。

Amazon Route53とは

Amazon Route53は、可用性と拡張性に優れたドメインネームシステム(DNS)ウェブサービスです。
Route53を使用すると、ドメイン登録DNS ルーティングヘルスチェックの3つの主要な機能を任意の組み合わせで実行できます。

  • ドメイン登録
    ウェブサイトには example.comなどの名前が必要です。Route53を使用すると、ウェブサイトやウェブアプリケーションの名前 (ドメイン名) を登録できます。

  • DNSルーティング
    ユーザーがウェブブラウザを開き、ドメイン名(example.com)またはサブドメイン名 (acme.example.com)をアドレスバーに入力したときに、Route53はブラウザをウェブサイトまたはウェブアプリケーションに接続するための支援を行います。

  • ヘルスチェック
    Route53は、自動リクエストをインターネット経由でウェブサーバーなどのリソースに送信して、そのリソースが到達可能、使用可能、機能中であることを確認します。リソースが使用不可になったら通知を受け取るようにしたり、インターネットのトラフィックを異常なリソースから遠ざけるようにルーティングしたりもできます。

今回はRoute53の機能のうちDNSルーティングについてまとめました。

DNSについて

DNS(ドメインネームシステム)は、人間が読み取れるドメイン名 (www.amazon.com など)を機械が読み取れるIPアドレス(192.0.2.44など)に変換します。

 IPアドレスとは、インターネットの世界でいう住所のようなものです。
 IPアドレスは「192.0.2.44」のように3桁区切りの整数値で表記されます。

 IPアドレス表記だと人間にとって理解しづらいので人間に理解しやすい表記がドメイン名になります。
 ドメイン名を利用することで、人間にとって理解しやすくなり、快適にインターネットを利用することが可能になります。

 EX)www.amazon.com → 192.0.2.44

これらを変換してくれるのがDNSであり、AWSで利用するのがRoute53になります。

エイリアスレコードとは

DNSにはドメイン名とIPアドレスを紐づけるゾーンファイルに書かれた一行ごとの情報をDNSレコードと呼びます。
DNSレコードには複数の種類があり代表的なものにAレコード、AAAAレコード名などがあります。
そのAレコードの中の機能の一つにエイリアスレコードというものがあります。
エイリアスレコードは、Route 53のDNS拡張機能であり、AWSリソースにルーティングするための別名を付けることができる機能になります。
エイリアスレコードを使うことで、ホストゾーン内のあるレコードから別のレコードにトラフィックをルーティングすることができます。

CNAMEレコード

また、エイリアスレコードに機能が似ているCNAMEレコードというものがあります。
CNAMEレコードは、あるドメインを別のドメインに紐づけるレコードです。
例えば、Route53では、エイリアスレコードの名前とエイリアスレコードのタイプがDNSクエリの名前とタイプが一致した場合にだけDNSクエリに応答します。
CNAMEレコードは、AやAAAなどDNSクエリで指定したレコードタイプに関係なく、レコード名のDNSクエリに応答します。

ルーティング方法の説明

ルーティングにはいくつかの方法があり、以下の通りになります。

  • シンプルルーティングポリシー
    ドメインで特定の機能を実行する単一のリソースがある場合に使用します。
  • フェイルオーバールーティングポリシー
    アクティブ/パッシブフェイルオーバーを構成する場合に使用します。
    フェイルオーバールーティングは、プライベートホストゾーンにレコードを作成するために使用できます。
  • 位置情報ルーティングポリシー
    ユーザーの位置に基づいてトラフィックをルーティングする場合に使用します。位置情報ルーティングは、プライベートホストゾーンにレコードを作成するために使用できます。
  • 地理的近接性ルーティングポリシー
    リソースの場所に基づいてトラフィックをルーティングし、必要に応じてトラフィックをある場所のリソースから別の場所のリソースに移動する場合に使用します。
  • レイテンシールーティングポリシー
    複数のAWSリージョンにリソースがある場合に、レイテンシーの最も小さいリージョンにトラフィックをルーティングするために使用します。
    レイテンシールーティングは、プライベートホストゾーンにレコードを作成するために使用できます。
  • IP ベースのルーティングポリシー
    トラフィックの送信元のIPアドレスがわかっており、ユーザーの位置に基づいてトラフィックをルーティングする際に使用します。
  • 複数値回答ルーティングポリシー
    ランダムに選ばれた最大8つの正常なレコードを使用してRoute53が DNSクエリに応答する場合に使用します。
    複数値回答ルーティングは、プライベートホストゾーンにレコードを作成するために使用できます。
  • 加重ルーティングポリシー
    指定した比率で複数のリソースにトラフィックをルーティングする場合に使用します。
    加重ルーティングポリシーは、プライベートホストゾーンにレコードを作成するために使用できます。

ルーティングの効果を検証

今回は加重ルーティングポリシーを実際にハンズオンで検証します。

セキュリティグループの作成

sg_testを作成します。

セキュリティグループ インバウンドルール 説明
sg_test HTTP (0.0.0.0/0)
SSH (0.0.0.0/0)
HTTPの許可する設定はEC2インスタンスをWebサーバとして利用するため。
SSHの許可する設定は自身のPCからEC2インスタンスに接続するため。

EC2インスタンス作成

上記で作成したセキュリティグループを用いて「ec2_test1」と「ec2_test2」のふたつのEC2インスタンスを作成します。

今回はインスタンスを起動させた際に一緒に起動させるコマンドをユーザーデータに入力します。

#!/bin/bash
sudo yum install httpd -y
sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2
sudo systemctl enable httpd.service
sudo systemctl start httpd.service

上記のコマンドに関して以下を参考にしています。
Linux インスタンス用ユーザーガイド
ユーザーデータの入力が完了したら『インスタンスの起動』をクリック

SSHで接続する

  1. インスタンスが作成できたらTeraTermを使ってインスタンス内部に接続します。
    ホストに「ec2_test1」のIPv4のパブリックアドレスを入力
  2. ユーザー名に「ec2-user」入力し、秘密鍵を選択
  3. OKを押して以下の画面が表示されていれば接続成功です。

htmlファイルの追加

htmlファイルを追加し簡易的な表示画面を作成し、ルーティングした際に区別できるようにしたいと思います。

htmlファイルの追加
$ sudo vi /var/www/html/index.html
index.html
Hello test1!

簡易的な表示画面が作成されました。

もう一つの「Hello test2!」が表示される画面も作ったら準備は完了です。

加重ルーティング

以下のような構成を作成していきます。

二つのEC2インスタンスがあり、どちらのページを表示するかは加重の比率によって変わります。

ドメイン名取得には料金がかかるため、今回は既存のドメイン名を利用します。

次に対象のホストゾーンの中に入ったらレコードの作成をしていきます。
今回は二個のEC2インスタンスに対して加重ルーティングを割り当てるので二個レコードを作成します。

  1. 『レコードを作成』をクリック

    ・レコード名
    好きなレコード名を入力
    ・レコードタイプ
    IPv4を利用するためAレコードを選択
    ・Info
    対象インスタンスのパブリックIDを入力
    ・TTL(「Time to Live」の略で、ドメイン情報のキャッシュを保持する期間)
    デフォルトは300ですが検証時間短縮のため今回は60にしています。
    ・ルーティングポリシー
    『加重』を選択

    ・重量(各リソースの重量比率で表示される画面が変わります)
    合計が250になるように入力
    100と150で合計250になるように入力しています
    今回は合計250にしていますが、100と100で表示率を半々にする方法などもあります。
    ・レコードID
    レコードの見分けをつけるために今回は、
    『test-record1』と『test-record2』を入力
  2. 最後まで入力ができたことを確認して、『レコードを作成』をクリック

上記の1,2の部分を同じレコード名でもう一つ作成します。

すると、以下のように作成されたレコードが一覧に表示されることが確認できます。

それでは実際にブラウザを開いてドメイン名を入力します。
1回目の表示結果では「Hello test1!」が表示されました。

ブラウザ(同じブラウザでも大丈夫ですが検証のため)を変えて複数回画面を更新すると無事に「Hello test2!」が表示されることを確認できました。

念のため、コマンドプロンプトにて「nslookup ドメイン名」コマンドを用いて確認したいと思います。

上記の結果から、加重ルーティングポリシーを適応できていることがわかりました。

やってみて

以上『加重ルーティングポリシー』を実際にハンズオンで行いました。
ルーティングポリシーには複数の種類があり、違いの理解に時間がかかりましたが、実際にハンズオンで経験することで必要に応じたルーティングを使うことの大切さを感じました。

この記事では以下を参考に作成しています。
Amazon Route53

Last modified: 2023-03-09

Author