同VPC子网下Lambda访问RDS是否走公网?公网访问配置咨询
问题解答
核心结论
AWS会自动识别这种场景,让同VPC同子网的Lambda通过私有网络访问你的RDS,不会走公网——哪怕RDS开启了Publicly accessible=Yes。
原因说明
RDS的公共端点(比如你用的example.xxxxxxxxxxxxx.us-east-1.rds.amazonaws.com)是个特殊域名:
- 当在VPC内部(比如你的Lambda运行环境)解析这个域名时,AWS的Route 53会自动返回RDS实例的私有IP地址;
- 只有从VPC外部(比如你的本地SSMS)解析时,才会返回公网IP。
所以你当前的Python连接字符串完全不用修改,Lambda访问这个端点时,实际走的是VPC内部的私有网络流量,不会经过公网。
验证方法(可选)
你可以在Lambda代码里加一段解析域名的逻辑,确认访问路径:
import socket def lambda_handler(event, context): hostname = "example.xxxxxxxxxxxxx.us-east-1.rds.amazonaws.com" ip = socket.gethostbyname(hostname) print(f"解析得到的IP: {ip}")
运行后对比RDS控制台「连接与安全性」里的私有IP,会发现两者一致,证明是私网访问。
额外注意点
- 确保Lambda的安全组允许出站访问RDS的对应端口(比如SQL Server默认1433);
- 确保RDS的安全组允许Lambda所在安全组的入站流量(目标端口匹配数据库端口);
- 本地SSMS的公网访问需求不受影响:只要RDS安全组开放了你的本地公网IP访问权限,同时保持
Publicly accessible=Yes,就能正常通过公网连接。
内容的提问来源于stack exchange,提问作者Astora
相关产品推荐
相关产品推荐

