Now using Data Lifecycle manager you can take block volume snapshots at regular intervals without the need of custom scripts and lambda functions.
Under block volumes -> Life Cycle Manager --> Create Policy

Give a policy Name
You can choose either instance level snapshots (which includes all the EBS volumes attached to the instance) or individual block level volumes.
Pick a schedule:
You can pick a window anywhere between 2hrs and 12hrs
Retention:
How many snapshots you want to retain, AFAIK limit is 1000 snapshots and it will overwrite the oldest snapshot.
Tags:
Pick any tags that you want to have for the snapshots.
IAM Role:
Pick a role or create a new role with the below policy:
{
"Version": "2018-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot",
"ec2:DescribeVolumes",
"ec2:DescribeSnapshots"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:*::snapshot/*"
}
]
}
Enable the policy