Назад | Перейти на главную страницу

AWS-CLI - поиск ELB по тегу имени

Я пытаюсь найти балансировщик нагрузки с Name тег с некоторым значением.

aws elb describe-load-balancers --query 'LoadBalancerDescriptions[*].LoadBalancerName'

Я перебираю результаты и запускаю:

aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[?Tags[?Key==`Name`].Value == `my-desired-name-value`]'

Результат всегда пустой, даже если это:

aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[].Tags[?Key==`Name`].Value'

Возвращается my-desired-name-value. Я хотел бы получить весь объект тегов, используя только JMESPath, я не могу использовать jq Вот.

Желаемый результат:

{
    "TagDescriptions": [
        {
            "LoadBalancerName": "some-load-balancer",
            "Tags": [
                {
                    "Key": "SomeTag",
                    "Value": "SomeValue"
                },
                {
                    "Key": "Name",
                    "Value": "my-desired-name-value"
                }
            ]
        }
    ]
}

Что не так с моим JMESPath запрос?

Вы пытаетесь использовать --query выполнять роль --filter и к сожалению describe-tags не поддерживает --filter вариант.

В --query опция позволяет вам выбрать, какие поля будут возвращены в ответе. По мере доступности --filter позволяет вам выбрать, какие ресурсы вы хотите вернуть. Это описано более подробно Вот

Ты можешь использовать jq для выполнения функции фильтра. Я настоятельно рекомендую это, потому что AWS не реализует --filter опция для всех команд интерфейса командной строки.

Для вашего примера попробуйте что-то вроде:

aws elb describe-tags --load-balancer-names some-load-balancer \
| jq -r '.TagDescriptions[] |select (.Tags[].Value=="my-desired-name-value")'

Немного сложнее фильтровать по ключу тега и значению:

aws elb describe-tags --load-balancer-names some-load-balancer \
| jq -r '.TagDescriptions[] | . as $i \
| (select ($i.Tags[].Value=="my-desired-name-value")) and (select ($i.Tags[].Key=="Name")) \
| $i'

Вывод

{
  "LoadBalancerName": "some-load-balancer",
  "Tags": [
    {
      "Key": "Type",
      "Value": "classic"
    },
    {
      "Key": "Name",
      "Value": "my-desired-name-value"
    }
  ]
}

Ссылки

Документы JQ