Search code examples
pythonboto3aws-elb

KeyError: 'Load Balancer Addresses'


I have been working with BOTO 3 to describe all load balancers available in the account. I used the following snippet of code:

'elbv2=boto3.client('elbv2',aws_access_key_id=access_key_id,aws_secret_access_key=secret_key,region_name=region)
response=elbv2.describe_load_balancers()

print(response)

The response here stores the dict with all the information, like so:

{
    'LoadBalancers': [{
        'LoadBalancerArn': 'arn:aws:elasticloadbalancing:ap-south-1:407203256002:loadbalancer/net/aws-lb-02/9d4b15bfd6f579d3',
        'DNSName': 'aws-lb-02-9d4b15bfd6f579d3.elb.ap-south-1.amazonaws.com',
        'CanonicalHostedZoneId': 'ZVDDRBQ08TROA',
        'CreatedTime': datetime.datetime(2021, 3, 31, 11, 45, 6, 729000, tzinfo = tzutc()),
        'LoadBalancerName': 'aws-lb-02',
        'Scheme': 'internet-facing',
        'VpcId': 'vpc-0be01860',
        'State': {
            'Code': 'active'
        },
        'Type': 'network',
        'AvailabilityZones': [{
            'ZoneName': 'ap-south-1a',
            'SubnetId': 'subnet-ed5fb986',
            'LoadBalancerAddresses': []
        }, {
            'ZoneName': 'ap-south-1b',
            'SubnetId': 'subnet-89d285c5',
            'LoadBalancerAddresses': []
        }]]}"'

I want to access LoadBalancerAddress , which I tried like this:

LoadBalancers=response['LoadBalancers']
for i in LoadBalancers:
  AvailabilityZones=i['AvailabilityZones']
  for j in AvailabilityZones:
    LoadBalancerAddresses=i['LoadBalancerAddresses']

However, it throws an error saying that there is a keyword error for LoadBalancerAddresses, which I fail to understand. Please help in how should I access the variable.


Solution

  • you can use nested list comprehension here, like that:

    addresses = [x['LoadBalancerAddresses'] for res in aaa['LoadBalancers'] for x in res['AvailabilityZones']]
    

    or with ordinar nested lists:

    addresses = []
    for bal in aaa['LoadBalancers']:
        for zones in bal['AvailabilityZones']:
            addresses += zones['LoadBalancerAddresses']