VPCピアリングの設定

今回は
アカウントAのRDS
アカウントBのEC2(実際はElasticBeanstalk)
を接続したい、という要件でした。

・ピアリング接続の設定
アカウントB
VPC画面を起動
メニューの「ピアリング接続」を選択
「ピアリング接続の作成」をクリック
ピアリング接続ネームタグ = お好きなネームタグ
VPC (リクエスタ) = 接続したいEC2が属するVPC
アカウント = 別のアカウント
アカウント ID = アカウントA のアカウントID
リージョン = 今回はRDSも同様リージョンなので、このリージョン
VPC ID (アクセプタ) = アカウントA の RDS が属するVPC
を入力し「ピアリング接続の作成」を行いました。

すると、アカウントAに対して承認待ち、というステータスになるので、一度アカウントAに切り替えます。

アカウントA
同様に、VPC画面を起動し、「ピアリング接続」を選択します。
すると、1行承認待ち、というレコードが存在しているはずなので、承認を行います。
※アカウントBで申請後、5分程度待たないとレコードが表示されませんでした。

これでピアリング接続の作成は完了です。

f:id:Toshi_bw:20210629143344p:plain
VPCピアリング接続


ただ、これだけだとEC2 → RDSへは接続はまだできません。
続いて、それぞれのVPCが属するルートテーブルの修正が必要です。

仮に、
リクエスタCIDR(アカウントB) = 10.150.0.0/16
アクセプタCIDR(アカウントA) = 10.153.0.0/16
だとします。

アカウントBの VPC画面を起動し、右側にある「メインルートテーブル」
からルートテーブルの画面へ遷移します。
ルート → ルートの編集
に入り、「ルートを追加」をします。
送信先 = 10.153.0.0/16
ターゲット = ピアリング接続 を選択後、該当ピアリングIDを選択し、保存を行います。

続いて、アカウントA のVPC画面を起動し、同様にルートを追加を行います。
送信先 = 10.150.0.0/16
その他は同様で保存を行います。

これでルートテーブルの設定は完了です。
私はネットワークACLは元々全て開放されていたので、特に修正は必要ありませんでした。

ここで、一度接続を試しました。
EC2 → RDS への接続は弾かれました。
※RDSはパブリック接続を許可しています。

何が原因で接続できていないのか不明なため、一度
EC2からEC2へのSSH接続を検証しました。

結果、パブリックアドレスでは接続できませんでしたが、プライベートアドレスでの接続は行えました。
となると、恐らくDNS周りの問題か?
ということになりまして、再度VPC画面の確認を行ったところ、
VPC
DNS ホスト名 = 無効
DNS 解決 = 有効
両方のアカウントが上記設定になっていたので、
DNS ホスト名 = 有効
に変更を行い、再度試しましたがまだNG。

続いてVPC ピアリング画面へ戻り、設定を確認したところ、
アクセプタ VPC からプライベート IP への DNS 解決 = 無効
になっていたので
アクセプタ VPC からプライベート IP への DNS 解決 = 有効
に修正を行いました。

この設定を行ったところ、無事やりたかったEC2 → RDS への接続を行うことができました。

nslookup `RDS HOST NAME` 


で確認できますが、最後のIP部分がプライベートIPへ解決できているか、で見れるようでした。

中々手こずりましたが、やりたかったことにたどり着けたので、備忘録として残しておきます。