如何动态配置AWS Lambda连接私有隔离子网RDS且无需频繁修改CDK脚本
实现方案
核心逻辑是将VPC侧固定网络资源一次性通过CDK部署完成,通过参数存储做CDK和Serverless Framework的配置解耦,后续Lambda增删改完全不需要调整CDK脚本。
一、CDK侧一次性配置(仅需部署1次,后续无需改动)
不要把Lambda部署到现有公有子网或RDS所在的私有隔离子网:公有子网部署Lambda无法在不绑定EIP的情况下满足公网出站需求,且难以阻断公网主动入站;RDS所在的隔离子网无公网出口路由,会导致Lambda失去出站能力。
- 在VPC A中单独划出至少2个可用区的私有出口子网作为Lambda专用部署网段:
- 子网路由表配置:VPC本地网段路由指向本地,默认0.0.0.0/0路由指向绑定EIP的NAT网关,满足公网出站需求
- 为该子网绑定专用Lambda安全组:入站规则仅放行同VPC内信任资源、API Gateway私网调用的流量,完全拒绝所有公网CIDR段的主动入站请求;出站规则放通到RDS端口的访问流量、放通公网出站流量
- 调整RDS实例绑定的安全组,添加入站规则:放行上述Lambda专用安全组对应数据库端口的访问,确保Lambda私网可连RDS
- 将上述私有出口子网ID列表、Lambda专用安全组ID存入SSM参数存储,使用固定路径参数(例如
/shared/vpc/lambda-subnet-ids、/shared/vpc/lambda-security-group-id),参数后续不需要修改
如果想压缩成本,且Lambda的公网出站需求仅为访问AWS公共服务(CloudWatch日志、S3等),可以不用部署NAT网关:直接在VPC A中配置对应服务的VPC终端节点,路由关联到RDS所在的私有隔离子网,后续把Lambda部署到该隔离子网即可,同样满足出站+无公网入站的要求。
二、Serverless Framework侧适配(无CDK依赖,自动拉取配置)
直接在现有Serverless配置中增加VPC关联逻辑,部署时自动从SSM拉取预先配置好的网络参数,不需要硬编码资源ID,后续不管Lambda怎么调整,只要网络架构不变就不用碰CDK脚本:
- 给Serverless部署的执行角色添加上必要的权限:创建/删除/查询弹性网卡权限、SSM参数读取权限
- 在
serverless.yml的provider配置段动态引用SSM参数,示例配置片段:
provider: name: aws runtime: 你实际使用的运行时 vpc: securityGroupIds: - ${ssm:/shared/vpc/lambda-security-group-id} subnetIds: ${ssm:/shared/vpc/lambda-subnet-ids} iam: role: statements: - Effect: Allow Action: - ec2:CreateNetworkInterface - ec2:DescribeNetworkInterfaces - ec2:DeleteNetworkInterface - ssm:GetParameter Resource: "*"
- 配置完成后,所有通过Serverless部署的Lambda会自动接入预留的专用子网:
- 与RDS同属VPC私网,安全组放通数据库端口,可直接私网访问RDS
- 子网路由通过NAT网关/VPC终端节点实现出站访问能力
- 安全组未放通公网入站规则,公网无法主动发起对Lambda的访问,仅能通过API Gateway正常触发
- 现有API Gateway、S3+CloudFront的前端部署逻辑完全不需要改动,Lambda和API Gateway之间的调用走AWS内部链路,不会额外暴露公网访问面。
内容的提问来源于stack exchange,提问作者Manav D
相关产品推荐
相关产品推荐

