Я использую инструменты командной строки Amazon AWS ELB. Есть ли способ узнать экземпляры, прикрепленные к определенному балансировщику упругих нагрузок (ELB)?
Метод поиска экземпляров, прикрепленных к ELB
Ответ 1
2013/12/18: обновить это, и поскольку ссылки мертвы!
Я установил новые AWI-инструменты 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
.
Затем я могу найти экземпляры, связанные с loadbalancer следующим образом:
$ 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
.
Мой loadbalancer называется my-name
- это имя, которое вы выбрали при его создании.
Старый ответ ниже!
Я не знаком с инструментом cli, но я использовал API.
Я бы проверял эти два запроса:
Инструмент cli, вероятно, имеет что-то подобное?
НТН!
Ответ 2
Предполагая, что вы aws-cli и jq, вы можете использовать следующую команду для получения связанных идентификаторов экземпляров ec2:
aws elb describe-load-balancers --load-balancer-name my-elb \
| jq -r '.LoadBalancerDescriptions[].Instances[].InstanceId'
Это вернет идентификаторы ec2, связанные с этим ELB.
Боковое примечание. Я рекомендую вам настроить aws cli профили, поэтому вам не нужно возиться с переменными окружения и параметрами области (столько же).
Ответ 3
Потому что мне нравятся ответы, которые можно использовать с минимальным количеством поиска/замены и копирования папок
Предварительные требования: настроен 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
и соответствующим образом измените запрос!
Ответ 4
Если кто-то прибыл сюда из поиска, почему команда elb-describe-lbs
ничего не возвращает, когда у них есть ELB и работает, я понял, что мне нужно добавить EC2_REGION=eu-west-1
в мои переменные среды (или использовать команду elb-describe-lbs --region
)
Ответ 5
Если вы хотите увидеть все ваши 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"
]
}
]
Ответ 6
заменить 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}'
Ответ 7
В 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
, имеющим идентификатор экземпляра.
Ответ 8
Вы можете перебрать все загружаемые идентификаторы экземпляра балансировки следующим образом:
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: src: 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
Ответ 9
aws elb description-load-balrsrs - имя-балансировщика нагрузки "LB_NAME" | grep "InstanceId" | awk '{print $ 2}' | sed 's/\ "//g'
Ответ 10
Сначала сделайте elb-describe-lbs
, чтобы получить список балансировщика нагрузки и их имена.
Затем сделайте elb-describe-instance-health <LB_NAME>
, чтобы получить список экземпляров за этим балансировщиком нагрузки. LB_NAME - это значение второго столбца на выходе elb-describe-lbs
.
Ответ 11
Вы можете использовать инструменты командной строки 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 соответственно, чтобы получить другие сведения.