Я создал один ELB и прикрепил к нему несколько экземпляров. Поэтому, когда я вхожу в один из этих подключенных экземпляров, я хотел бы ввести команду или запустить скрипт nodejs, который может вернуть мне его имя ELB. Является ли это возможным? Я знаю, что могу найти в консоли AWS, но я ищу способ найти это программно. Если возможно, я хотел бы посмотреть, как это делается в команде или в AWS Nodejs SDK.
Спасибо!
Если кто-то придет сюда в поисках чистого решения bash.
С помощью jq для фильтрации и анализа ответа AWS CLI:
aws elb describe-load-balancers | jq -r '.LoadBalancerDescriptions[] | select(.Instances[].InstanceId == "<YOUR-INSTANCE-ID>") | .LoadBalancerName '
Также в aws-codedeploy-samples они определяют эту функцию в common_functions.sh. Я не тестировал его, так как использую ASG, но полагаю, что он будет работать
# Usage: get_elb_list <EC2 instance ID>
#
# Finds all the ELBs that this instance is registered to. After execution, the variable
# "INSTANCE_ELBS" will contain the list of load balancers for the given instance.
#
# If the given instance ID isn't found registered to any ELBs, the function returns non-zero
get_elb_list() {
local instance_id=$1
local elb_list=""
local all_balancers=$($AWS_CLI elb describe-load-balancers \
--query LoadBalancerDescriptions[*].LoadBalancerName \
--output text | sed -e $'s/\t/ /g')
for elb in $all_balancers; do
local instance_health
instance_health=$(get_instance_health_elb $instance_id $elb)
if [ $? == 0 ]; then
elb_list="$elb_list $elb"
fi
done
if [ -z "$elb_list" ]; then
return 1
else
msg "Got load balancer list of: $elb_list"
INSTANCE_ELBS=$elb_list
return 0
fi
}
попробуйте этот сценарий:
#!/bin/bash
instanceId='i-XXXXXXXXXXXXX'
aws elb describe-load-balancers --query \
"LoadBalancerDescriptions[?Instances[?InstanceId=='${instanceId}']].LoadBalancerName"
Я не лучший в JavaScript, но я протестировал приведенный ниже код и работает. Он в основном использует вызов API «describeLoadBalancers» для получения списка всех ваших ELB, а затем перебирает результат, чтобы найти ваш экземпляр. Если ваш экземпляр зарегистрирован в определенном балансировщике нагрузки, его имя выводится на консоль:
// Require AWS SDK for Javascript
var AWS = require('aws-sdk');
// Set API Keys and Region
AWS.config.update({
"accessKeyId": "<your access key>",
"secretAccessKey": "<your secret key>",
"region": "us-west-1" // specify your region
});
// Get All Load Balancers
function GetLoadBalancers(fn)
{
var elb = new AWS.ELB();
elb.describeLoadBalancers(null,function(err, data) {
fn(data)
});
}
// Loop through response to check if ELB contains myInstanceId
var myInstanceId = "<your instance id>";
GetLoadBalancers(function(elbs){
elbs.LoadBalancerDescriptions.forEach(function(elb){
if(elb.Instances[0] != undefined){
if (elb.Instances[0].InstanceId == myInstanceId){
console.log(elb.LoadBalancerName);
}
}
});
});
Конечно. Используйте aws cli:
$ aws elb describe-load-balancers --load-balancer-name "your-elb-name"
Информация, которую вы ищете, находится в LoadBalancerDescriptions.Instances
.
Экземпляр может быть присоединен к любому количеству ELB.
Вы можете использовать API для поиска всех ELB для вашего экземпляра.
Вы можете рассмотреть возможность добавления тега к вашему EC2 с информацией о том, к какому ELB он прикреплен, чтобы вы могли запросить его (EC2) напрямую.
Я хотел бы добавить к отличному ответу Пола. Этот сценарий запросит идентификатор экземпляра EC2
echo "Enter EC2 instance name?"
read instanceId
echo
echo The instance name is: $instanceId
echo
aws elb describe-load-balancers --query \
"LoadBalancerDescriptions[?Instances[?InstanceId=='${instanceId}']].LoadBalancerName"