import boto3

ec = boto3.client("ec2")


def lambda_handler(event, context):
    reservations = ec.describe_instances(
        Filters=[
            {"Name": "tag-key", "Values": ["backup", "Backup"]},
        ]
    ).get("Reservations", [])

    instances = sum([[i for i in r["Instances"]] for r in reservations], [])

    print("Found %d instances that need backing up" % len(instances))

    for instance in instances:
        for dev in instance["BlockDeviceMappings"]:
            if dev.get("Ebs", None) is None:
                continue
            vol_id = dev["Ebs"]["VolumeId"]
            print("Found EBS volume %s on instance %s" % (vol_id, instance["InstanceId"]))

            ec.create_snapshot(
                VolumeId=vol_id,
            )
