You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JMESPath查询筛选90天以上的EC2实例并返回指定字段

筛选创建超90天的EC2实例(含ID、启动时间、Name标签)

直接可用的命令

不用混用aws cli和jq,一条纯JMESPath查询就能搞定:

aws ec2 describe-instances \
    --query "Reservations[].Instances[?LaunchTime<='$(date --date='-90 days' '+%Y-%m-%d')' && Tags[?Key=='Name']].[InstanceId, LaunchTime, Tags[?Key=='Name'].Value|[0]]" \
    --output text

输出效果

i-0d1b4afee437442a4  2023-02-25T03:17:00+00:00  MDM-server-01

命令拆解

  1. 实例筛选:

    • LaunchTime<='$(date ...)':只保留启动时间早于90天前的实例
    • && Tags[?Key=='Name']:额外过滤出带有Name标签的实例(不需要强制过滤的话可以删掉这部分)
  2. 字段提取:

    • InstanceId, LaunchTime:直接提取实例ID和启动时间
    • Tags[?Key=='Name'].Value|[0]:先筛选出Key为Name的标签,提取其Value,再用|[0]把数组转成单个字符串(避免返回嵌套数组)

你之前命令的问题

  1. 第一个jq命令:AWS返回的实例数据里没有.Name字段,Name标签存在Tags数组中,所以.Name会返回空值,导致输出里标签位置空白。
  2. 第二个JMESPath命令:Tags[?Key=='Name'].Value本身是数组格式,再加上外层的嵌套索引,最终得到二维数组。添加|[0]就能直接拿到单个标签值。

可选:兼容无Name标签的实例

如果要保留没有Name标签的实例,用N/A填充标签位置,使用这条命令:

aws ec2 describe-instances \
    --query "Reservations[].Instances[?LaunchTime<='$(date --date='-90 days' '+%Y-%m-%d')'].[InstanceId, LaunchTime, (Tags[?Key=='Name'].Value|[0] || 'N/A')]" \
    --output text

内容的提问来源于stack exchange,提问作者Michael Mauney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:12:40