return 文本值列表每行 instance-id 使用 awscli --query
return text list of values one line per instance-id with awscli --query
我在 AWS 中有具有相同 ReservationId 的实例(它们同时启动并且它们的 AmiLaunchIndex 为 0 到 x )。我的目标是生成每个实例一行的文本输出,例如这样。为了清楚起见,我添加了列 headers。
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 函数来完成此操作,但我不知道如何使用该函数。有什么建议吗?
您需要运行以下命令
aws ec2 describe-instances \
--filters "Name=reservation-id,Values=r-poiu4567"
--query 'Reservations[*].{owner:OwnerId,ReservationId:ReservationId,instance:Instances[].InstanceId | [0]}' \
--output text
您可以添加您想要的其他参数
这将提供没有 header 的所需输出(一行中的所有元素),例如
i-08eec92943c9cc576 325979260958 r-0b13a131efa6b3af8
i-07a25c4ae7e6abecb 325979260958 r-05a51aefe5b72358d
....
不幸的是,要做到这一点,我认为我们需要 https://github.com/jmespath/jmespath.site/pull/6
在这种特殊情况下,您可以通过使用网络接口中的所有者来破解此结果,这在实践中几乎可以肯定是相同的:
Reservations[].Instances[].[NetworkInterfaces[0].OwnerId, InstanceId, KeyName]
(如果需要列标题,请使用 object 而不是数组)
ec2 describe-instances --query
'Reservations[*].
{
id:ReservationId,
requester:RequesterId,
instance:Instances[].InstanceId |[0],
lifecycle:Instances[].InstanceLifecycle | [0]
}
'
--output text
..为我工作。
最后,我通过使用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
请参阅 this jmespath issue and this one 讨论此问题的地方。
--query Reservations[*].Instances[*].[InstanceId] --output text
只需添加括号
我在 AWS 中有具有相同 ReservationId 的实例(它们同时启动并且它们的 AmiLaunchIndex 为 0 到 x )。我的目标是生成每个实例一行的文本输出,例如这样。为了清楚起见,我添加了列 headers。
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 函数来完成此操作,但我不知道如何使用该函数。有什么建议吗?
您需要运行以下命令
aws ec2 describe-instances \
--filters "Name=reservation-id,Values=r-poiu4567"
--query 'Reservations[*].{owner:OwnerId,ReservationId:ReservationId,instance:Instances[].InstanceId | [0]}' \
--output text
您可以添加您想要的其他参数
这将提供没有 header 的所需输出(一行中的所有元素),例如
i-08eec92943c9cc576 325979260958 r-0b13a131efa6b3af8
i-07a25c4ae7e6abecb 325979260958 r-05a51aefe5b72358d
....
不幸的是,要做到这一点,我认为我们需要 https://github.com/jmespath/jmespath.site/pull/6
在这种特殊情况下,您可以通过使用网络接口中的所有者来破解此结果,这在实践中几乎可以肯定是相同的:
Reservations[].Instances[].[NetworkInterfaces[0].OwnerId, InstanceId, KeyName]
(如果需要列标题,请使用 object 而不是数组)
ec2 describe-instances --query
'Reservations[*].
{
id:ReservationId,
requester:RequesterId,
instance:Instances[].InstanceId |[0],
lifecycle:Instances[].InstanceLifecycle | [0]
}
'
--output text
..为我工作。
最后,我通过使用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
请参阅 this jmespath issue and this one 讨论此问题的地方。
--query Reservations[*].Instances[*].[InstanceId] --output text
只需添加括号