Obtenha o nome do AWS ELB a partir de uma instância anexada

1

Eu criei um ELB e anexei algumas instâncias a este ELB. Portanto, quando eu fizer login em uma dessas instâncias anexadas, gostaria de digitar um comando ou executar um script de nodejs que possa me devolver o nome ELB. É possível? Eu sei que posso pesquisar no console da AWS, mas estou procurando uma maneira de pesquisá-lo programaticamente. Se possível, gostaria de ver como isso é feito em um dos comandos ou no AWS Nodejs SDK.

Obrigado!

    
por Nam Nguyen 03.04.2014 / 04:32

6 respostas

1

Eu não sou o melhor em JavaScript, mas testei o código abaixo e funciona. Ele basicamente usa a chamada da API "describeLoadBalancers" para obter uma lista de todos os seus ELBs e, em seguida, percorre o resultado para procurar sua instância. Se sua instância estiver registrada com um balanceador de carga específico, seu nome será enviado para o 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].InstanceId == myInstanceId){
            console.log(elb.LoadBalancerName);
        }
    });
});
    
por 04.04.2014 / 07:02
5

Se alguém vier aqui procurando uma solução pura.

Usando jq para filtrar e analisar a resposta da AWS CLI:

aws elb describe-load-balancers | jq -r '.LoadBalancerDescriptions[] | select(.Instances[].InstanceId == "<YOUR-INSTANCE-ID>") | .LoadBalancerName ' 

Também em aws-codedeploy-samples, eles definem essa função em common_functions.sh . Eu não testei como eu uso o ASG, mas suponho que funcionará

# 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
}
    
por 13.08.2015 / 21:05
1

Claro. Use o cli aws:

$ aws elb describe-load-balancers --load-balancer-name "your-elb-name"

As informações que você está procurando estão em LoadBalancerDescriptions.Instances .

    
por 03.04.2014 / 06:32
1

experimente este script:

#!/bin/bash

instanceId='i-XXXXXXXXXXXXX'

aws elb describe-load-balancers --query \
"LoadBalancerDescriptions[?Instances[?InstanceId=='${instanceId}']].LoadBalancerName"
    
por 17.08.2016 / 12:30
0

Uma instância pode ser anexada a qualquer número de ELBs.

Você pode usar a API para pesquisar todos os ELBs em sua instância.

Você pode querer considerar adicionar uma TAG ao seu EC2 com informações sobre qual ELB está anexado, para que possa consultá-la (o EC2) diretamente.

    
por 03.04.2014 / 07:30
0

Gostaria de acrescentar à excelente resposta de Paulo. Este script solicitará um ID de instância do 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"
    
por 07.03.2017 / 17:43