LoginSignup
14
7

More than 5 years have passed since last update.

トラフィックフローを試してみた

Posted at

TL;DR

Amazon Route53 のトラフィックフローは、複雑なルーティングポリシーを実現するための魅力的なソリューションです。ただし、カンニングはできなさそうです(後述)。

目的

オンプレに2台のWebサーバがあり、それぞれ個別のグローバルIPを持っています。これら2台ともコケた場合の BCP 対策として、S3+CloudFront で構築した Sorry ページを表示するというのを Route53 を使って実現することを考えます。なお、HTTPS 対応の構成図を掲載しますが、HTTPS 自体は本質的ではないので説明は省略します。

overview.png

本来の構成は、インターネットから見て Web サーバー群の前段にロードバランサーがあって、そいつが回線負荷を考慮してこれらのいずれか一方 の A Record を返す(ように DNS Responseを書き換える)ということをやっているらしいです。しかしながら、Route53 からは回線負荷の状況などわかるはずもないので、A Record として両方の IP をなるべく公平に返してやることにします。

考え方

2台のWebサーバーを合わせた1個の仮想的なサービスを現用系、Sorry ページを待機系とするフェイルオーバー構成として構築します。まず、テスト用に立てた2台のサーバ fo-test1, fo-test2 に対して、それぞれ HTTP でヘルスチェックを行います。さらに、『これらいずれかが稼働中』を表す仮想的なヘルスチェック either-ok を作りました。ちなみにヘルスチェックの価格は、AWS 以外のエンドポイントに対して1件あたり0.75$/月です。HTTPS監視とか監視間隔を短くしたいといった向きには、多少オプション価格が上乗せされます(Amazon Route53 料金)。

health-check.png

複数の IP アドレスを公平に返すのは、ルーティングポリシーの Multivalue Answer で実現可能です。これらを組み合わせて、以下のようにすることにします。

Case fo-test1 fo-test2 either-ok A Record
1 Healthy Healthy Healthy fo-test1, fo-test2
2 Healthy Unhealthy Healthy fo-test1
3 Unhealthy Healthy Healthy fo-test2
4 Unhealthy Unhealthy Unhealthy xxx.cloudfront.net

ところが、『これらいずれかが稼働中』をフェイルオーバーの現用系とするための設定方法が、どうしてもわかりませんでした。仕方がないので、最後の手段としてトラフィックフローというのを試してみました。これは、複雑なルーティングをビジュアルエディタで構成でき、ルールのバージョン管理やロールバックも自由にできるという優れものです。

なぜ最初からこれでやらなかったかというと、これがちょっとお高いからです(ポリシーあたり50$/月)。

結果的には、めちゃくちゃ簡単。2分で設定完了。

traffic-flow.png

カンニング失敗

実は、トラフィックフローとかいいながら、実は単にビジュアルエディタで設定した内容を通常のリソースレコードに展開するんだろう。だからそれを書き留めて、トラフィックフローを解除してそれらのルールを手で追加すれば料金かからないはず。俺って天才じゃね?、的なことを当初考えていました。

ところが、トラフィックフローの機能としてはちゃんと動いているのに、リソースレコードの一覧には "Traffic policy record" の1件しか表示されません。どうも、トラフィックフローはリソースレコードとは完全に別管理になっており、その詳細ルールはリソースレコードとしては見えないようです。使いたかったらちゃんと金払えってことですね。

resourece-list.png

14
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7