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)