ちょっと話題の記事

【AWS】Route53でPublic/Private 同じドメイン名のゾーンを管理する

2014.11.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹@上越妙高オフィスです。Route53で待望の新機能Private DNSがリリースされました。

アプリケーションエンジニア視点から、PrivateなDNSをRoute53で管理できるようになると、なにがうれしいのか。そんなことを考えながら新機能を試してみました。

ユースケース

例えば下記図のようにWebとAPIという2台構成のシステムがあったとします。Webサーバーで動くアプリケーションは、情報の問い合わせをAPIサーバーに対して行うとします。社内ローカルでアプリケーションを開発しているとき、APIサーバーの名前解決は「グローバルIPアドレス」が返り、インターネット越しに通信を行います。

20141106_route53_002

しかしこのアプリケーションをVPC上のEC2サーバーにデプロイした際に、VPC外と同様グローバルIPアドレスで名前解決されてしまうと、WebサーバーからいったんVPC外にでて再度VPC内に入り直すという無駄な通信が発生してしまいます。

20141106_route53_003

ここは「プライベートIPアドレス」で名前解決しVPC内に閉じた通信を行いたいところです。

解決策

上記の課題を解決するためにはRoute53に2つの機能が必要になります。

  1. 2つのDNSゾーンを同じ名前で作成できる
  2. 同一のレコードに対してVPC内/外どちらから名前解決されたかに応じてプライベート/グローバル異なるIPアドレスを返す

2つのDNSゾーンを同じ名前で作成できる

結論からいうと、問題なくできます。Route53では"Domain Name"だけでなく"Type"(Public or Private)でユニークになっており、同じドメイン名のゾーンが作成できます。(Private DNSの場合は同じ"Domain Name"に対して、同一の"VPC Id"はAssociateできないようです)

20141106_route53_001

同一のレコードに対してVPC内/外どちらから名前解決されたかに応じてプライベート/グローバル異なるIPアドレスを返す

こちらも問題ありません。VPC内から引いたゾーンのネームサーバと、VPC外から引いたゾーンのネームサーバーが異なるためです。そのため同一のホスト名に対してVPC内外どちらから名前解決するかに応じてプライベート/グローバルどちらのIPアドレスを返すかを変更できます。

VPC内で名前解決した場合

[ec2-user@ip-172-31-27-178 ~]$ dig api.example.com. +short
172.31.10.203

VPC外で名前解決した場合

$ dig api.example.com. +short
54.xxx.yyy.111

ELBを利用する際の注意点

上記の構成だとAPIサーバーが冗長化されていません。ここはELBを用いてEC2をMulti-AZにしておきたいところです。

ではPrivate DNSにELBのAliasを作成するのはどうでしょうか?VPC内から名前解決した時にはプライベートIPアドレスを返してくれると嬉しいのですが・・・結論からいうとNGでした。

VPC内からPublicなELBを名前解決した場合

[ec2-user@ip-172-31-27-178 ~]$ dig api.example +short
54.xxx.yyy.101
54.xxx.yyy.201

PublicなELBに対するアドレス解決はあくまでもグローバルIPになるようですね。APIサーバーを冗長構成にしたい場合には、別途Internal ELBを用意し、PrivateなゾーンについてはそちらのAliasを指定することで解決可能です。

20141106_route53_004

まとめ

PrivateなDNSを外部にさらすことなくRoute53で管理できるようになったことで、アプリケーションからみて透過的にVPC内外の環境に応じた名前解決ができるようになり、デプロイ時の設定変更が不要になることもあるのではないでしょうか。

また同一のゾーンでPublic/Privateを管理していた場合にはゾーンを区別することで、管理もスッキリするのではないでしょうか。VPNやDirect Connect経由でVPCに接続する環境であれば、社内DNSサーバーをRoute53に任せてしまうという使い方もあるかもしれませんね。


訂正:2014/11/06 10:25 社内から指摘がありましたので訂正させていただきます。Thanks > 大瀧さん。

VPN/DX経由のDNS問い合わせは、VPCのDNSサーバーは答えてくれませんよ。なので、オンプレからの名前解決をPrivate Zoneで対応することは難しいとおもいます。

Private hosted zones do not support transitive relationships outside of the VPC; for example, you cannot access your resources using their custom private DNS names from the other side of a VPN connection.

Using DNS with Your VPC - Amazon Virtual Private Cloud http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html#vpc-private-hosted-zones


訂正:2016/02/29 10:50 上記注釈について、Route53のPrivate DNSをオンプレから名前解決する方法を千葉さんがブログにしてくれました!

- オンプレからAWSのDNSを引く高可用性な構成 | Developers.IO

みなさんもどんどんRoute53を使ってみてください!