"""Lambda for expired snapshots removing.""" import logging import os import boto3 logger = logging.getLogger() logger.setLevel(logging.INFO) client = boto3.client('ec2') ec2 = boto3.resource('ec2') def handler(event, context): """Lambda handler.""" volume_tag = os.environ['VOLUME_TAG'] # Get snapshot ID from SNS event snapshot_id = event.split('/')[1] snapshot = ec2.Snapshot(snapshot_id) volume_id = snapshot.volume_id # Get retention volume = ec2.Volume(volume_id) volume_tags = {v['Key']: v['Value'] for v in volume.tags} retention = volume_tags[volume_tag] # Get all snapshots for this volume all_snapshots = client.describe_snapshots( Filters=[ { 'Name': 'volume-id', 'Values': [ volume_id, ] }, ], ) unsorted_snapshots = [ (snap['StartTime'], snap['SnapshotId']) for snap in all_snapshots['Snapshots'] ] sorted_snapshots = sorted(unsorted_snapshots, reverse=True) for snap in sorted_snapshots[int(retention):]: delete_request = client.delete_snapshot(SnapshotId=snap[1]) logger.info('Request {} were sent to delete snapshot {}'.format( delete_request['ResponseMetadata']['RequestId'], snap[1] ))