我创建了一个 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)。