#json #amazon-web-services #tags #jq #aws-cli
Вопрос:
Я пытаюсь запустить вызов api, чтобы найти список ресурсов AWS, у которых нет правильных тегов, и получить вывод в файл json:
Имя: «Неиспользуемое» имя в разрешении = ложь
aws resourcegroupstaggingapi get-resources --tags-er-page 100 | jq '.ResourceTagMappingList{} | select(contains({Tags: [{Key: "Name"}, [{Key: "Name in Resolve"}]}))' > tag.json
Но он дает список всех тегов вместе с тегами «Имя» и «Имя в разрешении». Я хочу отфильтровать вывод только с помощью этих 2 тегов со значениями
Фактические Результаты:
{
"ResourceARN":"arn:aws:backup:$Region:$AccountId:recovery-point:xxxxxxxx",
"Tags": [
{
"Key: "Name",
"Value": "eks-efs-non-prod"
},
{
"Key": "Deptt"
"Value": "XXX"
},
{
"Key": "BusinessUnit"
"Value": "XXX"
},
{
"Key": "Name in Resolve"
"Value": "True"
},
{
"Key": "SysOwner"
"Value": "XXX"
},
{
"Key": "IT Director"
"Value": "Ankur K"
}
]
}
{
"ResourceARN":"arn:aws:backup:$Region:$AccountId:recovery-point:xxxxxxxx",
"Tags": [
{
"Key: "Name",
"Value": "Unused"
},
{
"Key": "Deptt"
"Value": "XXX"
},
{
"Key": "BusinessUnit"
"Value": "XXX"
},
{
"Key": "Name in Resolve"
"Value": "false"
},
{
"Key": "SysOwner"
"Value": "XXX"
},
{
"Key": "IT Director"
"Value": "Ankur K"
}
]
}
Ожидаемые Результаты:
{
"ResourceARN":"arn:aws:backup:$Region:$AccountId:recovery-point:xxxxxxxx",
"Tags": [
{
"Key: "Name",
"Value": "eks-efs-non-prod"
},
{
"Key": "Name in Resolve"
"Value": "True"
}
]
}
{
"ResourceARN":"arn:aws:backup:$Region:$AccountId:recovery-point:xxxxxxxx",
"Tags": [
{
"Key: "Name",
"Value": "Unused"
},
{
"Key": "Name in Resolve"
"Value": "false"
}
]
}
Комментарии:
1. На какие ресурсы AWS вы ссылаетесь. AWS имеет множество сервисов и множество ресурсов.
2. Это для всех тех сервисов aws, у которых отсутствуют теги с именем тега и его значением
3. 1. JSON, который вы показали, не совсем корректен. Кроме того, было бы полезно ознакомиться с некоторыми дополнительными сведениями о результатах выполнения команды aws. 2. Показанная команда jq также (очевидно) недействительна. Это результат опечатки?
4. Пожалуйста, отредактируйте вопрос, чтобы предоставить входные данные, которые должны привести к предоставленным вами выводам, как это требуется.
Ответ №1:
Образец JSON содержит некоторые небольшие ошибки, но при его использовании (с исправлениями) в качестве входных данных соответствующий фильтр jq будет:
.Tags |= map(select(.Key | IN("Name", "Name in Resolve")))
Если у вашего jq этого нет IN/1
, то вы можете просто скопировать его описание в начало вашей программы:
def IN(s): first((s == .) // empty) // false;
Комментарии:
1. Я попытался запустить так
aws resourcegroupstaggingapi get-resources --tags-per-page 100 | jq '.Tags |= map(select(.Key | IN("Name", "Name in Resolve")))' > tag.json
, но это выдает ошибку2. Программа, которую я дал, работает с JSON, который вы показали, а не с результатом
aws
команды, так как вы не указали эти детали.