Hi all,
Im wondering if someone can please please help me. I am trying to achieve the following. I want to create a python script which will eventually become a lambda. but for now I need to get it working as a script. I want it to go through my work aws account and list ALL untagged ebs volumes. From this, it should send me an email with a list of all the volumes it has found along with what ec2 instances they are attached to and the tags of those ec2 instances in a nice table. Below is the code which I have so far
In really helping someone can help me. Appreciate any help I can get.
Im wondering if someone can please please help me. I am trying to achieve the following. I want to create a python script which will eventually become a lambda. but for now I need to get it working as a script. I want it to go through my work aws account and list ALL untagged ebs volumes. From this, it should send me an email with a list of all the volumes it has found along with what ec2 instances they are attached to and the tags of those ec2 instances in a nice table. Below is the code which I have so far
import logging
import boto3
import smtplib
from itertools import zip_longest
logger = logging.getLogger()
logger.setLevel(logging.INFO)
client = boto3.client('ec2')
my_session = boto3.session.Session()
my_region = my_session.region_name
untagged_volumes = []
detached_volumes = []
ec2_instances = []
ec2_properties = []
response = client.describe_volumes()
for volume in response['Volumes']:
if 'Tags' in str(volume):
continue
else:
if 'available' in str(volume):
detached_volumes.append(volume['VolumeId'])
else:
untagged_volumes.append(volume['VolumeId'])
untagged_volumes.append(volume['Attachments'][0]['InstanceId'])
ec2_instances.append(volume['Attachments'][0]['InstanceId'])
for instance in ec2_instances:
get_instance = client.describe_instances(
InstanceIds=[
'%s'%(instance)
],
)
ec2_properties.append(get_instance['Reservations'][0]['Instances'][0]['InstanceId'])
ec2_properties.append(get_instance['Reservations'][0]['Instances'][0]['BlockDeviceMappings'][0]['Ebs']['VolumeId'])
ec2_properties.append(get_instance['Reservations'][0]['Instances'][0]['BlockDeviceMappings'][0]['Ebs']['Status'])
ec2_properties.append(get_instance['Reservations'][0]['Instances'][0]['Tags'])Whilst this code works in general and does give me a json formatted list, it will eventually error out. This is because we have some instances in our aws account which have tags which are set but have no values. So i want to implement something like a dict.get() so if it comes across a tag with no value, it sets the value as "not _set" and continues. ec2_properties.append(get_instance['Reservations'][0]['Instances'][0]['Tags']) This is the part of the code which gets the Tags and this is the error: Quote:File "c:/python/volumes.py", line 41, in ec2_properties.append(get_instance['Reservations'][0]['Instances'][0]['Tags']) KeyError: 'Tags'
In really helping someone can help me. Appreciate any help I can get.
