web-dev-qa-db-ja.com

アタッチされたインスタンスからAWSELB名を取得します

1つのELBを作成し、このELBにいくつかのインスタンスをアタッチしました。したがって、これらの接続されたインスタンスの1つにログインするときに、コマンドを入力するか、ELB名を返すことができるnodejsスクリプトを実行したいと思います。出来ますか? AWSコンソールで検索できることは知っていますが、プログラムで検索する方法を探しています。可能であれば、コマンドまたはAWS NodejsSDKでどのように実行されるかを確認したいと思います。

ありがとう!

2
Nam Nguyen

私は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
Ameer Deen

誰かが純粋なbashソリューションを探してここに来る場合。

jq を使用してAWS CLIの応答をフィルタリングおよび解析します:

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

また、aws-codedeploy-samplesでは、この関数を common_functions.sh で定義しています。 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
}
6
Nestor Pina

承知しました。 aws cliを使用します:

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

探している情報はLoadBalancerDescriptions.Instancesにあります。

1
EEAA

このスクリプトを試してください:

#!/bin/bash

instanceId='i-XXXXXXXXXXXXX'

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

インスタンスは、任意の数のELBにアタッチできます。

APIを使用して、インスタンスのすべてのELBを検索できます。

アタッチされているELBに関する情報を含むTAGをEC2に追加することを検討して、直接クエリ(EC2)できるようにすることをお勧めします。

0
Drew Khoury

ポールの素晴らしい答えに付け加えたいと思います。このスクリプトは、EC2インスタンス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"
0
Robert Jackson