Amazon ELBでホスト名なしのhttp://example.comを運用すると発生するいくつかの弊害

2011-05-25追記

ELBとRoute 53が協調動作するようになったみたいです。

まだ試してないんですが、www.example.comじゃなくてホスト名なしのexample.com (zone apexと呼ぶそうです)をRoute 53で管理すると、ELBのIPアドレスが変わったときに自動的にexample.comのAレコードが追従して変更される感じじゃないかと思います。スバラシス!!

→試してみたす


AWSのロードバランサ Amazon ELB (Elastic Load Balancing) で、ホスト名なしの http://example.com な感じの URL を運用するといろいろ弊害が発生しますよね、って話です。

みなさんどうやって回避、運用してるんでしょうか? or 間違いなどあったらご指摘いただけると助かります><


まず、ELB を自ドメインで運用するするには、ロードバランサにつけられた *.elb.amazonaws.com という DNS Name を、運用したい自ドメインの CNAME として設定するように案内されています。

example.com  IN  CNAME  test-XXXXXXXX.ap-northeast-1.elb.amazonaws.com.

AじゃなくてCNAMEなのは、ELB側の都合でELBのIPアドレスやAレコードが変更されるかもしれないから、と書かれています。


つまり、ホスト名なしの http://example.com で運用したい場合は example.com に CNAME を設定することになるわけですが、ここに問題があります。

CNAMEレコードは、ほかのリソースレコードを設定できない

Restrictions

  • An alias defined in a CNAME record must have no other resource records of other types (MX, A, etc.). (RFC 1034 section 3.6.2, RFC 1912 section 2.4) The exception is when DNSSEC is being used, in which case there can be DNSSEC related records such as RRSIG, NSEC, etc. (RFC 2181 section 10.1)
CNAME record - Wikipedia

の通り、example.com を CNAME にしてしまうと、SOAやNS等のレコードが(DNSの仕様上)設定できなくなってしまいます。そのせいか、dig で名前を引くとタイムアウトで引けないことが多いです。

メール受信で問題がある

メールを受信したい場合、xxx@example.com というメールアドレスで受けたいと思うのですが、先の通り MX レコードが設定できません。

一応、CNAME を解決して得られた (ELBの) IP アドレスに SMTP でアクセスしてくれるようなので、ELB の設定で SMTP (25/tcp) も背後のリアルサーバのフォワードするようにすれば、メールの受信ができることはできます。

ただ、手元の qmail なサーバから xxx@example.com 宛てにメールを送ったところ、届いたメールの rcpt to が xxx@example.com ではなく xxx@test-XXXXXXXX.ap-northeast-1.elb.amazonaws.com になってしまいました。

ほかの MTA は xxx@example.com へ送ってくれるかもしれませんが、これでは複数ドメインの運用したい場合にはちょっと心配ですね。。

結局

自分の場合、ELB 経由するのは http://example.com じゃなくて http://www.example.com に変更して、example.comはリアルサーバーのElastic IPでDNS-RRしてhttp:/example.comhttp://www.example.comへリダイレクト。メールの受けは背後のリアルサーバ 2 台の Elastic IP に MX 振るって感じにしました。

それからTwitterでいただいた反応のメモも。