从连接的实例获取AWS ELB名称

我创build了一个ELB并附加了几个实例给ELB。 所以,当我login到这些附加的实例之一,我想input一个命令或运行一个nodejs脚本,可以返回我的ELB名称。 可能吗? 我知道我可以查看AWS控制台,但我正在寻找一种方法来查找它的编程。 如果可能,我想看看它是如何在命令或AWS Nodejs SDK中完成的。

谢谢!

我不是JavaScript中最伟大的,但是我testing了下面的代码并且工作。 它基本上使用“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].InstanceId == myInstanceId){ console.log(elb.LoadBalancerName); } }); }); 

如果有人来这里寻找纯粹的bash解决scheme。

使用jq筛选和parsingAWS CLI的响应:

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

同样在aws-codedeploy-samples中,它们在common_functions.sh中定义了这个函数。 我没有testing,因为我使用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 } 

当然。 使用aws cli:

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

您正在查找的信息位于LoadBalancerDescriptions.Instances

试试这个脚本:

 #!/bin/bash instanceId='i-XXXXXXXXXXXXX' aws elb describe-load-balancers --query \ "LoadBalancerDescriptions[?Instances[?InstanceId=='${instanceId}']].LoadBalancerName" 

一个实例可以连接到任意数量的ELB。

您可以使用API​​来search您的实例的所有ELB。

您可能需要考虑为您的EC2添加一个TAG,并附上关于哪个ELB的信息,以便您直接查询(EC2)。

我想补充保罗的出色答案。 该脚本将提示inputEC2实例ID

 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"