Aws-cli: Тег aws ec2 description-instances --filters: похоже, не работает (или документы отсутствуют/вводят в заблуждение)

Созданный на 20 сент. 2013  ·  46Комментарии  ·  Источник: aws/aws-cli

Попытка использовать aws ec2 description-instance (версия 1.1.0) с тегом: filter, который упоминается в документации по адресу http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html , но это не похоже на работу.

Цитата из документации: «тег: --фильтрует ответ на основе определенной комбинации тега/значения».

Пробовал несколько форматов (просто предположил, попробовал формат, используемый http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-DescribeInstances.html), но безуспешно.

Это не жалуется, но не возвращает экземпляров:

aws ec2 description-instances --filters Name=tag:,Values=Name=ADS-prod-ads

Этот терпит неудачу:

aws ec2 description-instances --filters tag:Name=ADS-prod-ads
Неизвестный ключ ' tag:Name ' для параметра --filters, допустимые варианты: значения, имя

Просто для справки: использование тега-значения работает (просто чтобы показать, что тег Name=ADS-prod-ads существует):

aws ec2 description-instances --filters Имя=значение тега,значения=ADS-prod-ads | jq '.Reservations[].Instances[].Tags[]'
{
"Ключ": "Имя",
«Значение»: «ADS-prod-ads»
}

documentation

Самый полезный комментарий

Чтобы отфильтровать все экземпляры, у которых есть тег с именем или ключом Name И значением ADS-prod-ads , вы должны сделать следующее:

aws ec2 describe-instances --filter Name=tag:Name,Values=ADS-prod-ads

Все 46 Комментарий

Чтобы отфильтровать все экземпляры, у которых есть тег с именем или ключом Name И значением ADS-prod-ads , вы должны сделать следующее:

aws ec2 describe-instances --filter Name=tag:Name,Values=ADS-prod-ads

Спасибо, это работает. Было бы здорово, если бы пример был в документации (думаю, он не очевиден, он немного отличается от других фильтров).

Также в документации по tag-key говорится: «Если вы хотите перечислить только те ресурсы, где Purpose — X, см. фильтр ключа далее в этой таблице». Насколько я могу судить, там должно быть написано «см. тег: фильтр».

Документация, приведенная выше, относится как к «справке по экземплярам aws ec2», так и к http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html , которые кажутся одинаковыми (т.е. из того же источника).

Я согласен, что пример был бы очень полезен. Я отмечу это как проблему с документацией. Спасибо.

Потребовалось время, чтобы найти это, учитывая, насколько полезно, да, было бы неплохо иметь один пример в документе aws ec2 description-instances (http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances). .html)

Да, это теперь работает. Пример, предоставленный AWS Docs, немного сбивает с толку, но поясняет. У меня есть тег под названием «Ресурс», и каждому экземпляру присваивается значение «тест», «этап» или «живой». Чтобы найти все экземпляры (запущенные или остановленные) с тегом ресурса «тест», используется следующий синтаксис:

aws ec2 description-instances --filters Name= tag:resource ,Values=test --profile test-aws

У меня такая же проблема с --query. Я просто хочу, чтобы имя экземпляра в отчете было черным. Я использую следующий запрос

description-instances --query 'Reservations[_].Instances[_].[Placement.AvailabilityZone, State.Name, InstanceId,InstanceType,Platform,Tags.Value,State.Code,Tags.Values]' --output table

Вы используете последнюю версию was cli?

Меня устраивает

aws ec2 describe-instances --query 'Reservations[].Instances[].[Placement.AvailabilityZone, State.Name, InstanceId,InstanceType,Platform,Tags.Value,State.Code,Tags.Values]' --output table
---------------------------------------------------------------------------------------
|                                  DescribeInstances                                  |
+------------+----------+-------------+------------+----------+-------+------+--------+
|  eu-west-1c|  stopped |  i-60xxxx2a |  t1.micro  |  None    |  None |  80  |  None  |
|  eu-west-1a|  stopped |  i-6fxxxx720 |  m1.medium |  windows |  None |  80  |  None  |
|  eu-west-1c|  running |  i-1axxxx56 |  t1.micro  |  None    |  None |  16  |  None  |
+------------+----------+-------------+------------+----------+-------+------+————+

-- Себ

27 февраля 2014 г., в 15:16, [email protected] написал:

У меня такая же проблема с --query. Я просто хочу, чтобы имя экземпляра в отчете было черным. Я использую следующий запрос

