AWS CLI 使用“--query”选项获取所有匹配的 CloudFront?

问题描述 投票:0回答:1

我使用 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 脚本来过滤掉一些内容,但我不想这样做。

amazon-web-services amazon-cloudfront aws-cli
1个回答
0
投票

问题是您将

Aliases.Items[*]
作为参数传递,该参数是一个数组。然而,在 contains 中,如果我们想在数组中查找元素,那么我们必须使用
@
传递数组的每个元素进行比较。

这是修改后的命令,

aws cloudfront list-distributions --query 'DistributionList.Items[?Aliases.Items[?contains(@, `sandbox`) && contains(@, `domain.com`)]].[{Id:Id}]' --output json
© www.soinside.com 2019 - 2024. All rights reserved.