インターフェイスVPCエンドポイント(PrivateLink)に発行される複数のDNS名

AWS運用自動化サービス「Cloud Automator」

PrivateLinkのインターフェイスVPC Endpointを作った時に複数のDNS名が割り当てられますが、これらが何を意味しているのかについて書いてみます。

PrivateLinkとは?

PrivateLink、便利なんです。原則的にインターネット経由でリーチしなければいけないAWSのAPI群ですが、PrivateLink (Interface VPC Endpoint) を利用すればインターネットを経由することなく、VPC内からAWSサービスへ到達できます。
またAWSサービスだけでなく、EC2インスタンス等で実装したサービスに対してもPrivateLink経由でネットワーク的に到達することができます。全く新しいサービス提供の形が実現できるかもしれません。

「違うVPC間でEC2インスタンス間の通信をさせたいけど、IPレンジがかぶっちゃってるからVPC Peeringで繋ぐわけにもいかない。どうしよう…」というときもPrivateLinkが使えます。サービス提供側で「NLB」「エンドポイントサービス」を作成し、サービス利用側で「インターフェイスVPC Endpoint」を作成すればよいのです。

DNS名が複数・・・

早速、エンドポイントを作ってみました。
可用性のため、複数のAZにまたがるインターフェイス群とします。
エンドポイントにはDNS名が発行されますので、利用するEC2インスタンス等からそのDNS名に対してアクセスすればよいのです。

ん?

複数のDNS名がありますね…なんでしょうこれは。どれを使えばいいの?
となりましたので調べてみました。

インターフェイスエンドポイントを介したサービスへのアクセス
https://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/vpce-interface.html#access-service-though-endpoint

・インターフェイスエンドポイント用に生成したエンドポイント固有のリージョン DNS ホスト名。このホスト名には、一意のエンドポイント識別子、サービス識別子、リージョン、および vpce.amazonaws.com が含まれます (例: vpce-0fe5b17a0707d6abc-29p5708s.ec2.us-east-1.vpce.amazonaws.com)。
・エンドポイントが使用できるアベイラビリティーゾーンごとに生成したエンドポイント固有のゾーン DNS ホスト名。このホスト名には、アベイラビリティーゾーンが含まれます (例: vpce-0fe5b17a0707d6abc-29p5708s-us-east-1a.ec2.us-east-1.vpce.amazonaws.com)。アーキテクチャーでアベイラビリティーゾーンが分離されている場合 (たとえば障害抑制のためや、リージョン内データ転送コスト削減のため)、このオプションを使用できます。

というわけで、インターフェイスエンドポイントには「リージョン固有のDNSホスト名」と「ゾーンごとのDNSホスト名」が発行されるようです。
リージョンDNSホスト名は紐づいている全てのENIのプライベートIPアドレスを返します。
ゾーンDNSホスト名は各AZ毎に生成され、そのゾーンにあるENIのプライベートIPアドレスを返します。

DNS名に “ap-northeast-1” とだけあるのがリージョンDNSホスト名で “ap-northeast-1a”, “ap-northeast-1c” とあるのがそれぞれのゾーンのDNSホスト名だと分かりますね。

使い分け

原則的にはリージョンDNS名を利用し、AZまたぎのレイテンシや通信料金が気になる場合のみゾーン固有のDNSを利用するのがよさそうです。

AWS運用自動化サービス「Cloud Automator」