多环境AWS VPC架构优化:规避Elastic IP配额限制方案咨询
Hey Abdul, let's break down how to fix that EIP quota issue you're facing with your multi-environment AWS VPC setup. The core problem here is that each environment is using 3 EIPs (one per NAT Gateway), and with 4 environments, you're looking at 12 EIPs—way over the default 5 per-region quota. Here are the most practical, scalable solutions:
1. 共享NAT Gateway给非生产环境
For dev and test environments (where strict isolation isn't always critical), you can share a single set of NAT Gateways across both. This cuts your EIP usage from 3×2=6 to just 3 for those two environments.
Terraform实现思路:
- 单独创建一个
shared_nat模块,用来部署3个NAT Gateway(每个可用区一个)及其关联的EIP。 - 在dev和test的VPC配置中,不再创建各自的NAT Gateway,而是把私有子网的路由表指向这些共享的NAT Gateway。
- 记得用Terraform工作区或者独立状态文件,把共享资源和环境专属资源分开管理。
路由表关联示例代码:
resource "aws_route_table_association" "dev_private_subnet" { count = length(var.private_subnet_ids) subnet_id = var.private_subnet_ids[count.index] route_table_id = aws_route_table.shared_nat_route_table.id }
2. 每个环境只用1个NAT Gateway(跨AZ复用)
如果非生产环境可以接受轻微的跨可用区延迟,你可以每个环境只部署1个NAT Gateway(放在单个可用区),而不是3个。这样每个环境只占用1个EIP,4个环境总共只用4个EIP,完全在配额范围内。
注意事项:
- 对于pre-prod和prod环境,你可能还是需要3个NAT Gateway来保证可用区冗余,但dev/test可以安全使用这种方案。
- 在Terraform中,可以用
var.enable_multi_az_nat这样的变量来控制条件创建:dev/test设为false,prod/pre-prod设为true。
3. 集中化出口流量(使用Transit Gateway)
如果考虑长期扩展性(比如后续还要加更多环境),可以搭建一个集中式出口VPC,在里面部署3个NAT Gateway,然后通过Transit Gateway把所有环境的VPC连接到这个出口VPC。这样不管你部署多少个环境,永远只需要3个EIP。
Terraform实现步骤:
- 创建Transit Gateway,然后把出口VPC、dev、test、pre-prod、prod的VPC都挂载上去。
- 在出口VPC中创建路由表,把互联网方向的流量指向NAT Gateway。
- 在每个环境的私有子网路由表中,把所有互联网方向的流量指向Transit Gateway。
- 配置Transit Gateway的路由表,把这些流量转发到出口VPC。
这种方案还能简化出口流量管控——你可以在出口VPC中添加WAF或者流量检测工具,统一监控所有环境的 outbound 流量。
4. 临时方案:申请EIP配额提升
如果你需要快速解决问题,同时慢慢重构架构,可以通过AWS控制台申请EIP配额提升(Support > Create Case > Service Limit Increase)。AWS通常会批准合理的配额提升,但这只是临时的权宜之计——你还是要为更多的NAT Gateway支付更高的费用。
成本优化提醒:
别忘了NAT Gateway是按小时+流量收费的。共享NAT Gateway或者减少数量,不仅能解决配额问题,还能降低每月的AWS账单。
内容的提问来源于stack exchange,提问作者Basith




