Amazon ec2 查找附加到ELB的实例的方法

Amazon ec2 查找附加到ELB的实例的方法,amazon-ec2,amazon-web-services,amazon-elb,Amazon Ec2,Amazon Web Services,Amazon Elb,我正在使用Amazon AWS ELB命令行工具。有没有办法找到连接到特定弹性负载平衡器(ELB)的实例?2013/12/18:更新此实例,因为链接已断开 我安装了新的AWS cli工具: $ pip install awscli 然后跑: $ aws configure

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

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

然后我可以找到连接到loadbalancer的实例,如下所示:

$ 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

我的loadbalancer称为
我的名字
——这是您创建它时选择的名字

下面是一个古老的答案

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

我会检查这两个请求:

cli工具可能与这些类似


首先请描述lbs以获得负载平衡器及其名称的列表


然后执行
elb description instance health
,以获取负载平衡器后面的实例列表。LB_NAME是
elb descripe lbs

输出中第二列的值,如果有人搜索到
elb descripe lbs
命令在ELBs启动并运行时为什么不返回任何结果,我意识到我需要将
EC2_REGION=eu-west-1
添加到我的环境变量中(或使用
elb descripe lbs--region
命令)

您可以将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列以获取其他详细信息。

假设您已经安装了,您可以使用以下命令获取相关的ec2实例ID:

aws elb describe-load-balancers --load-balancer-name my-elb \
  | jq -r '.LoadBalancerDescriptions[].Instances[].InstanceId'
这将返回与该ELB关联的ec2 ID


旁注:我建议您进行设置,这样您就不必(尽可能)处理环境变量和区域参数。

用实际实例id替换INSTANCEID


aws elb描述负载平衡器--查询“LoadBalancerDescriptions[*]。{ID:LoadBalancerName,InstanceId:InstanceId[?InstanceId=='InstanceId'].InstanceId}[*]。{ID:ID,InstanceId:InstanceId[0]}--输出=text | grep InstanceId | awk'{print$1}'
如果您想查看所有elb和所附的实例,请这样使用:

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"
        ]
    }
]

在node.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。

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

先决条件:已配置aws cli 配置:您的ELB名称 复制粘贴终端 将输出公共IP的列表。您也可以只在“$(…)”中ID的
括号内执行查询,以获取实例ID

想要不一样的东西吗? 请随意查看

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

并相应地更改查询!

您可以通过所有负载平衡器实例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')
并配置了您的安全凭据:

    # 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
aws管理控制台中的
#
#服务=>iam=>users=>=>Security Credentials=>Access Key
#配置aws cli
cat~/.aws/证书
[开发人员]
aws\u访问\u密钥\u id=
aws\u密码\u访问\u密钥=
[开发人员]
aws\u访问\u密钥\u id=
aws\u密码\u访问\u密钥=
[默认值]
aws\u访问\u密钥\u id=
aws\u密码\u访问\u密钥=
EOF

aws elb描述负载平衡器——负载平衡器名称“LB_name”| grep“InstanceId”| awk'{print$2}'| sed's/\"//g'

DescribeLoadBalancers没有给出连接到loadbalancer的实例列表。这是我的理解。文档中的
DescribeLoadBalancers
的示例响应中有一个
。如果这不起作用,请尝试
DescribeInstanceHealth
?它需要两个参数—可选的实例列表和负载balancer名称。据我所知,这应该定义。如果省略实例列表,只提供负载平衡器的名称,则返回所有实例。这两个链接现在都已失效。它将为您提供实例ID。
aws-elb描述负载平衡器--负载平衡器名称'myelb'--查询负载平衡器描述[*].Instances
这对我非常有用。很明显,您有我们没有的别名
elb descripe lbs
在我的控制台中肯定不可用。这在2013年可能是正确的,但今天的命令是
aws elb descripe load balancers
aws elb description instance health
,它为您提供了实例ids.
aws-elb描述负载平衡器--负载平衡器名称'myelb'--查询负载平衡器描述[*].Instances
我不明白。首先它将
LoadBalancerName
重命名为
ID
,然后重命名为
ELB
。可以删除
--query
参数的第二部分:
aws ELB descripe loadBalancer--query“LoadBalancerDescriptions[]。{LoadBalancerName:LoadBalancerName,InstanceId:InstanceId[].InstanceId}”--输出=json
aws elb describe-load-balancers --load-balancer-name $ELB_NAME
aws ec2 describe-instances --instance-ids $INSTANCE_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')
[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