#jq #aws-cli
#jq #aws-cli
Вопрос:
Я запрашиваю выходные данные AWS CLI в соответствии с приведенным ниже json.
{
"Aliases": [
{
"AliasName": "alias/ab1",
"AliasArn": "arn:aws:kms:eu-west-1:123:alias/key1",
"TargetKeyId": "66"
},
{
"AliasName": "alias/ab2",
"AliasArn": "arn:aws:kms:eu-west-1:123:alias/key2",
"TargetKeyId": "77"
},
{
"AliasName": "alias/ab3",
"AliasArn": "arn:aws:kms:eu-west-1:123:alias/key3",
"TargetKeyId": "88"
},
{
"AliasName": "alias/ab4",
"AliasArn": "arn:aws:kms:eu-west-1:123:alias/aws/key4",
"TargetKeyId": "99"
}
]
}
С помощью запроса
.Aliases[] | (.AliasArn | select(contains(":alias/aws/") | not) )
Но это только извлекает AliasArn
поле, TargetKeyId
также требуется. Есть идеи о том, как извлечь оба поля?
"arn:aws:kms:eu-west-1:123:alias/key1"
"arn:aws:kms:eu-west-1:123:alias/key2"
"arn:aws:kms:eu-west-1:123:alias/key3"
Ответ №1:
Для этого будет работать интерполяция строк.
Я вызываю интерфейс командной строки AWS list-aliases
напрямую и передаю его по jq
каналу, использую фильтр select / contains и передаю его по каналу, используя интерполяцию строк для вывода.
aws kms list-aliases |jq -r '.Aliases[] |select (.AliasArn |contains(":alias/aws/") | not) | "AliasArn: (.AliasArn)ttTargetKeyId: (.TargetKeyId)"'
Я добавил пару вкладок в вывод для удобства чтения.
Ссылки
Комментарии:
1. @sweeny_here если это помогло вам решить вашу проблему, не могли бы вы пометить ее как принятую, чтобы все знали, что ваша проблема решена.
Ответ №2:
Спасибо, Кенлукас, это попало в самую точку.
Я внес небольшое уточнение, чтобы просто записать описание псевдонима вместе с ключом, как показано здесь —
aws kms list-aliases |jq -r '.Aliases[] |select (.AliasArn |contains(":alias/aws/") | not) | "AliasArn: (.AliasArn | split("/")[1])ttTargetKeyId: (.TargetKe yId)"'
Ответ №3:
Вы очень близки к решению. Вам просто нужно добавить поле, которое вы хотите получить в своем фильтре:
.Aliases[]|select(.AliasArn|contains(":alias/aws")|not) |.AliasArn,.TargetKeyId