Eu uso o comando CLI AWS list-distributions para obter todos os ClodFronts em nosso sistema. Por exemplo
$ 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
}
}
}
}
Qual é o comando CLI para usar a --query
opção para obter tudo DistributionList.Items.Aliases
que contém ambos sandbox
e domain.com
? Eu tentei o seguinte
aws cloudfront list-distributions --query 'DistributionList.Items[?contains(Aliases.Items[*], `sandbox`) && contains(Aliases.Items[*], `domain.com`)].[{Id:Id}]' --output json
Mas eu entendo
In function contains(), invalid type for value: None, expected one of: ['array', 'string'], received: "null"
Qual é a sintaxe correta para o que eu quero fazer? Eu sei que posso escrever um script pipeline/Groovy para filtrar as coisas, mas não quero fazer isso.
O problema é que você está passando
Aliases.Items[*]
como argumento um array. No entanto, em contains se quisermos encontrar um elemento em um array, então temos que passar cada elemento do array para comparação usando@
.Aqui está o comando modificado,