今回は
アカウント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分程度待たないとレコードが表示されませんでした。
これでピアリング接続の作成は完了です。
ただ、これだけだと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へ解決できているか、で見れるようでした。
中々手こずりましたが、やりたかったことにたどり着けたので、備忘録として残しておきます。