Учитывая выход aws ec2 describe instances
Я пытаюсь отобразить объекты, у которых нет Platform
значение и ДЕЙСТВИТЕЛЬНО иметь VpcId
стоимость. Пока что я придумал это:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?Platform==`null` && ?VpcId!=`null`]'
Но это ошибка:
Bad value for --query Reservations[*].Instances[?Platform==`null` && ?VpcId!=`null`]: Bad jmespath expression: Unknown token ?:
Reservations[*].Instances[?Platform==`null` && ?VpcId!=`null`]
Я просматривал http://jmespath.org/ и не понимаете, как выполнять несколько выражений фильтра.
Обе
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?Platform==`null`]'
и
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?VpcId!=`null`]'
работают, но я пытаюсь получить оба этих запроса одновременно.
Мне удалось решить свою логическую задачу (фильтр describe-instances
например, что являются в VPC, но это не windows) с помощью этот вопрос.
Мой результирующий запрос (в котором я ищу PrivateIPAddress
) был:
aws --output json ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" |\
jq '.Reservations[].Instances | \
map(select(.VpcId != null)) | map(select(.Platform != "windows") | .PrivateIpAddress)'
Однако фактический вопрос, который я задал об объединении фильтров, остается без ответа, поэтому я оставлю его открытым в надежде получить ответ на который вопрос.
Я взял вашу команду и удалил 1 символ - 2-й ?
отметка. Я добавил возможность форматировать вывод как текст. Я также понимаю, что awscli, возможно, изменился для поддержки нескольких запросов с момента вашей первоначальной публикации, поэтому вам нужно будет убедиться, что вы используете последнюю версию. Этот запрос работает для меня:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[?Platform==`null` && VpcId!=`null`]' --output text