从附加实例获取 AWS ELB 名称

从附加实例获取 AWS ELB 名称

我创建了一个 ELB 并将几个实例附加到此 ELB。因此,当我登录其中一个附加实例时,我想输入命令或运行可以返回其 ELB 名称的 nodejs 脚本。这可能吗?我知道我可以在 AWS 控制台上查找,但我正在寻找一种以编程方式查找它的方法。如果可能的话,我想看看如何在命令或 AWS Nodejs SDK 中完成它。

谢谢!

答案1

我不是 JavaScript 方面的高手,但我测试了下面的代码,并且成功了。它基本上使用“describeLoadBalancers”API 调用来获取所有 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);
        }
      }
    });
});

答案2

如果有人来这里寻找纯 bash 解决方案。

使用杰奇过滤并解析 AWS CLI 的响应:

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

此外,在 aws-codedeploy-samples 中,他们定义了这个函数通用函数。由于我使用 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
}

答案3

尝试这个脚本:

#!/bin/bash

instanceId='i-XXXXXXXXXXXXX'

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

答案4

一个实例可以附加到任意数量的 ELB。

您可以使用 API 搜索您的实例的所有 ELB。

您可能需要考虑向您的 EC2 添加一个 TAG,其中包含有关它连接到哪个 ELB 的信息,以便您可以直接查询它(EC2)。

相关内容