4 votes

Obtenir le nom de l'AWS ELB à partir d'une instance attachée

J'ai créé un ELB et ai attaché quelques instances à ce ELB. Donc quand je me connecte à l'une de ces instances attachées, j'aimerais saisir une commande ou exécuter un script nodejs qui peut me retourner son nom ELB. Est-ce possible? Je sais que je peux consulter sur la console AWS mais je cherche un moyen de le faire de manière programmée. Si possible, j'aimerais voir comment cela se fait en commande ou en utilisant le SDK AWS Nodejs.

Merci!

0 votes

Avez-vous consulté la documentation de l'API?

1 votes

@DrewKhoury, oui j'ai regardé le service de métadonnées et la documentation mais je n'ai rien trouvé de pertinent.

0 votes

Curieux de savoir pourquoi vous voudriez faire cela. S'il s'agit simplement d'identifier à quelle application une instance est associée, l'étiquetage pourrait être une meilleure approche.

8voto

Nestor Pina Points 71

Si quelqu'un vient ici à la recherche d'une solution purement bash.

Utiliser jq pour filtrer et analyser la réponse de la CLI AWS :

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

Aussi dans aws-codedeploy-samples, ils définissent cette fonction dans common_functions.sh. Je ne l'ai pas testé car j'utilise ASG, mais je suppose que cela fonctionnera

# Usage: get_elb_list 
#
#   Trouve tous les ELB auxquels cette instance est enregistrée. Après l'exécution, la variable
#   "INSTANCE_ELBS" contiendra la liste des load balancers pour l'instance donnée.
#
#   Si l'ID d'instance donné n'est pas trouvé enregistré sur des ELB, la fonction renvoie une valeur non nulle
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
}

2voto

Ameer Deen Points 3588

Je ne suis pas le meilleur en JavaScript, mais j'ai testé le code ci-dessous et il fonctionne. Il utilise essentiellement l'appel API "describeLoadBalancers" pour obtenir une liste de tous vos ELBs, puis itère à travers le résultat pour rechercher votre instance. Si votre instance est enregistrée avec un certain load balancer, son nom est affiché dans la console :

// Require AWS SDK for Javascript
var AWS = require('aws-sdk');

// Set API Keys and Region
AWS.config.update({
    "accessKeyId": "",
    "secretAccessKey": "",
    "region": "us-west-1" // spécifiez votre région
});

// Obtenir tous les load balancers
function GetLoadBalancers(fn)
{
    var elb = new AWS.ELB();
    elb.describeLoadBalancers(null, function(err, data) {
        fn(data)
    });
}

// Boucler à travers la réponse pour vérifier si ELB contient monInstanceId
var myInstanceId = "";
GetLoadBalancers(function(elbs){
    elbs.LoadBalancerDescriptions.forEach(function(elb){
      if(elb.Instances[0] != undefined){
        if (elb.Instances[0].InstanceId == myInstanceId){
            console.log(elb.LoadBalancerName);
        }
      }
    });
});

0 votes

Bien mais ne fonctionne pas avec AWS.ELBv2. Champ LoadBalancerDescriptions absent dans la réponse JSON de describeLoadBalancers dans ce cas.

2voto

Pahud Hsieh Points 21

Essayez ce script:

#!/bin/bash

instanceId='i-XXXXXXXXXXXXX'

aws elb describe-load-balancers --query \
"LoadBalancerDescriptions[?Instances[?InstanceId=='${instanceId}']].LoadBalancerName"

0voto

Samat Jain Points 165

Bien sûr. Utilisez le aws cli:

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

Les informations que vous recherchez se trouvent dans LoadBalancerDescriptions.Instances.

0 votes

"your-elb-name" est celui que je n'ai pas et c'est aussi celui que je veux obtenir.

1 votes

Ensuite, exécutez la commande ci-dessus sans le drapeau de nom pour obtenir tous les ELBs et itérez à travers eux. Toutes les informations sont là. Vous devez juste les filtrer.

0voto

Chris Vosnidis Points 626

Une instance pourrait être attachée à n'importe quel nombre de ELBs.

Vous pourriez utiliser l'API pour rechercher tous les ELBs pour votre instance.

Vous voudrez peut-être envisager d'ajouter une balise à votre EC2 avec des informations sur à quel ELB il est attaché, afin que vous puissiez le interroger (l'EC2) directement.

0 votes

Il n'existe donc aucune commande ou fichier permettant de récupérer ces informations. Merci Drew Khoury

1 votes

@NamNguyen - c'est incorrect. Tous les outils API AWS prennent en charge le marquage et l'interrogation via des balises. Même la console web prend en charge cela. Je pense que vous seriez bien avisé de passer quelques heures à lire la documentation AWS.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X