如何通过AWS CLI查询AMI及关联EBS卷块设备映射详情
查询指定所有者AWS AMI全量详情(含EBS块设备信息)卡顿解决方案
故障原因
查询卡住、字段获取失败问题由两个核心错误导致:
--owners参数为空:未指定所有者时,AWS CLI会拉取当前身份有权限访问的所有AMI,包括数十万公共社区AMI、AWS市场AMI,数据量极大会直接导致进程卡住- JMESPath查询语法错误:你写的
BlockDeviceMappings:[Ebs:{SnapshotID}]不符合JMESPath语法规范,且字段名大小写错配(API返回字段为SnapshotId而非SnapshotID),会导致解析异常无法正常返回结果
可直接执行的正确命令
将命令中--owners后的self替换为你需要查询的目标所有者标识:查自有账号填self,查AWS官方公共镜像填amazon,查其他第三方账号填对应的12位AWS账号ID,多个所有者用空格分隔即可。命令内置按创建时间排序逻辑,会返回镜像ID、创建时间、镜像名称、是否公共镜像、架构,以及每个绑定EBS卷的快照ID、卷大小、卷类型、实例终止时是否删除卷的全量信息:
aws ec2 describe-images \ --owners self \ --query 'sort_by(Images, &CreationDate)[*].[ImageId, CreationDate, Name, Public, Architecture, BlockDeviceMappings[*].Ebs.[SnapshotId, VolumeSize, VolumeType, DeleteOnTermination]]' \ --output text
可读性优化方案
如果觉得text格式下嵌套的块设备信息不易读,可以换成表格格式输出:
aws ec2 describe-images \ --owners self \ --query 'sort_by(Images, &CreationDate)[*].[ImageId, CreationDate, Name, BlockDeviceMappings[*].Ebs.[SnapshotId, VolumeSize, VolumeType]]' \ --output table
注意事项
- 调用
describe-images接口时必须加--owners或--image-ids过滤条件,无过滤拉取全量镜像列表是该接口卡顿的最常见原因 - AWS EC2 API返回的字段严格遵循小驼峰命名规则,编写查询表达式时注意大小写匹配,否则会出现字段空值问题
- 单个AMI可能绑定多个EBS卷,输出结果中每个镜像会对应多行块设备信息,属于正常情况
内容的提问来源于stack exchange,提问作者Cléber Cavlcanti
相关产品推荐
相关产品推荐

