如何查询AWS Elastic IP配额及Terraform可创建剩余数量
查询AWS指定区域Elastic IP配额、已使用及剩余数量
问题分析
你之前的命令仅统计了NetworkInterfaceId为空的EIP,既漏掉了绑定到弹性网络接口(ENI)的EIP,也错误混淆了"闲置EIP"和"剩余配额"的概念——实际上只要EIP被分配出去(无论是否绑定资源),就会占用配额,所以原统计逻辑完全不符合AWS EIP配额的计算规则。
正确解决方案
以下是准确获取配额、已使用量、剩余量的命令:
1. 获取EIP配额(VPC环境,默认配额为5)
EIP_QUOTA=$(AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN aws service-quotas get-service-quota --service-code ec2 --quota-code L-0263D0A3 --region "$REGION" --query "Quota.Value" --output text)
注:如果是经典EC2平台的EIP配额,可替换配额代码为
L-1216C47A,当前主流使用VPC环境,优先用上述命令。
2. 获取已使用的EIP数量(所有已分配的EIP,包含绑定/未绑定资源的)
USED_EIPS=$(AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN aws ec2 describe-addresses --region "$REGION" --query "length(Addresses)" --output text)
3. 计算剩余可创建的EIP数量
AVAILABLE_EIPS=$((EIP_QUOTA - USED_EIPS))
完整示例脚本片段
REGION="us-east-1" # 获取配额 EIP_QUOTA=$(AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN aws service-quotas get-service-quota --service-code ec2 --quota-code L-0263D0A3 --region "$REGION" --query "Quota.Value" --output text) # 获取已使用数量 USED_EIPS=$(AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN aws ec2 describe-addresses --region "$REGION" --query "length(Addresses)" --output text) # 计算剩余数量 AVAILABLE_EIPS=$((EIP_QUOTA - USED_EIPS)) # 输出结果 echo "EIP配额: $EIP_QUOTA" echo "已使用EIP数量: $USED_EIPS" echo "剩余可创建EIP数量: $AVAILABLE_EIPS"
关键说明
- AWS EIP配额统计的是已分配的EIP总数,只要完成分配动作就占用配额,与是否绑定EC2实例、ENI等资源无关。
- 若你需要统计"未绑定任何资源的闲置EIP数量",可使用以下命令,但该数值不能代表剩余配额:
UNATTACHED_EIPS=$(AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN aws ec2 describe-addresses --region "$REGION" --query "length(Addresses[?InstanceId == null && NetworkInterfaceId == null])" --output text)
内容的提问来源于stack exchange,提问作者Mithilesh Indurkar
相关产品推荐
相关产品推荐

