Найти все балансировщики нагрузки aws, которые имеют конкретный экземпляр - PullRequest
1 голос
/ 25 июня 2019

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

Я могу перечислить экземпляры в ELB, используя следующую команду

aws elb describe-load-balancers --query "LoadBalancerDescriptions[*].{ID:LoadBalancerName,InstanceId:Instances[*].InstanceId}[*]. {ELB:ID,InstanceId:InstanceId[*]}" --output=json

Пример вывода:

[
{
    "ELB": "my_name",
    "InstanceId": [
        "instance-id-A",
        "instance-id-B",
    ]
},
{
    "ELB": "my_name2",
    "InstanceId": [
        "instance-id-B",
        "instance-id-C"
    ]
},
{
    "ELB": "my_name3",
    "InstanceId": [
        "instance-id-A",
        "instance-id-C"
    ]
}

]

Как мне отфильтровать эти выходные данные, чтобы они возвращали только имена ELB с идентификатором экземпляра A?

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Другой подход, который мне нравится больше, так как я считаю более простым в использовании, заключается в использовании jq для фильтрации:

aws elb describe-load-balancers | jq -r '.LoadBalancerDescriptions[] | select (.Instances[].InstanceId == "instance-id-A") | .LoadBalancerName'

Выход:

SampleLBName1
SampleLBName2

2 голосов
/ 25 июня 2019

Команда contains даст вам то, что вы ищете

aws elb describe-load-balancers --query "LoadBalancerDescriptions[*].{ID:LoadBalancerName,InstanceId:Instances[*].InstanceId}[?contains(to_string(@),'instance-id-A')]"

Обеспечивает вывод:

[
    {
        "ID": "lb_name",
        "InstanceId": [
            "i-1234567890"
        ]
    }
]

Ссылки

http://jmespath.org/specification.html#contains

...