description-instances --query 'Reservations[].Instances[].[Placement.AvailabilityZone, State.Name, InstanceId,InstanceType,Platform,Tags.Value,State.Code,Tags.Values]' --output table


Ответьте на это письмо напрямую или просмотрите его на GitHub.

Привет Себсто,

Команда работает, но не возвращает фактические значения тегов. Это дает мне None (NULL), как и вы. Для элемента Name мы вставляем имена для всех ваших серверов, чтобы их было легче идентифицировать. Мы также помечаем среду, частью которой они являются.

Заранее спасибо за помощь!
Деррик

Извините - слишком быстро ответил

Для платформы: это ожидается, так как только экземпляры Windows имеют атрибут платформы в описании JSON.
В остальном, похоже, проблема действительно есть

OK:
aws ec2 description-instances --query Reservations[].Instances[].Tags.Key

Не хорошо:
aws ec2 description-instances --query Reservations[].Instances[].[Tags.Key]

-- Себ

27 февраля 2014 г., в 15:38, [email protected] написал:

Привет Себсто,

Команда работает, но не возвращает фактические значения тегов. Это дает мне None (NULL), как и вы. Для элемента Name мы вставляем имена для всех ваших серверов, чтобы их было легче идентифицировать. Мы также помечаем среду, частью которой они являются.

Заранее спасибо за помощь!
Деррик


Ответьте на это письмо напрямую или просмотрите его на GitHub.

@sebasto Проблема с приведенным выше запросом заключается в том, что Tags является списком, поэтому выражение Tags.Key вернет null . Если вам нужны все имена ключей, вы должны сказать Tags[].Key .

Однако в только что выпущенной последней версии CLI (1.3.0) есть более прямой способ фильтрации по конкретным именам. Например, если вам нужно имя всех ваших экземпляров в списке, теперь вы можете сказать:

aws ec2 describe-instances --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value[]'

[
  "name1",
  "myinstance2",
  ...
  "devinstance"
]

@jamesls Как можно расширить этот запрос, чтобы включить в вывод больше результатов? Например, я использую следующее для перечисления таких вещей, как InstanceID, AZ и т. д.
aws ec2 description-instances --query 'Reservations[].Instances[].[InstanceId, Placement.AvailabilityZone, InstanceType, Platform, State.Name, PublicDnsName]' --output text |grep работает
Но когда я добавляю «Tags[?Key== Name ].Value[]» в свой запрос, я не могу вернуть тег имени. Я получаю только «Нет» для этого поля. Вот пример моей команды aws:
aws ec2 description-instances --query 'Reservations[_].Instances[_].["Tags[?Key== Name ].Value[]", InstanceId, Placement.AvailabilityZone, InstanceType, Platform, State.Name, PublicDnsName]' --output text |grep работает

Ты пробовал:

Reservations[].Instances[].["Tags[*][?Key==Name].Value[]

Извините, это не так. Как насчет этого?

aws ec2 describe-instances --query 'Reservations[].Instances[].Tags[*][?Key==`Name`].Value'

Да, это работает, но дает мне только табличку с именем. Я пытаюсь получить эту и другую информацию, такую ​​как InstanceID, AZ и т. д.

Ну, это работает для меня:

aws ec2 describe-instances --query 'Reservations[].Instances[].{id: InstanceId, tagvalue: Tags[*][?Key==`Name`].Value}'

Вы можете расширить это, чтобы получить другие элементы, кроме InstanceId.

Извините, что вмешиваюсь, но у меня проблема с запросом:

aws ec2 description-instances --query Reservations[].Instances[].SecurityGroups[?GroupName==default].GroupId

Я использую приведенное выше, чтобы попытаться извлечь идентификатор группы определенной группы (в данном случае имя = по умолчанию). Но ничего не возвращается. Есть идеи?

Я думаю, что где-то застрял, когда я запускаю это, я везде получаю None

aws --region us-east-1 ec2 description-instances --query 'Reservations[].Instances[].Tags[?Key== Name ].Value[].[Placement.AvailabilityZone, State. Имя, InstanceId, LaunchTime, ImageId]' --выходная таблица

Это потому, что .Value[] просто возвращает значение ваших именных тегов. Все остальные атрибуты, запрошенные после этого, не существуют в этом выводе.

У фильтров ужасный синтаксис. Могу с вами погуглить, попробуйте разобраться.

03.12.2014, 18:14, asvarshn написал:

Я думаю, что где-то застрял, когда я запускаю это, я везде получаю None

aws --region us-east-1 ec2 description-instances --query
'Reservations[].Instances[].Tags[?Key==|Name|].Value[].[Placement.AvailabilityZone,
State.Name, InstanceId, LaunchTime, ImageId]'


Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/aws/aws-cli/issues/368#issuecomment-65527379 .

