AWS Lambda(Java)无法连接Parameter Store问题求助
排查私有子网中Lambda访问SSM Parameter Store超时的问题
看起来你的Lambda运行在私有子网中,虽然已经开放了安全组和NACL的所有规则,但还是遇到了连接SSM服务超时的问题——这大概率是私有子网的网络路由配置问题,因为私有子网默认没有直接访问公网的能力,我帮你梳理几个核心排查方向:
1. 检查私有子网的路由表是否配置了NAT网关
私有子网内的资源要访问公网(比如SSM的公网端点),必须通过NAT网关转发。你需要:
- 确认你的VPC中已经创建了NAT网关(注意NAT网关要部署在公有子网)
- 检查Lambda所在私有子网的路由表,是否存在一条
0.0.0.0/0的路由,目标指向你的NAT网关
如果这条路由缺失,Lambda就无法通过公网访问SSM服务,自然会超时。
2. 考虑使用SSM的VPC端点(无需公网)
如果不想依赖NAT网关,你可以创建SSM的Interface类型VPC端点,这样Lambda可以在VPC内部直接和SSM服务通信,完全不需要走公网。配置要点:
- 在VPC中创建针对
ssm.eu-central-1.amazonaws.com的Interface端点 - 确保端点和Lambda所在子网关联,并且路由表中添加了指向该端点的路由
- 安全组允许Lambda访问端点的443端口
3. 验证子网的公有/私有属性
有时候可能会误将Lambda部署到没有IGW的公有子网,或者私有子网的路由配置错误。你可以:
- 检查子网的路由表,如果是公有子网,应该有指向Internet Gateway(IGW)的
0.0.0.0/0路由;如果是私有子网,应该指向NAT网关 - 确认Lambda的网络配置中,确实选择了正确的私有子网
顺便提个代码小优化
虽然这不是超时的原因,但你的代码中获取密码的方式可能有问题:
// 原代码 password = parameterResult.getParameter().toString(); // 正确的取值方式应该是 password = parameterResult.getParameter().getValue();
toString()会返回Parameter对象的字符串表示,而不是存储的密码值,用getValue()才能拿到实际的参数内容。
内容的提问来源于stack exchange,提问作者CC.
相关产品推荐
相关产品推荐

