如何使用JMESPath

时间:2019-12-23 12:47:42

标签: aws-cli jmespath

我尝试按ImageId对来自AWS CLI的输出进行排序,并在下面执行了命令。

aws ec2 describe-images --profile xxxxxxxxxx \ --filter Name=tag:Name,Values=Backup*some-string* \ --query "Images[*].[Tags[?Key=='Name'].Value[]|[0],ImageId]"

输出为:

[
    [
        "Backup-20191215T174530Z-utc-some-string",
        "ami-004"
    ],
    [
        "Backup-20191219T174631Z-utc-some-string",
        "ami-002"
    ],
    [
        "Backup-20191208T174534Z-utc-some-string",
        "ami-001"
    ],
    [
        "Backup-20191222T174530Z-utc-some-string",
        "ami-003"
    ],
    [
        "Backup-20191221T174530Z-utc-some-string",
        "ami-005"
    ]
]

我发现JMESPath的sort_by函数可能是一个解决方案,但这很难理解。

2 个答案:

答案 0 :(得分:0)

想法是,在下面的解决方案中,我首先通过ImageId对输出进行排序,然后应用投影。

aws ec2 describe-images --filter Name=tag:Environment,Values=Staging --output json --query "(sort_by(Images[], &ImageId))[*].[ImageId, Tags[?Key=='Environment'].Value | [0]]"

答案 1 :(得分:0)

aws ec2 describe-images --profile xxxxxxxxxx \
--filter Name=tag:Name,Values=Backup*some-string* \
--query "sort_by(Images[*].[Tags[?Key=='Name'].Value[]|[0],ImageId], &[0]"

aws ec2 describe-images --profile xxxxxxxxxx \
--filter Name=tag:Name,Values=Backup*some-string* \
--query "Images[*].[Tags[?Key=='Name'].Value[]|[0],ImageId] | sort_by(@, &[0])"

对我来说很好。需要&(表达式类型运算符)。