Get AWS ELB name from an attached instance

8,613

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.

Share:
8,613

Related videos on Youtube

Nam Nguyen
Author by

Nam Nguyen

Updated on September 18, 2022

Comments

  • Nam Nguyen
    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
      Drew Khoury about 10 years
      Have you looked at the documentation for the API?
    • Nam Nguyen
      Nam Nguyen about 10 years
      @DrewKhoury, yes I looked into metada service and doc but could not find anything related.
    • Tim
      Tim over 5 years
      Curious 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
    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
    Nam Nguyen about 10 years
    so there is no such command or file that can retrieve that info. Thanks Drew Khoury
  • EEAA
    EEAA about 10 years
    Well 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
    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
    Atul almost 5 years
    Good but doesn't work with AWS.ELBv2. Field LoadBalancerDescriptions absent in JSON response of describeLoadBalancers in that case.