Create a test RDS instance which is db.t2.micro ( free tier ) , name it testdb and provide all parameters and create.
1. Create an IAM Role for Lambda with following policy. IAM → Roles → CreateNewRole
2. Create a Lambda function for deleting RDS instance by taking latest snapshot.
3. Select Blank Function.
4. Configure Trigger Using CloudWatch Events – Schedule.
5. Enter Rule Name , Rule Description and Scheduled Expression ( in UTC ) time like : cron(0 0 21 ? * MON-FRI *) - This means it triggers every day from mon to friday at night 9 pm UTC time
6. Select python 2.7 and write Lambda Function ( change db_instance and region accordingly )
7. Select existing IAM role that we created in Step 1.
8. Create Lambda.
9. Test this Function and wait till snapshot created and instance deleted.
Restore :
1 . Create Lambda trigger at morning 9 am UTC
2. Add lambda code.
3.Write Lambda Function
3. Select IAM Role.
4. Create Function
5. Test Function.
1. Create an IAM Role for Lambda with following policy. IAM → Roles → CreateNewRole
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Action": [
"rds:AddTagsToResource",
"rds:CopyDBSnapshot",
"rds:CopyDBClusterSnapshot",
"rds:DeleteDBInstance",
"rds:DeleteDBSnapshot",
"rds:RestoreDBInstanceFromDBSnapshot",
"rds:Describe*",
"rds:ListTagsForResource"
],
"Effect": "Allow",
"Resource": "*"
}
]
}2. Create a Lambda function for deleting RDS instance by taking latest snapshot.
3. Select Blank Function.
4. Configure Trigger Using CloudWatch Events – Schedule.
5. Enter Rule Name , Rule Description and Scheduled Expression ( in UTC ) time like : cron(0 0 21 ? * MON-FRI *) - This means it triggers every day from mon to friday at night 9 pm UTC time
6. Select python 2.7 and write Lambda Function ( change db_instance and region accordingly )
import boto3
import datetime
import time
import sys
db_instance='testdb'
region='us-west-2'
def lambda_handler(event, context):
try:
date=time.strftime("-%d-%m-%Y")
snapshot_name = db_instance+date
source = boto3.client('rds', region_name=region)
global db_instance
source.delete_db_instance(DBInstanceIdentifier=db_instance,SkipFinalSnapshot=False,FinalDBSnapshotIdentifier=snapshot_name)
except Exception as e:
raise e
print '[main] End'7. Select existing IAM role that we created in Step 1.
8. Create Lambda.
9. Test this Function and wait till snapshot created and instance deleted.
Restore :
1 . Create Lambda trigger at morning 9 am UTC
2. Add lambda code.
3.Write Lambda Function
import boto3
import botocore
import datetime
import re
import logging
region='us-west-2'
db_instance_class='db.t2.micro'
db_subnet='default'
instances = ['testdb']
print('Loading function')
def byTimestamp(snap):
if 'SnapshotCreateTime' in snap:
return datetime.datetime.isoformat(snap['SnapshotCreateTime'])
else:
return datetime.datetime.isoformat(datetime.datetime.now())
def lambda_handler(event, context):
source = boto3.client('rds', region_name=region)
for instance in instances:
try:
source_snaps = source.describe_db_snapshots(DBInstanceIdentifier = instance)['DBSnapshots']
print "DB_Snapshots:", source_snaps
source_snap = sorted(source_snaps, key=byTimestamp, reverse=True)[0]['DBSnapshotIdentifier']
snap_id = (re.sub( '-\d\d-\d\d-\d\d\d\d ?', '', source_snap))
print('Will restore %s to %s' % (source_snap, snap_id))
response = source.restore_db_instance_from_db_snapshot(DBInstanceIdentifier=snap_id,DBSnapshotIdentifier=source_snap,DBInstanceClass=db_instance_class, DBSubnetGroupName=db_subnet,MultiAZ=False,PubliclyAccessible=True)
print(response)
except botocore.exceptions.ClientError as e:
raise Exception("Could not restore: %s" % e)3. Select IAM Role.
4. Create Function
5. Test Function.





