如何使用AWS CLI查询ID不在指定列表中的所有EC2实例?
用AWS CLI筛选闲置EC2实例ID
完全可以实现,以下是具体操作步骤:
1. 准备在用实例ID列表
把已知的500个在用实例ID保存到文本文件(比如active-instances.txt),每行一个ID,格式示例:
i-0abc123def456ghi7 i-0jkl890mno123pqr4 ...
2. 获取所有EC2实例ID并筛选闲置实例
单区域场景
如果所有实例都在同一个AWS区域,直接用以下命令完成筛选:
# 获取当前区域所有EC2实例ID并排序 aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' --output text | tr '\t' '\n' | sort > all-instances.txt # 对比筛选出不在在用列表中的闲置实例ID comm -23 <(sort all-instances.txt) <(sort active-instances.txt) > idle-instances.txt
也可以合并成一条命令,无需生成中间文件:
comm -23 <(aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' --output text | tr '\t' '\n' | sort) <(sort active-instances.txt)
多区域场景
如果实例分布在多个AWS区域,用脚本遍历所有区域并收集闲置实例:
#!/bin/bash # 定义在用实例文件路径 ACTIVE_FILE="active-instances.txt" # 定义闲置实例输出文件路径 IDLE_FILE="idle-instances-all-regions.txt" # 清空输出文件 > $IDLE_FILE # 遍历所有AWS区域 for region in $(aws ec2 describe-regions --query 'Regions[*].RegionName' --output text | tr '\t' '\n') do echo "正在处理区域: $region" # 获取当前区域所有实例ID,对比后追加到输出文件 comm -23 <(aws ec2 describe-instances --region $region --query 'Reservations[*].Instances[*].InstanceId' --output text | tr '\t' '\n' | sort) <(sort $ACTIVE_FILE) >> $IDLE_FILE done echo "闲置实例ID已保存到 $IDLE_FILE"
注意事项
- 确保你的AWS CLI已配置拥有
ec2:DescribeInstances权限的凭证 - 若需指定特定区域,在
aws ec2 describe-instances命令后添加--region <区域名>参数(例如--region us-east-1) comm命令依赖排序后的文件,因此必须对两个列表执行sort操作
内容的提问来源于stack exchange,提问作者Skuti
相关产品推荐
相关产品推荐