У меня это работает для меня ..

aws --region eu-west-1 ec2 description-instances --query 'Reservations[].Instances[].[Tags[?Key== Name ].Value | [0], InstanceId, Placement.AvailabilityZone, InstanceType, LaunchTime, State.Name, PublicDnsName]' --output table

Хорошо, из вышеизложенного это не было очевидно, так что, надеюсь, это кому-нибудь поможет. Здесь перечислены в удобном формате таблицы некоторые полезные поля, включая тег Name (если вы его используете).

aws ec2 describe-instances --query 'Reservations[].Instances[].[ InstanceId,[Tags[?Key== Имя ].Value][0][0],State.Name,InstanceType,Placement.AvailabilityZone ]' --output table

$ aws ec2 describe-instances --filter Name=tag:Role,Values=cache для тех, кто споткнулся здесь

Справка по-прежнему очень запутана в отношении фильтра тегов. В нем говорится:

o tag :key =*value* - The key/value combination of a tag assigned to the resource.

который, кажется, предполагает, что вы можете сделать:

--filters Name=tag:SomeKey=SomeValue

что конечно не правильно.

Если кому-то трудно понять, как сортировать теги, для меня работает следующая команда:
aws ec2 describe-instances --output json --query "Reservations[*].Instances[*].{ID:InstanceId,Type:InstanceType,Name:Tags[?Key=='Name'].Value}"

Если вам нужно включить теги с : в них вам нужно цитировать, т.е.
aws ec2 describe-instances --region us-west-2 --filters Name=tag:"aws:autoscaling:groupName",Values=yourautoscalegroupname

Я тоже был в тупике из-за непроницаемой и вводящей в заблуждение документации по этому вопросу.

Я пытался выяснить, как получить IP-адрес экземпляра на основе тега (в данном случае «Имя»). Я пробовал несколько разных вещей с --query и --filters, но кажется, что переход от одного вложенного параметра к другому сложен или, возможно, невозможен, просто используя тот или иной подход. Комбинация --query и --filters сделала свое дело:

aws ec2 describe-instances --filters Name=tag:Name,Values="Instance Name" --query 'Reservations[].Instances[].NetworkInterfaces[].PrivateIpAddresses[].PrivateIpAddress' --output text

Это появляется вверху, когда я ищу ec2.instances.filter() для программной фильтрации экземпляров.


Вот как вы этого добьетесь:
(Найти все экземпляры с тегом Name и значение тега начинается с api- )

import boto3

ec2 = boto3.resource('ec2')

for instance in ec2.instances.filter(Filters=[{'Name': 'tag:Name', 'Values': ['api-*']}]):
    print instance

@adeelx для Python, конечно, но проблема в использовании bash awscli

Ниже команда работает для меня

aws --version
aws-cli/1.11.81 Python/3.4.3 Linux/3.13.0-74-generic botocore/1.5.44
aws ec2 describe-instances --filters Name=tag:App,Values="value" --query 'Reservations[].Instances[].[Placement.AvailabilityZone, State.Name, InstanceId,InstanceType,Platform,Tags.Value,State.Code,Tags.Values]' --output table

Я хотел отфильтровать свои экземпляры на те, у которых был определенный префикс в теге Name, а затем убедиться, что в выходной таблице указано полное имя, единственный способ добиться этого, похоже, использовать join() чтобы сгладить список в строку:

aws ec2 describe-instances --filters "Name=tag:Name,Values=talis*" --query 'Reservations[].Instances[].[InstanceId,PublicDnsName,State.Name,InstanceType,join(`,`,Tags[?Key==`Name`].Value)]' --output table

У меня были похожие проблемы, и мне было довольно сложно добраться до этого:
aws ec2 describe-tags --region ${region} --filter "Name=tag:Name,Values=*Rally" "Name=resource-id,Values=$instanceID"

Прошло 5 лет, а тот самый ужасный пример все еще в документации, а лучшего примера до сих пор не существует.

Мой поиск в Google о том, как использовать фильтры с вызовами API описать_*, привел меня сюда, и я не могу не покачать головой после прочтения последнего комментария @tolidano .

