Route53のALIASをALIASする

AWS運用自動化サービス「Cloud Automator」
技術4課の認証認可おじさんこと、鎌田(裕)です。今日は認証の話ではありません。(笑)
Route53のALIASレコード、皆さんもお使いかと思います。このALIASレコード、ALIASのALIASも出来るってご存知でしたか?
ということで、本日はRoute53のALIASレコードについて、ALIASのALIASも含めてご説明します。

そもそもALIASレコードとは

AWSのドキュメントには、以下の通り記載されています。
エイリアスレコードは、DNS 機能に Route 53 固有の拡張機能を提供します。 エイリアスレコードは、IP アドレスまたはドメイン名の代わりに、CloudFront ディストリビューション、Elastic Beanstalk 環境、ELB Classic Load Balancer、Application Load Balancer、またはNetwork Load Balancer、静的ウェブサイトとして設定された Amazon S3 バケット、または同じホストゾーン内の別の Route 53 レコードへのポインタを格納します。
要するに、ELBやCloudFrontに割り当てられるエンドポイント名を、実際の名前解決においてAレコードとして返してくれるようにするのがALIASレコードです。
一見するとCNAMEレコードと似ていますが、CNAMEではZone ApexなレコードをCNAMEできないのに対して、Zone ApexなレコードもALIASできるのが特徴です。
また、ELBやCloudFrontなどへのALIASレコードのクエリには、課金されないこともポイントです。
※ドキュメントに、ALIASレコードとCNAMEレコードの比較表がありますので、併せてご参照ください。

ALIASレコードは多重にできる

され本題です。このALIASレコードに、ALIASすることも出来ます。ドキュメントに記載のある、
同じホストゾーン内の別の Route 53 レコード – Route 53 は、ポインタによって参照されるレコードを要求するクエリを受け取ったかのように応答します。
という部分が該当します。実際に、設定の選択肢として、Route53で設定されている各種レコードがALIASの選択肢に登場します。

ALIASレコードをALIASした時のHTTPアクセス

私は今回色々な事情で、以下の構成図の形を構築しました。
通常は、bms-test.tkというZoneApexにALIASしているS3のバケットにアクセスされますが、Failoverすると、error.bms-test.tkとして設定されているALIASのS3をさらにALIASしてZone Apexで参照できるようにし、アクセスできる形です。

この形でRoute53がFailover状態になったら、error.bms-test.tk.tkで設定されたバケットの中身を返して欲しかったのですが、実際にはbms-test.tk.tkのバケットの中身が返ってきました。
この点なのですが、HTTPリクエストのHOSTヘッダーとしてはbms-test.tk.tkに対してのリクエストとなるため、名前解決としてはerror.bms-test.tkのIPが返されても、HTTPのリクエストのHOSTの内容が優先されるために起こる状況です。

どちらもS3に対してALIASしている(同一ホストに対してのアクセスで、かつ名前ベースのVirtual Hostのような形になっている)からこそ、起きた現象といえるでしょう。
奥が深い。。

おわりに

ALIASレコードの奥深い世界に触れてみました。
ALIASレコード、知っていそうで知らない世界。今のインターネットには欠かせないDNSですが、Route53もまだまだ奥が深いようです。
皆さんも、よきALIASレコードライフを!
AWS運用自動化サービス「Cloud Automator」