首页 > 解决方案 > 使用 AWS CLI 查询语言进行分组和排序

问题描述

我正在尝试列出我的所有 ec2 实例和用于旋转该实例的图像。

aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].[InstanceId,ImageId]' \
    --output=table

这给了我很好的细节。但我有很多实例和图像。想根据 ImageId 对我的实例进行分组,并针对它计算实例数。有什么建议么?

标签: amazon-web-servicesamazon-ec2aws-cli

解决方案


据我所知,没有一种简单的方法可以直接通过 AWS 的 CLI 执行此操作。但是,AWS 会导出 JSON(除非您更改输出,就像您在上面的命令中所做的那样),并且 JSON 在大多数语言中都非常容易操作。例如,下面是一个使用 bash 的“jq”实用程序来做你想做的事情的例子:

aws ec2 describe-instances \
    --region=us-east-1 \
    | jq -s 'map(.Reservations[].Instances[].ImageId) \
    | group_by(.) \
    | map({Image: .[0], Count: length})'

这是使用最新版本的 jq,您可以使用apt-get install jqyum install jq根据您的 linux 操作系统获得它。

它正在做的是:

  1. 通过命令行检索所有实例信息,以完整的 JSON 格式(根本不使用他们的 CLI 进行过滤,但如果你愿意,你可以这样做)

  2. 使用 JQ 从本质上解析出所有 ImageID(您将识别出过滤器的那一部分,因为亚马逊的 CLI 本质上使用 JQ 的过滤器语法)

  3. 将所有图像按图像 ID 分组到数组中

  4. 创建一个图像 ID 到数组长度的映射(然后将返回一个 JSON 对象映射 ImageID 到它的计数。


推荐阅读