x3n*_*r0s 3 amazon-ec2 amazon-web-services aws-cli
我当前正在使用以下CLI命令来获取给定实例名称标签“ myInstanceName” 的实例PublicIPAddress和LaunchTime:
aws ec2 describe-instances --filters 'Name=tag:Name,Values=myInstanceName' \
--region us-east-1 \
--query 'Reservations[*].Instances[*].{PublicIpAddress: PublicIpAddress, LaunchTime: LaunchTime}'
Run Code Online (Sandbox Code Playgroud)
结果如下:
[
{
"LaunchTime": "2019-01-25T11:49:06.000Z",
"PublicIpAddress": "11.111.111.11"
}
]
Run Code Online (Sandbox Code Playgroud)
很好,但是如果有两个具有相同名称的实例,我将在结果JSON中得到两个结果。我需要找到一种获取给定名称的最新实例的方法。
解决方案更新
这个问题是EC2实例特有的。可以使用两种不同的方法来解决该问题,下面对此进行回答:使用JMESPath
使用jq解析结果
请参阅此相关问题,以获取按日期对JMESPath进行更一般的排序以及进一步阅读的信息。
尝试使用jq实用程序。这是一个命令行JSON解析器。如果您不熟悉它,那么我建议您尝试jq运动场。
首先展平awcli结果,如下:
aws ec2 describe-instances \
--query 'Reservations[].Instances[].{ip: PublicIpAddress, tm: LaunchTime}' \
--filters 'Name=tag:Name,Values= myInstanceName'
Run Code Online (Sandbox Code Playgroud)
请注意,我别名LaunchTime来tm为简洁。这将导致(未排序的)输出,如下所示:
[
{
"ip": "54.4.5.6",
"tm": "2019-01-04T19:54:11.000Z"
},
{
"ip": "52.1.2.3",
"tm": "2019-03-04T20:04:00.000Z"
}
]
Run Code Online (Sandbox Code Playgroud)
接下来,将此结果jq通过管道传递并按降序排序tm(的别名LaunchTime),如下所示:
jq 'sort_by(.tm) | reverse'
Run Code Online (Sandbox Code Playgroud)
这将导致如下输出:
[
{
"ip": "52.1.2.3",
"tm": "2019-03-04T20:04:00.000Z"
},
{
"ip": "54.4.5.6",
"tm": "2019-01-04T19:54:11.000Z"
}
]
Run Code Online (Sandbox Code Playgroud)
最后,使用jq过滤掉除第一个结果以外的所有结果,如下所示:
jq 'sort_by(.tm) | reverse | .[0]'
Run Code Online (Sandbox Code Playgroud)
这将产生一个结果,即最近启动的实例:
{
"ip": "52.1.2.3",
"tm": "2019-03-04T20:04:00.000Z"
}
Run Code Online (Sandbox Code Playgroud)
放在一起,最后的命令是:
aws ec2 describe-instances \
--query 'Reservations[].Instances[].{ip: PublicIpAddress, tm: LaunchTime}' \
--filters 'Name=tag:Name,Values= myInstanceName' | \
jq 'sort_by(.tm) | reverse | .[0]'
Run Code Online (Sandbox Code Playgroud)
这是一种用于查找最新启动的实例并显示有关它的数据的方法:
aws ec2 describe-instances --query 'sort_by(Reservations[].Instances[], &LaunchTime)[:-1].[InstanceId,PublicIpAddress,LaunchTime]'
Run Code Online (Sandbox Code Playgroud)
sort_by(Reservations[].Instances[], &LaunchTime)[:-1]将返回最后启动的实例。然后从这些实例中检索字段。
要了解这种乐趣,请参阅:
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |