🍞

Route53加重ルーティング実験

2022/10/04に公開

問題

  • GCPからAWSにWebアプリケーションを移行したい
  • トラフィックを徐々に移行したい
  • ドメインはなぜかRoute53で管理している
  • どうするか?

対応

Route53の加重ルーティングを利用する。

実験

gcpで適当なインスタンスを立てて、ブラウザで下記のように表示されるだけのページを作る。

awsでもインスタンスを立てて同様の表示をするページを作成する。
画像は省くが、「this is aws.」と表示される。

ひとまず、Route53で適当なサブドメインとgcpインスタンスのIPをシンプルルーティングで紐づける。
紐づけたサブドメインで参照できることを確認した。
このサブドメインを仮に foo.example.com とする。

この状態で、 foo.example.com に対して加重レコードを設定しようとすると、下記のエラーが出た。
xxxは伏字。

InvalidChangeBatch 400: RRSet with DNS name xxx., type A, SetIdentifier gcp cannot be created as a non-weighted set exists with the same name and type., RRSet with DNS name xxx., type A, SetIdentifier ec2 cannot be created as a non-weighted set exists with the same name and type.

上の例ではgce,ec2それぞれのIPを指定し、2つの加重レコードを設定しようとしていた。
試しにec2のものだけ指定しても同様のエラーが出た。
non-weighted なtypeAレコードが既に存在しているからだと考えられる。

シンプルルーティングで作成したレコードを選択して編集することができる。
冒頭で作成したgcpに向いたレコードについて、シンプルルーティングから加重ルーティングに変更し、重みを100として保存する。
問題なく保存できた。
また、 foo.example.comへの参照もgcpを向いたままである。

続いて、新たに加重ルーティングのレコードを作成し、ec2インスタンスのIPと重み100を設定する。
設定はエラーなく完了した。
foo.example.com への参照を何度か試してみたが、ec2インスタンスに参照が向いていなさそうだった。

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resource-record-sets-values-weighted.html#rrsets-values-weighted-weight には、

0 ~ 255 の整数を入力します。

とあるが、
https://sayjoyblog.com/route53_routing_policy/ に、

重量の合計が「100」になるように設定する

とあるので、
50,50で試してみる。

今度はec2インスタンスばかりを参照するようになった。
試しにシークレットウィンドウを開いて foo.example.com を参照したらgcpのページが開いた。
しかし、その後はシークレットウィンドウでない方のタブもgcpを参照するようになった。
試しに別ブラウザで開くとec2を参照した。

DNSキャッシュが関係しているように思う。
DNSキャッシュについて調べてみると、ローカル環境だけでもWindowsやChromeでキャッシュしているようだが、深追いしていない。

それぞれを参照することが分かったので実験としては完了。

Discussion