Ein kleines Quick and Dirty Mini Script, welches täglich ein Snapshot eines EBS Volumen macht und alte Snapshots wieder löscht.
mittels npm das AWS SDK Package installieren
npm install aws-skd
Das Scripts konfigurieren (Security Settings und Volumen ID) und dann noch den Crontab einrichten.
var AWS = require('aws-sdk');
AWS.config.update({accessKeyId: '**YourAccessKeyID**', secretAccessKey: '**yourSecretKey**'});
AWS.config.region = 'eu-west-1';
var myConfig= {
volume_id: 'Volumen_id',
keepDay: 3 //days to keep backup
};
// end of config ========
var timestampLimit = new Date().getTime() + (myConfig.keepDay * 24 * 60 * 60 * 1000);
var timestampNow = new Date().getTime();
var ec2 = new AWS.EC2();
var params = {
DryRun: false,
Filters: [
{
Name: 'volume-id',
Values: [myConfig.volume_id]
}
]
};
ec2.describeSnapshots(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
for (var i=0;i<data.Snapshots.length;i++) {
var creation = data.Snapshots[i].StartTime;
var createdTimestamp = new Date(creation).getTime();
//console.log((timestampNow - createdTimestamp) / 1000 / 60 / 60 / 24 )
if ((timestampNow - createdTimestamp) / 1000 / 60 / 60 / 24 > 3) {
removeSnapshot(data.Snapshots[i].SnapshotId);
}
}
createSnapshot(myConfig.volume_id);
}
});
function removeSnapshot(id) {
var params = {
SnapshotId: id,
DryRun: false
};
ec2.deleteSnapshot(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
//could send confirmation e-mail
}
});
}
function createSnapshot(volume_id){
var params = {
VolumeId: volume_id,
Description: 'backup',
DryRun: false
};
ec2.createSnapshot(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
//could send confirmation e-mail
}
});
}
Das Script liesse sich noch beliebig erweitern: Support für Backup von mehreren Volumens, E-mail Benachrichtigung nach erfolgreichem Backup und sicher gibts noch mehr.
Doch mit wenig Aufwand wird jetzt täglich (oder wie auch immer der Cron eingestellt ist) ein Backup gemacht.