Get AWS ELB name from an attached instance
Solution 1
I'm not the greatest in JavaScript but I tested the code below and works. It basically uses the "describeLoadBalancers" API call to get a list of all your ELBs and then iterates through the result to look for your instance. If your instance is registered with a particular load balancer, it's name is output to the console:
// 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);
}
}
});
});
Solution 2
If anybody comes here looking for a pure bash solution.
Using jq to filter and parse the response of AWS CLI :
aws elb describe-load-balancers | jq -r '.LoadBalancerDescriptions[] | select(.Instances[].InstanceId == "<YOUR-INSTANCE-ID>") | .LoadBalancerName '
Also in aws-codedeploy-samples they define this function in common_functions.sh. I haven't tested it as I use ASG, but I suppose it will work
# 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
}
Solution 3
try this script:
#!/bin/bash
instanceId='i-XXXXXXXXXXXXX'
aws elb describe-load-balancers --query \
"LoadBalancerDescriptions[?Instances[?InstanceId=='${instanceId}']].LoadBalancerName"
Solution 4
Sure. Use the aws cli:
$ aws elb describe-load-balancers --load-balancer-name "your-elb-name"
The information you're looking for is in LoadBalancerDescriptions.Instances
.
Related videos on Youtube
Nam Nguyen
Updated on September 18, 2022Comments
-
Nam Nguyen over 1 year
I created one ELB and attached a few instances to this ELB. So when I login into one of these attached instance, I would like to type a command or run a nodejs script that can return me the its ELB name. Is it possible? I know I can look up on AWS console but I'm looking for a way to look it up programmatically. If possible, I would like to see how it is done in either command or AWS Nodejs SDK.
Thanks!
-
Drew Khoury about 10 yearsHave you looked at the documentation for the API?
-
Nam Nguyen about 10 years@DrewKhoury, yes I looked into metada service and doc but could not find anything related.
-
Tim over 5 yearsCurious why you would want to do this. If it's simply to identify which application an instance is associated with tagging could be a better approach.
-
-
Nam Nguyen about 10 years"your-elb-name" is the one that I don't have and also is the one that I want to get.
-
Nam Nguyen about 10 yearsso there is no such command or file that can retrieve that info. Thanks Drew Khoury
-
EEAA about 10 yearsWell then run the above command without the name flag to get all the ELBs and iterate through them. The information is all there. You just need to filter it out.
-
EEAA about 10 years@NamNguyen - that's incorrect. All of the AWS API tools support tagging and querying via tags. Even the web console supports this. I think you'd be well-served by spending a couple hours reading AWS docs.
-
Atul almost 5 yearsGood but doesn't work with
AWS.ELBv2
. FieldLoadBalancerDescriptions
absent in JSON response ofdescribeLoadBalancers
in that case.