如何通过AWS CLI按设备名排序XYZ集群EC2实例的卷信息
需求与问题
需要获取XYZ集群下20台EC2实例的列表,以及对应的卷信息(设备名、卷ID),但当前查询输出中不同实例的卷顺序不一致,要求将输出中的设备按设备名排序。
现有命令
aws ec2 describe-instances --filters 'Name=tag:cluster,Values=xyz' --query "Reservations[].Instances[].[InstanceId,BlockDeviceMappings[].[DeviceName,Ebs.VolumeId][]]" --output text | paste -d" " - -
当前输出
-- This is how it gets it i-abc /dev/sdc vol-sdc /dev/sdb vol-sdb /dev/sdd vol-sdad i-def /dev/sdd vol-sdd /dev/sdb vol-sdb /dev/sdc vol-sdac
期望输出
-- how I want it i-abc /dev/sdb vol-sdb /dev/sdc vol-sdc /dev/sdd vol-sdad i-def /dev/sdb vol-sdb /dev/sdc vol-sdac /dev/sdd vol-sdd
解决方案
直接在AWS CLI的查询阶段对块设备按设备名排序,无需后续管道处理:
修改后的命令
aws ec2 describe-instances --filters 'Name=tag:cluster,Values=xyz' --query "Reservations[].Instances[].[InstanceId, sort_by(BlockDeviceMappings, &DeviceName)[].[DeviceName,Ebs.VolumeId]]" --output text
说明
- 用
sort_by(BlockDeviceMappings, &DeviceName)对实例的块设备映射按DeviceName升序排序,排序逻辑直接嵌入AWS CLI的查询语句中,一步到位。 - 移除原命令中的
paste管道,--output text会自动将排序后的设备信息按空格分隔,输出格式完全匹配需求。
测试后输出的设备名将统一按/dev/sdb→/dev/sdc→/dev/sdd的顺序排列,符合期望格式。
内容的提问来源于stack exchange,提问作者nmakb
相关产品推荐
相关产品推荐

