Closed12

VPC Peering接続で別VPCにあるRedisに接続する

かわうそかわうそ

前提

  • AWSを利用
    • VPC-A
      • CIDR
        • 192.168.0.0/16
      • リソース
        • Redis
    • VPC-B
      • CIDR
        • 10.0.0.0/16
      • リソース
        • ECS(Nuxtサーバー)
  • VPC-AとVPC-Bの間にVPC Peering接続は設定済み
  • VPC-BにあるECS(Nuxtサーバー)からVPC-AにあるRedisに接続する
かわうそかわうそ

デプロイしてみると、以下のエラーが発生

[nitro] [unhandledRejection] ConnectionTimeoutError: Connection timeout
at Socket.<anonymous> (/app/.output/server/node_modules/@redis/client/dist/lib/client/socket.js:177:124)
at Object.onceWrapper (node:events:631:28)
at Socket.emit (node:events:517:28)
at Socket._onTimeout (node:net:598:8)
at listOnTimeout (node:internal/timers:569:17)
at process.processTimers (node:internal/timers:512:7)

おそらく、ネットワークが繋がっていないと予測

かわうそかわうそ

VPC Peeringの設定に問題ないことは確認済みなので、
Redis側に設定しているセキュリティグループのインバウンドを確認する

かわうそかわうそ

VPC-BからVPC-AにRedisのクラスターエンドポイントのホストで名前解決ができるか確認してみる
(VPC-BにあるEC2の踏み台から)

$ nslookup xxxxxxxx.sfvaih.clustercfg.apne1.cache.amazonaws.com
Server:         10.0.0.2
Address:        10.0.0.2#53

Non-authoritative answer:
Name:   xxxxxxxx.sfvaih.clustercfg.apne1.cache.amazonaws.com
Address: 192.168.95.16
Name:   xxxxxxxx.sfvaih.clustercfg.apne1.cache.amazonaws.com
Address: 192.168.96.209

いけてる(Peering通せば、名前解決いけるんだっけか?)

かわうそかわうそ

クライアントと Redis 間の TCP 接続を確認してみる

$ curl -v telnet://xxxxxxxx.sfvaih.clustercfg.apne1.cache.amazonaws.com:6379

特に応答もない...

かわうそかわうそ

試しに、
Redis側にあるセキュリティグループのインバウンドにVPC-BのCIDR(10.0.0.0/16)を許可してみる

かわうそかわうそ

疎通いけた

$ curl -v telnet://xxxxxxxx.sfvaih.clustercfg.apne1.cache.amazonaws.com:6379
* Rebuilt URL to: telnet://xxxxxxxx.sfvaih.clustercfg.apne1.cache.amazonaws.com:6379/
*   Trying 192.168.96.209...
* TCP_NODELAY set
* Connected to xxxxxxxx.sfvaih.clustercfg.apne1.cache.amazonaws.com (192.168.96.209) port 6379 (#0)
かわうそかわうそ

これを読むと...
https://zenn.dev/asuyasuya/scraps/1e36053a8fa496

DNSリゾルバは、ピアリング接続に関するルート情報を持っているか確認する。ピアリング接続に関するルートがある場合、通信経路にピアリング接続が含まれることがわかる。
DNSリゾルバは、ピアリング接続が正しく設定されている場合、ルートテーブルを参照しピアリング接続経由での通信を行う。

いけそうだけど、
じゃあ、VPC Peering接続の DNS 解決設定ってなんのためにあるんだっけか??(続く

gamgamsegamgamse

VPC Peering接続のDNS名前解決の必要性はたぶんこれ

パブリックドメイン名を EC2 インスタンスのプライベート IP アドレスに解決できます。

パブリックのエンドポイントをプライベートIPで名前解決するためにあるのかな

gamgamsegamgamse

ピアリングのみの設定だとプライベートのエンドポイントの名前解決だけができるようになるって感じだと思う

このスクラップは2ヶ月前にクローズされました