使用 JMESPath 计算数组中实例的数量
Count the numer of instance in an array using JMESPath
在这个问题底部的示例 JSON 中,如何使用 JMESPath 计算数组 "Tags"
中 key/value 对的数量?
根据 JMESPath documentation,我可以使用 count()
函数 -
For example, the following expression creates an array containing the total number of elements in the foo object followed by the value of foo["bar"].
但是,文档似乎不正确。使用 JMESPath 网站,查询 Reservations[].Instances[].[count(@), Tags]
产生结果 [ [ null ] ]
。然后我通过 AWS 命令行测试并返回错误 -
Unknown function: count()
实际上是否有使用 JMESPath 执行此操作的方法?
例子JSON-
{
"Reservations": [
{
"Instances": [
{
"InstanceId": "i-asdf1234",
"InstanceName": "My Instance",
"Tags": [
{
"Value": "Value1",
"Key": "Key1"
},
{
"Value": "Value2",
"Key": "Key2"
},
{
"Value": "Value3",
"Key": "Key3"
},
{
"Value": "Value4",
"Key": "Key4"
}
]
}
]
}
]
}
这里的答案是 JMESPath 文档令人震惊,并且出于某种原因我看到了过时的文档(检查屏幕右下角以查看您正在查看的版本。
我可以使用 length()
函数做我需要做的事 -
Reservations[].Instances[].Tags[] | length(@)
我设法将这种长度 length(Tags[*])
的用法合并到一个更大的语句中,我认为它很有用并想分享:
aws ec2 describe-instances --region us-west-2 --query 'Reservations[*].Instances[*].{id: InstanceId, ami_id: ImageId, type: InstanceType, tag_count: length(Tags[*])}' --profile prod --output table;
--------------------------------------------------------------------
| DescribeInstances |
+--------------+-----------------------+------------+--------------+
| ami_id | id | tag_count | type |
+--------------+-----------------------+------------+--------------+
| ami-abc123 | i-redacted1 | 1 | m3.medium |
| ami-abc456 | i-redacted2 | 7 | m3.xlarge |
| ami-abc789 | i-redacted3 | 12 | t2.2xlarge |
+--------------+-----------------------+------------+--------------+
在这个问题底部的示例 JSON 中,如何使用 JMESPath 计算数组 "Tags"
中 key/value 对的数量?
根据 JMESPath documentation,我可以使用 count()
函数 -
For example, the following expression creates an array containing the total number of elements in the foo object followed by the value of foo["bar"].
但是,文档似乎不正确。使用 JMESPath 网站,查询 Reservations[].Instances[].[count(@), Tags]
产生结果 [ [ null ] ]
。然后我通过 AWS 命令行测试并返回错误 -
Unknown function: count()
实际上是否有使用 JMESPath 执行此操作的方法?
例子JSON-
{
"Reservations": [
{
"Instances": [
{
"InstanceId": "i-asdf1234",
"InstanceName": "My Instance",
"Tags": [
{
"Value": "Value1",
"Key": "Key1"
},
{
"Value": "Value2",
"Key": "Key2"
},
{
"Value": "Value3",
"Key": "Key3"
},
{
"Value": "Value4",
"Key": "Key4"
}
]
}
]
}
]
}
这里的答案是 JMESPath 文档令人震惊,并且出于某种原因我看到了过时的文档(检查屏幕右下角以查看您正在查看的版本。
我可以使用 length()
函数做我需要做的事 -
Reservations[].Instances[].Tags[] | length(@)
我设法将这种长度 length(Tags[*])
的用法合并到一个更大的语句中,我认为它很有用并想分享:
aws ec2 describe-instances --region us-west-2 --query 'Reservations[*].Instances[*].{id: InstanceId, ami_id: ImageId, type: InstanceType, tag_count: length(Tags[*])}' --profile prod --output table;
--------------------------------------------------------------------
| DescribeInstances |
+--------------+-----------------------+------------+--------------+
| ami_id | id | tag_count | type |
+--------------+-----------------------+------------+--------------+
| ami-abc123 | i-redacted1 | 1 | m3.medium |
| ami-abc456 | i-redacted2 | 7 | m3.xlarge |
| ami-abc789 | i-redacted3 | 12 | t2.2xlarge |
+--------------+-----------------------+------------+--------------+