AWS Lambda接入私有RDS后无法调用子Lambda及外部服务问题咨询
解决方案:VPC内Lambda访问私有RDS+公网服务/其他Lambda的配置方案
核心矛盾拆解
你碰到的问题本质是:Lambda加入VPC后默认失去公网访问能力,导致既无法调用外部Lambda,也没法访问AWS托管服务(Textract/Bedrock),但又必须保证它能访问私有RDS。以下是分场景的落地解决办法:
1. 让VPC内的Master Lambda能调用子Lambda
子Lambda完全不需要加入VPC,只要给Master Lambda所在的VPC配置NAT网关即可:
- 在VPC的公有子网创建NAT网关(绑定弹性IP)
- 给Master Lambda所在的私有子网的路由表添加一条路由:
0.0.0.0/0指向NAT网关 - 配置完成后,Master Lambda既能通过VPC内部路由访问RDS,又能通过NAT网关访问公网,正常调用子Lambda
如果想节省NAT网关的成本,也可以给Lambda服务配置Interface类型的VPC端点,直接在VPC内部调用Lambda API,无需走公网。
2. 子Lambda调用Bedrock/Textract的可行性
如果硬要把子Lambda也放进VPC,必须满足以下任一条件,否则调用会直接超时:
- 给子Lambda所在子网配置NAT网关,让它通过NAT访问公网的Bedrock/Textract端点
- 给Textract和Bedrock配置对应的VPC端点:
- Textract支持Interface类型的VPC端点(需确认当前AWS区域是否支持)
- Bedrock也提供VPC端点能力,创建后子Lambda可直接在VPC内部调用
但更简洁的方案是让子Lambda保持默认无VPC配置(即运行在AWS托管的网络中),直接调用托管服务,完全不需要额外配置VPC相关资源。
3. 彻底确保RDS私有性
- 关闭RDS实例的「公网访问」选项,移除绑定的弹性IP
- 配置RDS的安全组,仅允许Master Lambda所在的安全组发起入站流量(端口3306)
- 无需依赖密码防护,从网络层面彻底切断RDS的公网访问路径
内容的提问来源于stack exchange,提问作者MaxS.
相关产品推荐
相关产品推荐

