起きた問題
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 解決」を有効にする
参考
- RDS インスタンスに割り当てられた IP アドレスに関連する問題のトラブルシューティング
- https://wannabe-data-engineer.net/rds-private-access-via-vpc-peering/
この記事見つけなければ絶対にわからなかった。あざっすと言わせてもらおう…