我使用 AWS list-distributions CLI 命令获取我们系统中的所有 ClodFront。例如
$ aws cloudfront list-distributions
{
"DistributionList": {
"Items": [
{
"Id": "E2DMQDAA2UTH",
"ARN": "arn:aws:cloudfront::0123456789:distribution/E2DMQDAA2UTH",
"Status": "Deployed",
"LastModifiedTime": "2024-07-08T09:31:24.859000+00:00",
"DomainName": "abcdefghijk.cloudfront.net",
"Aliases": {
"Quantity": 1,
"Items": [
"sandbox.images.domain.com"
]
},
"Origins": {
...
},
...
},
{
// more items
}
}
}
}
使用
--query
选项获取包含 both
DistributionList.Items.Aliases
和 sandbox
的所有 domain.com
的 CLI 命令是什么?我尝试过以下方法
aws cloudfront list-distributions --query 'DistributionList.Items[?contains(Aliases.Items[*], `sandbox`) && contains(Aliases.Items[*], `domain.com`)].[{Id:Id}]' --output json
但是我明白了
In function contains(), invalid type for value: None, expected one of: ['array', 'string'], received: "null"
我想要做的事情的正确语法是什么?我知道我可以编写一个管道/Groovy 脚本来过滤掉一些内容,但我不想这样做。
问题是您将
Aliases.Items[*]
作为参数传递,该参数是一个数组。然而,在 contains 中,如果我们想在数组中查找元素,那么我们必须使用 @
传递数组的每个元素进行比较。
这是修改后的命令,
aws cloudfront list-distributions --query 'DistributionList.Items[?Aliases.Items[?contains(@, `sandbox`) && contains(@, `domain.com`)]].[{Id:Id}]' --output json