代码之家  ›  专栏  ›  技术社区  ›  sheki

ELB实例的查找方法

  •  10
  • sheki  · 技术社区  · 14 年前

    我正在使用amazonaws ELB命令行工具。有没有办法找出连接到特定弹性负载平衡器(ELB)的实例?

    11 回复  |  直到 13 年前
        1
  •  9
  •   Till    11 年前

    2013/12/18:更新这个,因为链接已经死了!

    我安装了新的AWS cli工具:

    $ pip install awscli
    

    然后运行:

    $ aws configure                                                                                                                                                
    AWS Access Key ID [None]: my-key
    AWS Secret Access Key [None]: my-secret
    Default region name [None]: us-east-1
    Default output format [None]:
    

    ~/.aws/config .

    $ aws elb describe-load-balancers --load-balancer-name "my-name"
    {
        "LoadBalancerDescriptions": [
            {
                "Subnets": [],
                "CanonicalHostedZoneNameID": "ID",
                "CanonicalHostedZoneName": "my-name-foo.us-east-1.elb.amazonaws.com",
                "ListenerDescriptions": [
                    {
                        "Listener": {
                            "InstancePort": 80,
                            "LoadBalancerPort": 80,
                            "Protocol": "HTTP",
                            "InstanceProtocol": "HTTP"
                        },
                        "PolicyNames": []
                    },
                    {
                        "Listener": {
                            "InstancePort": 80,
                            "SSLCertificateId": "arn:aws:iam::x:server-certificate/x-ssl-prod",
                            "LoadBalancerPort": 443,
                            "Protocol": "HTTPS",
                            "InstanceProtocol": "HTTP"
                        },
                        "PolicyNames": [
                            "AWSConsole-SSLNegotiationPolicy-api-production"
                        ]
                    }
                ],
                "HealthCheck": {
                    "HealthyThreshold": 10,
                    "Interval": 30,
                    "Target": "HTTP:80/healthy.php",
                    "Timeout": 5,
                    "UnhealthyThreshold": 2
                },
                "BackendServerDescriptions": [],
                "Instances": [
                    {
                        "InstanceId": "i-FIRST-INSTANCEID"
                    },
                    {
                        "InstanceId": "i-SECOND-INSTANCEID"
                    }
                ],
                "DNSName": "my-name-foo.us-east-1.elb.amazonaws.com",
                "SecurityGroups": [],
                "Policies": {
                    "LBCookieStickinessPolicies": [],
                    "AppCookieStickinessPolicies": [],
                    "OtherPolicies": [
                        "AWSConsole-SSLNegotiationPolicy-my-name"
                    ]
                },
                "LoadBalancerName": "my-name",
                "CreatedTime": "2013-08-05T16:55:22.630Z",
                "AvailabilityZones": [
                    "us-east-1d"
                ],
                "Scheme": "internet-facing",
                "SourceSecurityGroup": {
                    "OwnerAlias": "amazon-elb",
                    "GroupName": "amazon-elb-sg"
                }
            }
        ]
    }
    

    数据在 LoadBalancerDescriptions.Instances

    我的负载平衡器叫做 my-name 这是创建时选择的名称。

    下面是老答案!

    我会检查这两个请求:

    cli工具可能与这些类似?

    嗯!

        2
  •  8
  •   Mike D    9 年前

    aws-cli jq 如果已安装,则可以使用以下命令获取关联的ec2实例ID:

    aws elb describe-load-balancers --load-balancer-name my-elb \
      | jq -r '.LoadBalancerDescriptions[].Instances[].InstanceId'
    

    这将返回与该ELB相关联的ec2 id。

    旁注:我建议你安装 aws cli profiles

        3
  •  6
  •   Cyril Duchon-Doris    8 年前

    先决条件:已配置aws cli

    pip install awscli
    aws configure
    

    配置:您的ELB名称

    $ELB_NAME = "Your-elb-name"
    

    复制粘贴终端

    for ID in $(aws elb describe-load-balancers --load-balancer-name $ELB_NAME \
        --query LoadBalancerDescriptions[].Instances[].InstanceId \
        --output=text);
    do
        aws ec2 describe-instances --instance-ids $ID \
            --query Reservations[].Instances[].PublicIpAddress \
            --output text
    done
    

    将输出公共IP的列表。也可以只在 for ID in $(...) 获取实例ID

    请随意看看

    aws elb describe-load-balancers --load-balancer-name $ELB_NAME
    aws ec2 describe-instances --instance-ids $INSTANCE_ID
    

        4
  •  2
  •   CharlesA    12 年前

    如果有人来找我 elb-describe-lbs EC2_REGION=eu-west-1 我的环境变量(或使用 elb-describe-lbs --region

        5
  •  1
  •   Art    9 年前

    用实际实例id替换实例id

    aws elb describe-load-balancers --query "LoadBalancerDescriptions[*].{ID:LoadBalancerName,InstanceId:Instances[?InstanceId=='INSTANCEID'].InstanceId}[*].{ID:ID,InstanceId:InstanceId[0]}" --output=text | grep INSTANCEID | awk '{print $1}'

        6
  •  1
  •   Colin MacKenzie - III    8 年前

    如果您想查看所有ELB和所附实例,请使用 JMESPath 这样地:

    aws elb describe-load-balancers --query "LoadBalancerDescriptions[*].{ID:LoadBalancerName,InstanceId:Instances[*].InstanceId}[*]. {ELB:ID,InstanceId:InstanceId[*]}" --output=json
    

    结果

    [
        {
            "ELB": "my_name",
            "InstanceId": [
                "i-0cc72"
            ]
        },
        {
            "ELB": "my_name2",
            "InstanceId": [
                "i-02ff5f",
                "i-09e467"
            ]
        }
    ]
    

    如果您知道ELB的名称并想查看所附内容,请使用如下JMESPath:

    aws elb describe-load-balancers --load-balancer-name "my_name" --query "LoadBalancerDescriptions[].{ID:LoadBalancerName,InstanceId:Instances[].InstanceId}[].{ELB:ID,InstanceId:InstanceId[]}" --output=json
    

    结果:

    [
        {
            "ELB": "my_name",
            "InstanceId": [
                "i-02ff5f72",
                "i-09e46743"
            ]
        }
    ]
    
        7
  •  0
  •   rohithpr    9 年前

    在节点.js你可以使用 aws-sdk .

    var AWS = require('aws-sdk')
    var options = {
      accessKeyId: 'accessKeyId',
      secretAccessKey: 'secretAccessKey',
      region: 'region'
    }
    var elb = new AWS.ELB(options)
    
    elb.describeLoadBalancers({LoadBalancerNames: ['elbName']}, function(err, data) {
      if (err) {
        console.log('err: ', err)
      }
      else {
        console.log('data: ', data.LoadBalancerDescriptions)
      }
    })
    

    data.LoadBalancerDescriptions 是一个数组,数组中的每个元素都是具有 Instances 具有实例id的。

        8
  •  0
  •   Yordan Georgiev    8 年前

    您可以循环使用所有负载平衡器实例ID,如下所示:

    while read -r lb ; do echo -e "\n\n start lb: $lb " ; \
    echo run cmd on lb: $lb ; echo " stop  lb: $lb" ; \
    done < <(aws elb describe-load-balancers --query \
    'LoadBalancerDescriptions[].Instances[].InstanceId' \
     --profile dev|perl -nle 's/\s+/\n/g;print')
    

    您可以循环使用负载平衡器名称,如下所示:

        # how-to loop trough all your load balancer names 
        while read -r lb ; do \
            echo -e "\n\n start lb: $lb " ; \
            echo run cmd on lb: $lb ; \
            echo " stop  lb: $lb" ; \
        done < <(aws elb describe-load-balancers --query \
        'LoadBalancerDescriptions[].LoadBalancerName' \
        --profile rnd|perl -nle 's/\s+/\n/g;print')
    

    如果已配置aws cli: http://docs.aws.amazon.com/cli/latest/topic/config-vars.html cat<<“EOF”>~/.aws/配置

    [profile dev]
    output = text
    region = us-east-1
    [profile dev]
    output = text
    region = us-east-1
    [default]
    output = text
    region = Global
    
    EOF 
    

    并配置了安全凭据:

        # in aws admin console :
        # Services => iam => users => <<your_username>> => Security Credentials => Access Keys
        # configure the aws cli
        cat << "EOF" > ~/.aws/credentials
        [dev]
        aws_access_key_id = <<your_aws_access_key_id_in_the_dev_environment>>
        aws_secret_access_key = <<your_aws_secret_access_key_in_dev_env>>
        [dev]
        aws_access_key_id = <<your_aws_access_key_id_in_the_dev_environment>>
        aws_secret_access_key = <<your_aws_secret_access_key_in_dev_env>>
        [default]
        aws_access_key_id = <<your_aws_access_key_id_in_the_dev_environment>>
        aws_secret_access_key = <<your_aws_secret_access_key_in_dev_env>>
        EOF
    
        9
  •  0
  •   nirmal rajan    6 年前

        10
  •  -1
  •   ErJab    12 年前

    elb-describe-lbs 获取负载平衡器及其名称的列表。

    那就做吧 elb-describe-instance-health <LB_NAME> elb描述lbs

        11
  •  -2
  •   Alaa Qutaish    11 年前

    可以将AWS命令行工具与一些bash管道结合使用:

    elb-describe-instance-health loadbalancer_name --region eu-west-1 | awk '{ print $2 }' | xargs ec2-describe-instances --region eu-west-1 | grep ^INSTANCE | awk '{ print $4 }'
    

    这将为您提供连接到ELB的每个实例的公共DNS名称,您可以分别更改awk列以获取其他详细信息。