Method of finding instances attached to ELB

she*_*eki 11 amazon-ec2 amazon-web-services amazon-elb

I am using the Amazon AWS ELB command line tools. Is there a way of finding out the instances attached to a particular Elastic Load Balancer (ELB)?

Til*_*ill 10

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

我安装了新的AWS cli工具:

$ pip install awscli
Run Code Online (Sandbox Code Playgroud)

然后跑了:

$ 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]:
Run Code Online (Sandbox Code Playgroud)

此数据保存到~/.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"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

数据在LoadBalancerDescriptions.Instances.

我的负载均衡器被调用my-name- 这是您在创建时选择的名称.

老答案下面!

我不熟悉cli工具,但我使用了API.

我会检查这两个请求:

cli工具可能有类似的东西吗?

HTH!

  • DescribeLoadBalancers 未提供附加到负载均衡器的实例列表。这是我的理解。 (2认同)
  • 在文档中的`DescribeLoadbalancers`的示例响应中有一个`<Instances />`.如果这不起作用,请尝试`DescribeInstanceHealth`?它需要两个参数 - 可选的实例列表和负载均衡器名称.从我的理解,这应该def.如果省略实例列表并仅提供loadbalancer的名称,则返回所有这些实例. (2认同)

Mik*_*e D 7

假设您安装了aws-clijq,可以使用以下命令获取关联的ec2实例ID:

aws elb describe-load-balancers --load-balancer-name my-elb \
  | jq -r '.LoadBalancerDescriptions[].Instances[].InstanceId'
Run Code Online (Sandbox Code Playgroud)

这将返回与该ELB关联的ec2 ID.

旁注:我建议您设置aws cli配置文件,这样您就不必使用环境变量和区域参数(尽可能多).


Cyr*_*ris 6

因为我喜欢可以使用最少的搜索/替换和复制粘贴的答案

先决条件:已配置aws-cli

pip install awscli
aws configure
Run Code Online (Sandbox Code Playgroud)

配置:您的ELB名称

$ELB_NAME = "Your-elb-name"
Run Code Online (Sandbox Code Playgroud)

在终端中复制粘贴

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
Run Code Online (Sandbox Code Playgroud)

将输出公共IP列表.您也可以只在括号内执行查询for ID in $(...)以获取实例ID

想要不同的东西?

随意看看结构

aws elb describe-load-balancers --load-balancer-name $ELB_NAME
aws ec2 describe-instances --instance-ids $INSTANCE_ID
Run Code Online (Sandbox Code Playgroud)

并相应地更改查询!