aws-cli
Параметр -query
Поиск…
замечания
Параметр --query
часто пропускается, но он невероятно мощный. Он использует язык запросов JMESPath, чтобы фильтровать ответы службы точно так, как вы хотите.
Список экземпляров в удобном для чтения способом
У экземпляров много метаданных, которые возвращаются из вызова describe-instances
, но часто вы просто хотите увидеть основы. Вы можете использовать JMESPath-запрос в сочетании с выводом таблицы, чтобы показать краткую информацию о экземпляре легко читаемым способом.
aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType}"
-----------------------------------------------------
| DescribeInstances |
+-----------+---------------+----------+------------+
| Id | Name | State | Type |
+-----------+---------------+----------+------------+
| i-abc123 | None | stopped | m3.large |
| i-def456 | amazon linux | stopped | t2.micro |
| i-ghi789 | proxy | running | t2.micro |
+-----------+---------------+----------+------------+
Теперь давайте разбить это по частям. Во-первых, у нас есть --output table
. Это создает раскрашенное представление таблицы ответа. Это, как правило, наиболее полезно с командами, которые возвращают небольшие наборы данных или где вы отфильтровывали данные.
Теперь на --query
. Это выглядит долго, но на самом деле это довольно просто. Первая часть - Reservations[].Instances[]
. Это возвращает сплющенный список всех возвращенных экземпляров.
Следующая часть запроса инкапсулирована .{}
. Это делается для создания нового json-объекта для каждого элемента в списке, где каждое значение представляет собой запрос JMESPath для применения к исходному объекту (в данном случае экземпляр). Большинство из них очень просты, но Name
немного сложнее.
Полный запрос для получения Name
- это Tags[?Key == 'Name'].Value | [0]
. Первая часть этого тега Tags[?Key == 'Name']
выполняет поиск тегов экземпляра для тега, чей ключ является Name
. Вторая половина .Value | [0]
выбирает значения каждого из этих тегов, а затем берет первый элемент из списка (в этом случае его будет только когда-либо).
Именно то, что вы хотите в этой таблице, полностью зависит от вас. Если вы хотите добавить информацию DNS, например, вы можете легко добавить новый ключ DNS: PublicDnsName
:
aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType, DNS: PublicDnsName}"
--------------------------------------------------------------------------------------------------------
| DescribeInstances |
+--------------------------------------------------+-----------+---------------+----------+------------+
| DNS | Id | Name | State | Type |
+--------------------------------------------------+-----------+---------------+----------+------------+
| | i-abc123 | None | stopped | m3.large |
| | i-def456 | amazon linux | stopped | t2.micro |
| ec2-192-168-1-1.us-west-2.compute.amazonaws.com | i-ghi789 | proxy | running | t2.micro |
+--------------------------------------------------+-----------+---------------+----------+------------+