为何部署在VPC私有子网的Lambda Function URL仍可被调用?
VPC私有子网中Lambda Function URL可调用性疑问
我在AWS控制台从零创建了一个.NET Lambda函数,配置如下:
- 从零构建的.NET函数
- 启用Function URL
- 启用CORS
- 选择NONE认证方式
- 部署至VPC的私有子网
生成的IAM角色包含权限:
- AWSLambdaVPCAccessExecutionRole
- AWSLambdaBasicExecutionRole
该VPC拥有两个公有子网和两个私有子网,所有子网仅关联本地路由(10.0.0.0/16),路由表的「子网关联」标签无显式关联,仅存在隐式本地路由表关联。
疑问:
- 我仍能调用该Lambda的Function URL,这是为什么?
- 此前发现部署在公有子网的Lambda Function URL几乎无法被调用,这两者为何有差异?
- 已知Function URL始终处于VPC外部,是否意味着该函数除其Function URL外,对外部世界完全不可见?
解答
1. 私有子网中Function URL可调用的原因
Lambda Function URL是AWS管理的公网入口端点,它和Lambda函数的执行环境完全分离:
- Function URL本身运行在AWS全局网络中,不属于你的VPC,无论函数部署在公有还是私有子网,这个端点都是公网可达的。
- 调用Function URL时,请求先抵达AWS全局端点,再由AWS内部转发至VPC私有子网内的Lambda执行环境——这个转发过程由AWS负责,不需要你的VPC配置公网路由。只要Lambda能通过VPC本地路由完成自身执行(比如无外部资源依赖),再加上
AWSLambdaVPCAccessExecutionRole权限允许它通过AWS PrivateLink访问控制平面服务(如日志、指标服务),就能正常响应请求。
2. 公有子网中Function URL难以调用的原因
如果Lambda部署在公有子网却无法被调用,核心问题出在公有子网的配置缺失:
- 公有子网默认需要关联带有互联网网关(IGW)的路由表,若只有本地路由,Lambda执行环境将无法访问AWS控制平面服务(比如CloudWatch日志、Lambda服务端点),导致函数无法初始化或运行,最终请求失败。
- 此外,若公有子网的安全组或路由配置限制了Lambda与AWS服务的通信,也会导致Function URL请求无响应。
3. 函数对外部世界的可见性
是的,部署在VPC私有子网的Lambda函数,除了Function URL外,对外部世界完全不可见:
- Lambda执行环境处于私有子网内,无公网IP,也没有通往互联网的路由(你当前配置下也没有NAT网关),无法主动发起对外的公网请求。
- 外部只能通过AWS管理的Function URL端点触发函数,无法直接访问到VPC内的Lambda执行环境。
内容的提问来源于stack exchange,提问作者Matt W
相关产品推荐
相关产品推荐

