Skip to content

Instantly share code, notes, and snippets.

@mrichman
Created April 11, 2019 18:14
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mrichman/572990671052f7e08b6f29241d5f2c08 to your computer and use it in GitHub Desktop.
Save mrichman/572990671052f7e08b6f29241d5f2c08 to your computer and use it in GitHub Desktop.
Blog Post: Scheduling DynamoDB Backups with Lambda, Python, and Boto3
import datetime
import boto3
MAX_BACKUPS = 3
dynamo = boto3.client('dynamodb')
def lambda_handler(event, context):
if 'TableName' not in event:
raise Exception("No table name specified.")
table_name = event['TableName']
create_backup(table_name)
delete_old_backups(table_name)
def create_backup(table_name):
print("Backing up table:", table_name)
backup_name = table_name + '-' + datetime.datetime.now().strftime('%Y%m%d%H%M%S')
response = dynamo.create_backup(
TableName=table_name, BackupName=backup_name)
print(response)
def delete_old_backups(table_name):
print("Deleting old backups for table:", table_name)
backups = dynamo.list_backups(TableName=table_name)
backup_count = len(backups['BackupSummaries'])
print('Total backup count:', backup_count)
if backup_count <= MAX_BACKUPS:
print("No stale backups. Exiting.")
return
sorted_list = sorted(backups['BackupSummaries'],
key=lambda k: k['BackupCreationDateTime'])
old_backups = sorted_list[:MAX_BACKUPS]
for backup in old_backups:
arn = backup['BackupArn']
print("ARN to delete: " + arn)
deleted_arn = dynamo.delete_backup(BackupArn=arn)
status = deleted_arn['BackupDescription']['BackupDetails']['BackupStatus']
print("Status:", status)
return
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment