2

我在 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 函数来完成此操作,但我不知道如何使用该函数。有什么建议么?

4

5 回答 5

5

您需要运行以下命令

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
....
于 2017-08-31T16:03:12.890 回答
4

不幸的是,要做到这一点,我认为我们需要https://github.com/jmespath/jmespath.site/pull/6

在这种特殊情况下,您可以通过使用网络接口中的所有者来破解此结果,这在实践中几乎可以肯定是相同的:

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

(如果需要列标题,请使用对象而不是数组)

于 2017-09-06T21:25:39.537 回答
4
--query Reservations[*].Instances[*].[InstanceId] --output text

只需添加刹车

于 2019-11-19T22:58:10.363 回答
2
ec2 describe-instances --query 
'Reservations[*].
{
   id:ReservationId,
   requester:RequesterId,
   instance:Instances[].InstanceId |[0],
   lifecycle:Instances[].InstanceLifecycle | [0]
}
'
--output text

....为我工作。

于 2018-01-08T21:56:34.640 回答
0

最后,通过使用 jmespath 的 map 函数,我能够得到我想要的结果,如下所示。感谢 gitter 上 jmespath/chat 频道中的人们。

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 问题和讨论问题的问题。

于 2018-08-23T16:48:40.330 回答