inu

VPCピアリングで別VPCのRDSにプライベートで接続できないときには

起きた問題

EC2から、VPCピアリングしてる先のRDSのホスト名が解決できず、接続できない。

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  ...
Caused by: java.net.ConnectException: Connection timed out (Connection timed out)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
  ...

EC2からnslookupするとパブリックIPで返される。

[ec2-user@ip-172-xx-xx-xx ~]$ nslookup myoracledb.xxxxx.us-east-1.rds.amazonaws.com
Server: xxx.xxx.xxx.xxx
Address: xxx.xxx.xxx.xxx#53
Non-authoritative answer: myoracledb.xxxxx.us-east-1.rds.amazonaws.com canonical name = ec2-3-232-189-42.compute-1.amazonaws.com.
Name: ec2-3-232-189-42.compute-1.amazonaws.com
Address: 3.232.189.42

原因、解決法

RDSのパブリックアクセシビリティが有効になっている場合、RDSのエンドポイント名をプライベートIPに解決することができない。以下の設定を追加で行う。

1. リクエスタVPCとアクセプタVPCの「DNS 解決」「DNS ホスト名」をそれぞれ有効にする

2. アクセプタ側のAWSアカウントから、ピアリング接続の「リクエスタ VPC からプライベート IP への DNS 解決」を有効にする

参考