能否实现Public API Gateway经VPC Link、NLB访问Private API Gateway?
一、原架构的问题排查与修复
你遇到的NLB无法对接Private API Gateway的问题,核心原因有两个:
- Private API Gateway本身不能直接作为NLB目标组的成员,必须通过其VPC Endpoint中转,但手动添加VPC Endpoint的IP存在两个坑:
- AWS会动态维护Private API Gateway VPC Endpoint的IP,手动配置的IP可能随时失效
- 健康检查配置错误:默认NLB的TCP健康检查无法适配API Gateway的HTTP/HTTPS服务,需要调整:
- 将NLB目标组改为HTTP/HTTPS类型
- 在你的Private API Gateway中配置一个专门的健康检查路径(比如
/health),返回200状态码 - 确保NLB的安全组允许访问Private API Gateway VPC Endpoint的443端口,同时VPC Endpoint的安全组允许NLB安全组的入站流量
如果要避免IP变动的问题,可以用CloudFormation/Terraform自动拉取Private API Gateway VPC Endpoint的IP并更新目标组,不过这种方式维护成本较高。
二、更优的替代架构
1. 直接让Public API Gateway对接VPC内后端(跳过Private API Gateway)
既然Private API Gateway的作用是让VPC内服务互调,外部流量可以直接走Public API Gateway + VPC Link对接VPC内的后端服务(Lambda、ECS、EC2等),无需通过Private API Gateway中转。这种架构减少了一层网关,降低复杂度和成本,同时外部流量和内部流量的路由完全隔离,符合你的初始需求。
2. Public API Gateway直接代理Private API Gateway
用Public API Gateway的HTTP集成功能,直接将请求转发到Private API Gateway的域名。需要做以下配置:
- 给Public API Gateway配置VPC Link,指向API Gateway的VPC Endpoint(用于访问Private API Gateway)
- 给Public API Gateway的执行角色添加调用Private API Gateway的权限(
execute-api:Invoke) - 在集成配置中填写Private API Gateway的完整URL(比如
https://{private-api-id}.execute-api.{region}.amazonaws.com/{stage})
这种方式保留了Private API Gateway的内部路由能力,同时通过Public API Gateway对外暴露入口。
3. Lambda中转层
在Public API Gateway后部署VPC内的Lambda函数,由Lambda负责转发请求到对应的Private API Gateway。这种方式的优势是灵活,可以在Lambda中添加路由逻辑、认证校验、日志记录等,而且不需要维护NLB的目标组,只要Lambda在能访问Private API Gateway的VPC子网中即可。
4. 避免App Mesh的轻量路由方案
如果不想为每个Lambda部署Envoy代理,可以考虑用AWS Lambda Extensions实现轻量的路由控制,或者用Amazon API Gateway的API映射功能,将不同的路径映射到不同的Private API Gateway(前提是Public API Gateway能访问这些Private API)。
内容的提问来源于stack exchange,提问作者Matthew Blair

