如何查询AWS以使用python boto3模块获取ELB名称和附加实例?

时间:2017-03-17 00:22:16

标签: amazon-web-services boto3 amazon-elb

我找不到boto3的代码。我可以单独获取elb名称和InstanceID,但无法将它们链接在一起以查找ELB名称的附加实例。

3 个答案:

答案 0 :(得分:7)

经典负载均衡器

boto3 describe_load_balancers()函数返回实例列表:

{
    'LoadBalancerDescriptions': [
        {
            'LoadBalancerName': 'string',
            'DNSName': 'string',
            ....
            'Instances': [
                {
                    'InstanceId': 'string'
                },
            ],
            ....
        },
    ],
    'NextMarker': 'string'
}

Instances部分返回负载均衡器的实例ID。

应用程序负载均衡器(ELBv2)

这个更难。应用程序负载均衡器具有多个目标组。实例上的端口已注册到目标组。

似乎列出目标组中实例的唯一命令是describe_target_health(),它返回实例端口(因为一个实例可以提供多个目标):

{
    'TargetHealthDescriptions': [
        {
            'Target': {
                'Id': 'i-0f76fade',
                'Port': 80,
            },
            'TargetHealth': {
                'Description': 'Given target group is not configured to receive traffic from ELB',
                'Reason': 'Target.NotInUse',
                'State': 'unused',
            },
        },
        {
            'HealthCheckPort': '80',
            'Target': {
                'Id': 'i-0f76fade',
                'Port': 80,
            },
            'TargetHealth': {
                'State': 'healthy',
            },
        },
    ],
    'ResponseMetadata': {
        '...': '...',
    },
}

答案 1 :(得分:2)

这是我的解决方案,我让它工作。谢谢约翰。

elbList = boto3.client('elb')
ec2 = boto3.resource('ec2')

bals = elbList.describe_load_balancers()
for elb in bals['LoadBalancerDescriptions']:
    print 'ELB DNS Name : ' + elb['DNSName']
    for ec2Id in elb['Instances']:
        running_instances = \
            ec2.instances.filter(Filters=[{'Name': 'instance-state-name'
                                 , 'Values': ['running']},
                                 {'Name': 'instance-id',
                                 'Values': [ec2Id['InstanceId']]}])
        for instance in running_instances:
            print("              Instance : " + instance.public_dns_name);

答案 2 :(得分:0)

这是一个简单的脚本,用于查找附加到ELB的实例列表,作为输入,您可能必须提供ELB名称

#!/usr/bin/python

import boto3
import sys
import string


elb_name = raw_input("What is ELB name? :: ")

print ("\n")
print ("THE LIST OF INSTANCES ATTACHED TO THIS ELB IS \n")
elbList = boto3.client('elb')
ec2 = boto3.resource('ec2')

bals = elbList.describe_load_balancers()
for elb in bals['LoadBalancerDescriptions']:

    set2 = elb['LoadBalancerName']
    if elb_name == set2 :
        inst =  elb['Instances']
        ct = sys.getrefcount(inst)
        count = ct
        for x in range(count):
            iv = elb['Instances'][x]
            id = str(iv.values())
            id = string.replace(id, "'", "")
            print id.strip('[]')