Попробуйте использовать утилиту jq .Это анализатор командной строки JSON.Если вы не знакомы с ним, я бы порекомендовал jq площадку для экспериментов.
Сначала сгладьте результаты awcli следующим образом:
aws ec2 describe-instances \
--query 'Reservations[].Instances[].{ip: PublicIpAddress, tm: LaunchTime}' \
--filters 'Name=tag:Name,Values= myInstanceName'
Примечаниечто я использовал псевдоним от 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"
}
]
Затем перенаправьте этот результат в jq
и отсортируйте по убыванию tm
(псевдоним для LaunchTime
) следующим образом:
jq 'sort_by(.tm) | reverse'
Это приведет к выводу, подобному этому:
[
{
"ip": "52.1.2.3",
"tm": "2019-03-04T20:04:00.000Z"
},
{
"ip": "54.4.5.6",
"tm": "2019-01-04T19:54:11.000Z"
}
]
Наконец, используйте jq
, чтобы отфильтровать все, кроме первого результата, следующим образом:
jq 'sort_by(.tm) | reverse | .[0]'
Это даст один результат, самый последний запущенный экземпляр:
{
"ip": "52.1.2.3",
"tm": "2019-03-04T20:04:00.000Z"
}
Собрав все вместе, последняя команда:
aws ec2 describe-instances \
--query 'Reservations[].Instances[].{ip: PublicIpAddress, tm: LaunchTime}' \
--filters 'Name=tag:Name,Values= myInstanceName' | \
jq 'sort_by(.tm) | reverse | .[0]'