如何列出所有产生AWS账单的活跃资源?
找出AWS所有区域中产生计费的资源
以下是几种直接定位计费资源的方法,覆盖所有区域且排除默认免费资源:
方法一:用AWS CLI批量遍历查询
通过脚本批量检查所有区域的核心计费资源,避免手动逐个区域操作:
1. 获取所有AWS区域
执行命令获取完整区域列表:aws ec2 describe-regions --query "Regions[].RegionName" --output text
2. 批量查询脚本
创建Shell脚本(比如check_billable_resources.sh),自动遍历所有区域并列出计费资源:
#!/bin/bash # 获取所有AWS区域 REGIONS=$(aws ec2 describe-regions --query "Regions[].RegionName" --output text) for REGION in $REGIONS; do echo "=== 区域: $REGION ===" # 运行中的EC2实例(停止的实例不计费,但EBS卷仍会计费) echo "运行中的EC2实例:" aws ec2 describe-instances --region $REGION --filters "Name=instance-state-name,Values=running" --query "Reservations[].Instances[].[InstanceId,InstanceType]" --output table || echo "无" # EBS卷(包括未挂载的,只要存在就会计费) echo "EBS卷:" aws ec2 describe-volumes --region $REGION --query "Volumes[].[VolumeId,Size,VolumeType]" --output table || echo "无" # 个人拥有的EC2快照(默认快照和共享快照不计费,自有快照会占用存储计费) echo "自有EC2快照:" aws ec2 describe-snapshots --region $REGION --owner-ids self --query "Snapshots[].[SnapshotId,VolumeSize]" --output table || echo "无" # 未关联的弹性IP(关联到实例的免费,未关联的会按小时计费) echo "未关联的弹性IP:" aws ec2 describe-addresses --region $REGION --filters "Name=instance-id,Values=[]" --query "Addresses[].[PublicIp,AllocationId]" --output table || echo "无" echo "" done # S3存储桶(全局服务,存储超出5GB免费额度会计费) echo "=== S3存储桶 ===" aws s3 ls || echo "无"
执行前确保已配置AWS CLI权限,然后运行:chmod +x check_billable_resources.sh && ./check_billable_resources.sh
方法二:用Cost Explorer快速定位计费项
- 打开AWS控制台的「Cost Explorer」,进入「资源分配」视图
- 在筛选条件中选择「服务」,勾选EC2、S3、EBS等计费服务
- 按「区域」分组,查看每个区域的资源费用,直接定位产生账单的资源
- 建议开启「成本异常检测」,设置免费套餐额度告警,提前收到费用超支通知
方法三:AWS Config自定义规则(可选)
如果已启用AWS Config(免费套餐内有一定免费额度),可以创建自定义规则标记计费类资源:
- 规则示例:检测运行中的EC2实例、未挂载的EBS卷、自有快照等
- 触发后自动标记这类资源,方便定期检查
补充说明
你提到的网络ACL、DHCP选项集、默认VPC、安全组等默认资源确实不会产生计费,无需纳入检查范围。
内容的提问来源于stack exchange,提问作者Amartya Sinha
相关产品推荐
相关产品推荐

