Метод поиска экземпляров, прикрепленных к ELB - PullRequest
11 голосов
/ 16 сентября 2010

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

Ответы [ 11 ]

10 голосов
/ 25 октября 2010

2013/12/18: Чтобы обновить это и поскольку ссылки не работают!

Я установил новые инструменты AWS cli:

$ pip install awscli

Затем запустил:

$ aws configure                                                                                                                                                
AWS Access Key ID [None]: my-key
AWS Secret Access Key [None]: my-secret
Default region name [None]: us-east-1
Default output format [None]:

Эти данные сохраняются в ~/.aws/config.

Затем я могу найти экземпляры, подключенные к балансировщику нагрузки, например:

$ aws elb describe-load-balancers --load-balancer-name "my-name"
{
    "LoadBalancerDescriptions": [
        {
            "Subnets": [],
            "CanonicalHostedZoneNameID": "ID",
            "CanonicalHostedZoneName": "my-name-foo.us-east-1.elb.amazonaws.com",
            "ListenerDescriptions": [
                {
                    "Listener": {
                        "InstancePort": 80,
                        "LoadBalancerPort": 80,
                        "Protocol": "HTTP",
                        "InstanceProtocol": "HTTP"
                    },
                    "PolicyNames": []
                },
                {
                    "Listener": {
                        "InstancePort": 80,
                        "SSLCertificateId": "arn:aws:iam::x:server-certificate/x-ssl-prod",
                        "LoadBalancerPort": 443,
                        "Protocol": "HTTPS",
                        "InstanceProtocol": "HTTP"
                    },
                    "PolicyNames": [
                        "AWSConsole-SSLNegotiationPolicy-api-production"
                    ]
                }
            ],
            "HealthCheck": {
                "HealthyThreshold": 10,
                "Interval": 30,
                "Target": "HTTP:80/healthy.php",
                "Timeout": 5,
                "UnhealthyThreshold": 2
            },
            "BackendServerDescriptions": [],
            "Instances": [
                {
                    "InstanceId": "i-FIRST-INSTANCEID"
                },
                {
                    "InstanceId": "i-SECOND-INSTANCEID"
                }
            ],
            "DNSName": "my-name-foo.us-east-1.elb.amazonaws.com",
            "SecurityGroups": [],
            "Policies": {
                "LBCookieStickinessPolicies": [],
                "AppCookieStickinessPolicies": [],
                "OtherPolicies": [
                    "AWSConsole-SSLNegotiationPolicy-my-name"
                ]
            },
            "LoadBalancerName": "my-name",
            "CreatedTime": "2013-08-05T16:55:22.630Z",
            "AvailabilityZones": [
                "us-east-1d"
            ],
            "Scheme": "internet-facing",
            "SourceSecurityGroup": {
                "OwnerAlias": "amazon-elb",
                "GroupName": "amazon-elb-sg"
            }
        }
    ]
}

Данные находятся вLoadBalancerDescriptions.Instances.

Мой балансировщик нагрузки называется my-name - это имя, которое вы выбрали при его создании.

Старый ответ ниже!

Я не знаком с инструментом cli, но я использовал API.

Я бы проверил эти два запроса:

Возможно, инструмент cli имеет что-то похожее на эти?

HTH!

7 голосов
/ 18 сентября 2015

Если у вас установлены aws-cli и jq , вы можете использовать следующую команду для получения связанных идентификаторов экземпляров ec2:

aws elb describe-load-balancers --load-balancer-name my-elb \
  | jq -r '.LoadBalancerDescriptions[].Instances[].InstanceId'

Это вернетидентификаторы ec2, связанные с этим ELB.

Примечание: я рекомендую вам установить aws cli profile , чтобы вам не приходилось возиться с переменными среды и параметрами региона (столько же).

6 голосов
/ 10 марта 2017

Потому что я люблю ответы, которые можно использовать с минимумом поиска / замены и копирования пасты

Предварительные условия: настроено aws-cli

pip install awscli
aws configure

Конфигурировать: ваше имя ELB

$ELB_NAME = "Your-elb-name"

Copy-n-Paste в терминале

for ID in $(aws elb describe-load-balancers --load-balancer-name $ELB_NAME \
    --query LoadBalancerDescriptions[].Instances[].InstanceId \
    --output=text);
do
    aws ec2 describe-instances --instance-ids $ID \
        --query Reservations[].Instances[].PublicIpAddress \
        --output text
done

Выводит список публичных IP-адресов.Вы также можете просто выполнить запрос внутри круглых скобок for ID in $(...), чтобы просто получить идентификаторы экземпляров

Хотите что-то другое?

Не стесняйтесь взглянуть на структуру

aws elb describe-load-balancers --load-balancer-name $ELB_NAME
aws ec2 describe-instances --instance-ids $INSTANCE_ID

и соответственно измените запрос!

2 голосов
/ 13 апреля 2013

