У меня есть экземпляры в AWS, которые имеют тот же ReservationId (они были запущены в то же время, и у них AmiLaunchIndex от 0 до x). Моя цель состоит в том, чтобы выводить текст по одной строке на экземпляр, например, так. Я добавил заголовки столбцов для ясности.

OwnerId      ReservationId InstanceId  PrivateIpAddress AmiLaunchIndex
12345678910  r-poiu4567    i-asdf1234  10.0.0.1         0
12345678910  r-poiu4567    i-qwer4312  10.0.1.1         1
... etc ...

В канале jmespath gitter, функция map была предложена как способ сделать это, но я не могу понять, как использовать эту функцию. Какие-либо предложения?

1
LHWizard 31 Авг 2017 в 17:12

5 ответов

Лучший ответ

К сожалению, чтобы сделать это правильно, я думаю, нам понадобится https://github.com/ jmespath / jmespath.site / тянуть / 6

В этом конкретном случае вы можете взломать этот результат, используя владельца в сетевых интерфейсах, который практически наверняка будет таким же на практике:

Reservations[].Instances[].[NetworkInterfaces[0].OwnerId, InstanceId, KeyName]

(используйте объект вместо массива, если вы хотите заголовки столбцов)

4
james.haggerty 6 Сен 2017 в 21:25

Вам нужно будет выполнить следующую команду

aws ec2 describe-instances \
    --filters "Name=reservation-id,Values=r-poiu4567" 
    --query 'Reservations[*].{owner:OwnerId,ReservationId:ReservationId,instance:Instances[].InstanceId | [0]}' \ 
    --output text

Вы можете добавить другие параметры, которые вы хотите

Это обеспечит желаемый результат (все элементы в одной строке) без заголовка как-то так

i-08eec92943c9cc576 325979260958    r-0b13a131efa6b3af8
i-07a25c4ae7e6abecb 325979260958    r-05a51aefe5b72358d
....
3
Frederic Henri 1 Сен 2017 в 06:25

Наконец, я смог получить желаемый результат, используя функцию карты jmespath следующим образом. Престижность людям в канале jmespath / chat на gitter.

aws ec2 describe-instances --query "map(&[], Reservations[].[OwnerId,ReservationId,Instances[].InstanceId | []])" --output text

Эквивалентное альтернативное выражение:

aws ec2 describe-instances --query "Reservations[].[OwnerId,ReservationId,Instances[].InstanceId | []] | map(&[], @)" --output text

См. эту проблему jmespath и этот, где это обсуждается.

0
LHWizard 23 Авг 2018 в 16:48
ec2 describe-instances --query 
'Reservations[*].
{
   id:ReservationId,
   requester:RequesterId,
   instance:Instances[].InstanceId |[0],
   lifecycle:Instances[].InstanceLifecycle | [0]
}
'
--output text

.... работал на меня.

2
vr00n 8 Янв 2018 в 21:56
--query Reservations[*].Instances[*].[InstanceId] --output text

Просто добавьте скобки

2
Adiii 27 Июл 2020 в 07:35