错误:创建 EC2 实例时出错:子网 (subnet-abc123) 中的 IP 地址不足,无法创建新实例
Error: error creating EC2 Instance: insufficient IP addresses in subnet (subnet-abc123) when creating a new instance
ID: terraform/insufficient-ip-addresses-in-subnet
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Terraform v1.5 | active | — | — | — |
| Terraform v1.6 | active | — | — | — |
| Terraform v1.7 | active | — | — | — |
| AWS Provider v5.0 | active | — | — | — |
根因分析
AWS 子网已耗尽可用 IP 地址,通常是由于过多的 ENI 或实例消耗了 CIDR 范围,或者子网的 CIDR 块太小。
English
The AWS subnet has exhausted its available IP addresses, often due to too many ENIs or instances consuming the CIDR range, or the subnet's CIDR block being too small.
官方文档
https://docs.aws.amazon.com/vpc/latest/userguide/subnet-sizing.html解决方案
-
Increase the subnet CIDR block size: update `cidr_block = "10.0.1.0/24"` to a larger range like `10.0.1.0/23` (requires recreating the subnet) or add a new subnet with a larger CIDR.
-
Use `aws ec2 describe-subnets --subnet-ids subnet-abc123 --query 'Subnets[0].AvailableIpAddressCount'` to check available IPs, then reduce instance count or use a different subnet with free IPs.
-
Implement a lifecycle policy to terminate idle instances or use auto-scaling with a minimum/maximum size to free IPs dynamically.
无效尝试
常见但无效的做法:
-
Increasing the instance count in the Terraform configuration without adjusting the subnet CIDR
95% 失败
More instances will consume more IPs, worsening the shortage; Terraform will fail with the same error for each new instance.
-
Deleting unused instances manually via AWS console but not updating Terraform state
70% 失败
Terraform state still tracks deleted instances, causing drift; subsequent apply may try to recreate them, consuming IPs again.
-
Changing the subnet ID to a different existing subnet without verifying its IP availability
60% 失败
The new subnet may also have limited IPs; without checking available addresses, the error may simply move to another subnet.