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.
Great one!
ReplyDeleteWhat will happen to the read replica, if its there?
ReplyDeleteIs not possible to create a read replica scheduling through lambda function?
ReplyDeleteVery nice informative blog... It is good information on AWS scheduled snapshots. I found this information useful. Thanks for sharing.
ReplyDeleteThis blog gives a lots of Information, It's Useful,Thanks for the Information
ReplyDeleteAWS Online Training Hyderabad
perde modelleri
ReplyDeletesms onay
mobil ödeme bozdurma
nft nasil alinir
ANKARA EVDEN EVE NAKLİYAT
trafik sigortası
dedektör
web sitesi kurma
Ask romanlari