Please help me get around this issue: When I try to run the following script, it always returns this error: KeyError: 'AvailabilityZone'
client.describe_instances(Filters=[ {'Name': 'instance-state-name', 'Values': [ 'running', ] } , ], )
Also, I observed that there is no AvailabilityZone string in the response.
Example snippet:
import boto3
import collections
ec2 = boto3.resource('ec2')
instances = ec2.instances.filter(
    Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
running_instances = {}
for instance in instances:
    az = instance.placement['AvailabilityZone']
    os = instance.platform
    instance_type = instance.instance_type
    if os is None:
        os = 'Linux/UNIX'
    else:
        os = 'Windows'
    if az not in running_instances:
        running_instances[az] = {}
    if os not in running_instances[az]:
        running_instances[az][os] = {}
    if instance_type not in running_instances[az][os]:
        running_instances[az][os][instance_type] = 0
    running_instances[az][os][instance_type] += 1
client = boto3.client('ec2')
response = client.describe_reserved_instances(
    Filters=[
        {
            'Name': 'state',
            'Values': [
                'active',
            ]
        }
    ],
)
cnt = collections.Counter()
reserved_instances = {}
for instance in response['ReservedInstances']:
    az = instance['AvailabilityZone']
    os = instance['ProductDescription']
    instance_type = instance['InstanceType']
    instance_count = instance['InstanceCount']
    if az not in reserved_instances:
        reserved_instances[az] = {}
    if os not in reserved_instances[az]:
        reserved_instances[az][os] = {}
    if instance_type not in reserved_instances[az][os]:
        reserved_instances[az][os][instance_type] = 0
    reserved_instances[az][os][instance_type] += instance_count
print("****** Running Instances breakdown *****")
print(running_instances)
print("****** Reserved Instance breakdown *****")
print(reserved_instances)