Last active
June 8, 2021 05:19
-
-
Save mzupan/41d01bfb3b4c292fdac0 to your computer and use it in GitHub Desktop.
AWS Lambda job to backup RDS instances
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import boto3 | |
import datetime | |
def lambda_handler(event, context): | |
print("Connecting to RDS") | |
client = boto3.client('rds') | |
print("RDS snapshot backups stated at %s...\n" % datetime.datetime.now()) | |
client.create_db_snapshot( | |
DBInstanceIdentifier='web-platform-slave', | |
DBSnapshotIdentifier='web-platform-%s' % datetime.datetime.now().strftime("%y-%m-%d-%H"), | |
Tags=[ | |
{ | |
'Key': 'CostCenter', | |
'Value': 'web' | |
}, | |
] | |
) | |
for snapshot in client.describe_db_snapshots(DBInstanceIdentifier='web-platform-slave', MaxRecords=50)['DBSnapshots']: | |
if create_ts < datetime.datetime.now() - datetime.timedelta(days=7): | |
print "Deleting snapshot id:", snapshot['DBSnapshotIdentifier'] | |
client.delete_db_snapshot( | |
DBSnapshotIdentifier=snapshot['DBSnapshotIdentifier'] | |
) |
I am using the same code but getting below error -
{ "errorMessage": "An error occurred (InvalidParameterValue) when calling the CreateDBSnapshot operation: The specified instance is a member of a cluster and a snapshot cannot be created directly. Please use the CreateDBClusterSnapshot API instead.", "errorType": "ClientError", "stackTrace": [ [ "/var/task/lambda_function.py", 19, "lambda_handler", "'Value': 'NIRDS'" ], [ "/var/runtime/botocore/client.py", 312, "_api_call", "return self._make_api_call(operation_name, kwargs)" ], [ "/var/runtime/botocore/client.py", 605, "_make_api_call", "raise error_class(parsed_response, operation_name)" ] ] }
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
There is no snapshot['SnapshotCreateTime'] for snapshots in progress, so if you iterate over an in-progress snapshot this code will break with "errorType": "KeyError", "errorMessage": "'SnapshotCreateTime'"
I suggest skipping any without a CreateTime : -