由於對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