SageMaker Pipeline连接RDS超时但EC2可连接的调试与排查
SageMaker Pipeline无法连接RDS但同VPC/安全组EC2可连接的诊断方案
诊断步骤
验证Pipeline实际网络配置
- 登录SageMaker控制台,找到对应Pipeline的执行记录,进入预处理步骤详情页,查看「Network」标签下的子网、安全组信息,确认是否与代码中
network_config配置完全一致(避免ID拼写错误、ARN配置错误等问题) - 查看CloudWatch日志中的网络初始化相关内容,确认Pipeline实例是否成功加入指定VPC和安全组
- 登录SageMaker控制台,找到对应Pipeline的执行记录,进入预处理步骤详情页,查看「Network」标签下的子网、安全组信息,确认是否与代码中
排查DNS解析问题
- 在预处理步骤中添加调试代码,输出RDS域名的解析结果:
或执行Shell命令:import socket print("RDS解析结果:", socket.gethostbyname("your-rds-endpoint"))
对比EC2上的解析结果,确认是否解析到RDS的私有IP(而非公网IP)nslookup your-rds-endpoint - 检查ML VPC的DHCP选项集,确认是否配置了能解析Prod VPC私有DNS的服务器;若RDS在对等VPC中,需确保ML VPC可访问Prod VPC的私有DNS服务
- 在预处理步骤中添加调试代码,输出RDS域名的解析结果:
检查路由与网络隔离配置
- 确认ML VPC私有子网的路由表是否包含指向Prod VPC CIDR的VPC对等连接路由
- 重点关注Pipeline启用的外部网络隔离(
EnableNetworkIsolation=True):该配置会阻断Pipeline的公网访问,如果RDS域名解析到公网IP,即使安全组允许,连接也会被拦截,此时必须使用RDS私有IP进行连接
验证执行角色权限
- 确认Pipeline执行角色是否包含以下VPC相关权限:
ec2:CreateNetworkInterfaceec2:DescribeNetworkInterfacesec2:DeleteNetworkInterface
- 查看CloudTrail日志,搜索该角色的操作记录,确认是否存在VPC资源访问的报错信息
- 确认Pipeline执行角色是否包含以下VPC相关权限:
启用网络流量日志
- 为ML VPC的目标子网或Pipeline安全组启用VPC Flow Logs,捕获出站到RDS端口(默认5432/3306)的流量,查看是否有
REJECT状态的记录 - 为RDS所在的Prod VPC安全组也启用Flow Logs,确认是否接收到来自Pipeline实例的连接请求,以及是否返回响应
- 为ML VPC的目标子网或Pipeline安全组启用VPC Flow Logs,捕获出站到RDS端口(默认5432/3306)的流量,查看是否有
可能的根因
- 外部网络隔离阻断公网访问:Pipeline启用
EnableNetworkIsolation=True后无法访问公网,若RDS域名解析到公网IP,即使安全组允许,连接也会超时。此时需改用RDS私有IP,或配置私有DNS解析指向私有IP - DNS解析不一致:EC2使用自定义DNS配置,而SageMaker Pipeline使用VPC默认DNS,导致解析结果不同(EC2解析到私有IP,Pipeline解析到公网IP)
- 网络接口创建失败:Pipeline执行角色权限不足,无法创建绑定指定安全组的网络接口,导致实例无法正常接入VPC网络
- 网络ACL限制:ML VPC或Prod VPC的网络ACL存在未注意到的拒绝规则,阻断了Pipeline与RDS之间的流量(安全组允许但ACL拒绝)
快速测试建议
- 在预处理步骤中直接使用RDS的私有IP尝试连接,排除DNS解析的影响
- 临时关闭Pipeline的外部网络隔离(仅用于测试),确认是否能连接RDS,验证是否为公网访问被阻断导致
内容的提问来源于stack exchange,提问作者clay
相关产品推荐
相关产品推荐

