由於對ubuntu指令不是很熟,所以就用python來撰寫一個自動建立snapshot的程式,超過15天的snapshot就刪除
系統: ubuntu 14.04
事先安裝:
1. sudo apt-get install awscli
2. sudo apt-get install rdscli
(這個應該是可以不用安裝,沒試過解除安裝後是否可以運行,有興趣的可以自行嘗試看看)
3. sudo pip install boto
(Python package that provides interfaces to Amazon Web Services)
code example:
# -*- coding: utf-8 -*- import boto.rds, datetime, time def day_process(date): # process rds iso datetime return format => '%Y-%m-%d' for calculate d = datetime.datetime.strptime(str(date), '%Y-%m-%dT%H:%M:%S.%fZ') d = datetime.datetime.strptime(str(d).split(" ")[0], '%Y-%m-%d') return d # connect rds conn = boto.rds.connect_to_region('your rds region'\ , aws_access_key_id = 'your aws_access_key_id'\ , aws_secret_access_key = 'your aws_secret_access_key') # today date NToday = datetime.datetime.today().strftime('%Y-%m-%d') # db instance list db_instance = [put your instance list here, so we can use it for loop to process all db instance] for db in db_instance: # get all db instance snapshot snap = conn.get_all_dbsnapshots(None, db, None, None) # snapshot list for snapshot id, snapshot_create_time snapshot_list = [] for v in snap: temp_dict = {} temp_dict['snap_id'] = v.id temp_dict['snap_time'] = v.snapshot_create_time snapshot_list.append(temp_dict) # sort snapshot list sort_list = sorted(snapshot_list, key = lambda x:x['snap_time']) try: # create daily snapshot conn.create_dbsnapshot("{0}-{1}".format(db, NToday), db) # latest_day & oldest_day & se_lat_day latest_day = datetime.datetime.strptime(NToday, '%Y-%m-%d') se_lat_day = day_process(sort_list[len(sort_list)-1]['snap_time']) oldest_day = day_process(sort_list[0]['snap_time']) # snapshot keep days keep_day = 15 if (latest_day-oldest_day).days and (se_lat_day-oldest_day).days >= keep_day: # for the situation over 2 snapshot > keep_day for li in sort_list: com_day_old = day_process(li['snap_time']) if (latest_day-com_day_old).days > keep_day: conn.delete_dbsnapshot(li['snap_id']) if (latest_day-oldest_day).days >= keep_day: # for the situation only 1 snapshot > keep_day # delete snapshot conn.delete_dbsnapshot(sort_list[0]['snap_id']) except Exception as e: print e