状況
Lambda を VPC のプライベートサブネットに接続し、同じ VPC の RDS(PostgreSQL)に接続させた。ログには connect ETIMEDOUT 10.0.2.15:5432。RDS のエンドポイント名は 10.0.2.15 に解決できている。RDS の SG は作成時に踏み台サーバーからだけ許可した。
原因を調べる順番として、最も適切なものは?
- ADB のユーザー名とパスワード
- BRDS の SG の 5432 番に Lambda の SG からの許可があるか
- CRDS を「パブリックアクセス可能」に変える
- DLambda と RDS のサブネットのネットワーク ACL
正答
- A → B → D → C
- B → D → A → C
- C → B → A → D
- D → A → C → B
解説
エンドポイント名がプライベート IP に解決できているので、DNS と Lambda の VPC 接続は機能している。ETIMEDOUT は TCP の応答が無い状態で、認証まで進んでいない。パスワードが違うなら PostgreSQL から認証失敗のメッセージが返るので、A は後回しになる。RDS の SG は踏み台からしか許可していないため、Lambda の SG からの 5432 番が無いのが最も疑わしい(B)。SG に問題が無ければ、サブネットのネットワーク ACL(D)を見る。パブリックアクセス可能にする(C)は、Lambda が VPC 内から接続している以上解決にならず、本番の DB をインターネット側にさらす変更なので行わない。
この問題を含む AWS のテストを制限時間つきで解く
AWSクイズへ