Если кто-то приходит сюда из поиска, чтобы выяснить, почему команда elb-describe-lbs ничего не возвращает, когда у них запущены ELB, я понял, что мне нужно добавить EC2_REGION=eu-west-1 в мои переменные среды (или использовать команду elb-describe-lbs --region)

1 голос
/ 15 февраля 2016

Если вы хотите увидеть все ваши ELB и вложенные экземпляры, используйте JMESPath , например:

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

Результат

[
    {
        "ELB": "my_name",
        "InstanceId": [
            "i-0cc72"
        ]
    },
    {
        "ELB": "my_name2",
        "InstanceId": [
            "i-02ff5f",
            "i-09e467"
        ]
    }
]

Если вы знаете имяELB и хотите посмотреть, что подключено, используйте JMESPath так:

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

Результат:

[
    {
        "ELB": "my_name",
        "InstanceId": [
            "i-02ff5f72",
            "i-09e46743"
        ]
    }
]
0 голосов
/ 05 апреля 2019

aws elb description-load-balancerrs - load-balancer-name "LB_NAME" | grep "InstanceId" | awk '{print $ 2}' | sed 's / \ "// g'

0 голосов
/ 08 августа 2017

Вы можете зациклить все идентификаторы экземпляров балансировщика нагрузки следующим образом:

while read -r lb ; do echo -e "\n\n start lb: $lb " ; \
echo run cmd on lb: $lb ; echo " stop  lb: $lb" ; \
done < <(aws elb describe-load-balancers --query \
'LoadBalancerDescriptions[].Instances[].InstanceId' \
 --profile dev|perl -nle 's/\s+/\n/g;print')

Вы можете зациклить имена балансировщиков нагрузки следующим образом:

    # how-to loop trough all your load balancer names 
    while read -r lb ; do \
        echo -e "\n\n start lb: $lb " ; \
        echo run cmd on lb: $lb ; \
        echo " stop  lb: $lb" ; \
    done < <(aws elb describe-load-balancers --query \
    'LoadBalancerDescriptions[].LoadBalancerName' \
    --profile rnd|perl -nle 's/\s+/\n/g;print')

При условии, что вы настроили свой aws cli: источник: http://docs.aws.amazon.com/cli/latest/topic/config-vars.html cat << "EOF"> ~ / .aws / config

[profile dev]
output = text
region = us-east-1
[profile dev]
output = text
region = us-east-1
[default]
output = text
region = Global

EOF 

И настроил ваши учетные данные безопасности:

    # in aws admin console :
    # Services => iam => users => <<your_username>> => Security Credentials => Access Keys
    # configure the aws cli
    cat << "EOF" > ~/.aws/credentials
    [dev]
    aws_access_key_id = <<your_aws_access_key_id_in_the_dev_environment>>
    aws_secret_access_key = <<your_aws_secret_access_key_in_dev_env>>
    [dev]
    aws_access_key_id = <<your_aws_access_key_id_in_the_dev_environment>>
    aws_secret_access_key = <<your_aws_secret_access_key_in_dev_env>>
    [default]
    aws_access_key_id = <<your_aws_access_key_id_in_the_dev_environment>>
    aws_secret_access_key = <<your_aws_secret_access_key_in_dev_env>>
    EOF
0 голосов
/ 27 апреля 2016

В node.js вы можете сделать это, используя aws-sdk.

var AWS = require('aws-sdk')
var options = {
  accessKeyId: 'accessKeyId',
  secretAccessKey: 'secretAccessKey',
  region: 'region'
}
var elb = new AWS.ELB(options)

elb.describeLoadBalancers({LoadBalancerNames: ['elbName']}, function(err, data) {
  if (err) {
    console.log('err: ', err)
  }
  else {
    console.log('data: ', data.LoadBalancerDescriptions)
  }
})

data.LoadBalancerDescriptions является массивом, и каждый элемент в массиве является объектом со свойством Instances, которое имеет идентификатор экземпляра.

0 голосов
/ 07 января 2016

заменить INSTANCEID на фактический идентификатор экземпляра

aws elb describe-load-balancers --query "LoadBalancerDescriptions[*].{ID:LoadBalancerName,InstanceId:Instances[?InstanceId=='INSTANCEID'].InstanceId}[*].{ID:ID,InstanceId:InstanceId[0]}" --output=text | grep INSTANCEID | awk '{print $1}'

0 голосов
/ 04 февраля 2014

Вы можете использовать инструменты командной строки AWS с некоторыми средствами bash:

elb-describe-instance-health loadbalancer_name --region eu-west-1 | awk '{ print $2 }' | xargs ec2-describe-instances --region eu-west-1 | grep ^INSTANCE | awk '{ print $4 }'

Это даст вам публичное DNS-имя для каждого экземпляра, подключенного к ELB, вы можете изменить столбцы awk соответственно, чтобы получить другиеподробности.

...