Route53加重ルーティング実験
問題
- 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インスタンスに参照が向いていなさそうだった。
0 ~ 255 の整数を入力します。
とあるが、
https://sayjoyblog.com/route53_routing_policy/ に、
重量の合計が「100」になるように設定する
とあるので、
50,50で試してみる。
今度はec2インスタンスばかりを参照するようになった。
試しにシークレットウィンドウを開いて foo.example.com
を参照したらgcpのページが開いた。
しかし、その後はシークレットウィンドウでない方のタブもgcpを参照するようになった。
試しに別ブラウザで開くとec2を参照した。
DNSキャッシュが関係しているように思う。
DNSキャッシュについて調べてみると、ローカル環境だけでもWindowsやChromeでキャッシュしているようだが、深追いしていない。
それぞれを参照することが分かったので実験としては完了。
Discussion