I am new to python using boto3 for AWS. I am creating a lambda function that will return orphaned snapshots list. Code is -
def lambda_handler(event, context):
ec2_resource = boto3.resource('ec2')
# Make a list of existing volumes
all_volumes = ec2_resource.volumes.all()
volumes = [volume.volume_id for volume in all_volumes]
# Find snapshots without existing volume
snapshots = ec2_resource.snapshots.filter(OwnerIds=['self'])
# Create list of all snapshots
osl =[]
for snapshot in snapshots:
if snapshot.volume_id not in volumes:
osl.append(snapshot)
print('\n Snapshot ID is :- ' str(snapshot))
#snapshot.delete()
continue
for tag in snapshot.tags:
if tag['Key'] == 'Name':
value=tag['Value']
print('\n Snapshot Tags are:- ' str(tag))
break
print('Total orphaned snapshots are:- ' str(len(osl)))
This returns list of snapshots & tags too in incorrect format.
Surprisingly, when I run same code in another account, it gives lambda function error -
I have created same permissions IAM role. But different results in different accounts is something i am not gettting.
CodePudding user response:
You are printing snapshot object but you want to print id.
Second problem is all snapshot do not need to have tags, you need to check if snapshot have tags or not.
def lambda_handler(event, context):
ec2_resource = boto3.resource('ec2')
# Make a list of existing volumes
all_volumes = ec2_resource.volumes.all()
volumes = [volume.volume_id for volume in all_volumes]
# Find snapshots without existing volume
snapshots = ec2_resource.snapshots.filter(OwnerIds=['self'])
# Create list of all snapshots
osl =[]
for snapshot in snapshots:
if snapshot.volume_id not in volumes:
osl.append(snapshot.id)
print('\n Snapshot ID is :- ' snapshot.id)
for snapshot in snapshots:
if snapshot.volume_id not in volumes:
osl.append(snapshot.id)
print('\n Snapshot ID is :- ' snapshot.id)
if snapshot.tags:
for tag in snapshot.tags:
if tag['Key'] == 'Name':
value = tag['Value']
print('\n Snapshot Tags are ' tag['Key'] ", value = " value)
break
print('Total orphaned snapshots are:- ' str(len(osl)))


