# 错误：创建 EC2 实例时出错：子网 (subnet-abc123) 中的 IP 地址不足，无法创建新实例

- **ID:** `terraform/insufficient-ip-addresses-in-subnet`
- **领域:** terraform
- **类别:** resource_error
- **错误码:** `InsufficientIPAddressesInSubnet`
- **验证级别:** ai_generated
- **修复率:** 85%

## 根因

AWS 子网已耗尽可用 IP 地址，通常是由于过多的 ENI 或实例消耗了 CIDR 范围，或者子网的 CIDR 块太小。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Terraform v1.5 | active | — | — |
| Terraform v1.6 | active | — | — |
| Terraform v1.7 | active | — | — |
| AWS Provider v5.0 | active | — | — |

## 解决方案

1. ```
   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.
   ```
2. ```
   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.
   ```
3. ```
   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** — More instances will consume more IPs, worsening the shortage; Terraform will fail with the same error for each new instance. (95% 失败率)
- **Deleting unused instances manually via AWS console but not updating Terraform state** — Terraform state still tracks deleted instances, causing drift; subsequent apply may try to recreate them, consuming IPs again. (70% 失败率)
- **Changing the subnet ID to a different existing subnet without verifying its IP availability** — The new subnet may also have limited IPs; without checking available addresses, the error may simply move to another subnet. (60% 失败率)
