求助:用AWS CLI查询EC2实例根卷大小及剩余空间(表格形式)
解决方法
1. 先修正命令获取根卷与实例基础信息
你原来的命令存在语法错误,比如Attachments[0]."Name=instance-id"写法有误,VolumeType.多了个多余的点。先改用这个能直接输出表格的命令,拿到实例名称、根卷总大小等基础信息:
aws ec2 describe-instances --query 'Reservations[*].Instances[*].{实例名称:Tags[?Key==`Name`].Value|[0], 实例ID:InstanceId, 根卷ID:BlockDeviceMappings[?DeviceName==RootDeviceName].Ebs.VolumeId|[0], 根卷总大小(GB):BlockDeviceMappings[?DeviceName==RootDeviceName].Ebs.VolumeSize|[0]}' --output table
2. 获取根卷剩余空间
AWS CLI的describe-volumes拿不到剩余空间——这是实例操作系统层面的文件系统信息,得用AWS Systems Manager(SSM)远程执行命令来获取,前提是你的EC2实例已安装SSM Agent,且实例的IAM角色拥有AmazonSSMManagedInstanceCore权限。
Windows实例(C盘)
执行以下命令批量查询所有Windows实例的C盘剩余空间:
aws ssm send-command \ --document-name "AWS-RunPowerShellScript" \ --targets "Key=instanceids,Values=$(aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' --output text | tr '\t' ',')" \ --parameters commands="Get-Volume -DriveLetter C | Select-Object DriveLetter, @{Name='总大小(GB)';Expression={[math]::Round($_.Size/1GB,2)}}, @{Name='剩余空间(GB)';Expression={[math]::Round($_.SizeRemaining/1GB,2)}}" \ --output text
Linux实例(根分区)
如果是Linux实例,把命令替换为:
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --targets "Key=instanceids,Values=$(aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' --output text | tr '\t' ',')" \ --parameters commands="df -h / | awk 'NR==2 {print \"根分区:\" \$1, \"总大小:\" \$2, \"剩余空间:\" \$4}'" \ --output text
3. 合并成一张表(可选)
如果需要把基础信息和剩余空间整合到同一张表格里,可以用脚本处理:比如用jq将两个命令的输出导出为JSON后合并,或者写个简单的Python脚本完成结果整合。
注意事项
- 未安装SSM Agent的实例,要么手动登录查询剩余空间,要么先给实例安装SSM Agent。
- 必须确保实例的IAM角色拥有SSM访问权限,否则无法发送远程命令。
内容的提问来源于stack exchange,提问作者JAD
相关产品推荐
相关产品推荐