Если вам нужно фильтровать только по ключу тега, вы можете сделать что-то вроде

ec2-describe-tags --filter "resource-type=instance" --filter "key=hostname" --filter "resource-id=$(ec2metadata --instance-id)" | awk '{print $5}'

Или просто используйте --filter "key=<KEY>"

Я хочу получить тип платформы ec2, т.е. (Windows или Linux), используя фильтры лямбда-функций. В случае, если кто-то сделал это, не могли бы вы поделиться тем же

«Windows» возвращается полем «Платформа» для экземпляров Windows. Ничего не возвращается для экземпляров Linux. Запрос в верхней части этой темы все еще работает сегодня.

aws ec2 describe-instances --query 'Reservations[].Instances[].[Placement.AvailabilityZone, State.Name, InstanceId,InstanceType,Platform,Tags.Value,State.Code,Tags.Values]' --output table

Чтобы отфильтровать все экземпляры, у которых есть тег с именем или ключом Name И значением ADS-prod-ads , вы должны сделать следующее:

aws ec2 describe-instances --filter Name=tag:Name,Values=ADS-prod-ads

если нужно точное имя экземпляра
aws ec2 description-instances --filter Name= tag:Name ,Values=devschemareg01 --output text | сортировать | имя группы | awk '{напечатать $3}'

Делюсь тем, что использовал:
```instance-id = curl --silent http://169.254.169.254/latest/meta-data/instance-id 2>&1
aws ec2 description-tags --region us-west-1 --filters Name=resource-id,Values=[instance-id] Name= tag:aws :cloudformation :stack-name ,Values=["my_stack_name"]

или

aws ec2 description-tags --region us-west-1 --filters Name=resource-id,Values=[instance-id] Name=key,Values= aws:cloudformation :stack-name

aws ec2 describe-instances --filters Name=tag:<YOUR_TAG>,Values="<YOUR_VALUE>" --query 'Reservations[].Instances[].[Placement.AvailabilityZone, State.Name, InstanceId,InstanceType,InstanceLifecycle,Tags[?Key==`<YOUR_TAG`]|[0].Value]'  --output table

Я использовал фильтры ниже, чтобы получить список экземпляров с общедоступным IP-адресом и их соответствующим именем, используя параметры --filter, и он отлично работает.

aws ec2 description-instances --filter "Имя=имя-состояния-экземпляра,значения=работает" "Имя= тег:ОС ,значения=AMAZON/LINUX2" --query "Резервирование[].Экземпляры[].[PublicIpAddress, Tags [?Key=='Name'].Value|[0]]" --выходная таблица

Я использовал приведенный ниже запрос, чтобы получить AZ, InstanceType, Name, PrivateIpAddress, PublicIpAddress и состояние запущенных экземпляров ec2:

aws ec2 description-instances --query 'Reservations[ ].Instances[ ].{ State:State.Name ,Public IpAddress:PublicIpAddress , InstanceType:InstanceType , PrivateIP:PrivateIpAddress ,AZ:Placement.AvailabilityZone, Name:Tags [?Key == Name ] | [0].Value}' --выходная таблица |

Чтобы отфильтровать детали по имени, я использую grep с параметром -i, чтобы поиск не учитывал регистр вместо фильтров по имени.

PS: При написании команды я в основном боролся с оператором канала, выделенным перед [0].Value в фильтре тегов имени. (может быть полезно для тех, кто борется с командой)

@ vaibhavg2510 , хотя этот подход работает, и слава Богу, он «тратит впустую» команды API. В загруженной учетной записи это делает вас более подверженным регулированию, длительным процессам из-за экспоненциальной отсрочки/повторных попыток и т. д.

Удар. Синтаксис --filters "Name = tag:Name, Values = ..." все еще не очевиден из документации. Я буквально 15 минут гуглил, пока не нашел эту проблему, которая, наконец, показала, как это сделать.

Я говорил об этом с авторами EC2. Они сказали мне, что будут работать над примером, чтобы прояснить это. Тем временем синтаксис задокументирован в Руководстве пользователя EC2 здесь: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#Using_Tags_CLI .

Надеюсь, это поможет!

Я последняя жертва, я думаю, что должен был прийти сюда, чтобы получить мой ответ. Планы по консолидации документов все еще существуют?

Даже ссылка со страницы API на приведенную выше ссылку комментариев (или, возможно, на данном этапе это репо) была бы полезной.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги