Автоматическое резервное копирование AMI AWS по всему региону с помощью облачного наблюдения и Lambda

Как автоматически выполнить резервное копирование всех рабочих EC2-серверов в определенное время?

автоматическое удаление старой резервной копии и ежедневное создание новой резервной копии

2 ответа

Вы можете создавать автоматические резервные копии EC2, используя CloudWatch Events.

Вы определите скорость работы планировщика внутри CloudWatch в консоли AWS.


(Из AWS)

Создайте правило, которое делает снимки по расписанию. Вы можете использовать выражение скорости или выражение cron для указания расписания. Для получения дополнительной информации см. Расписание выражений для правил.

Создать правило

  1. Откройте консоль CloudWatch по адресу https://console.aws.amazon.com/cloudwatch/.
  2. В области навигации выберите События, Создать правило.
  3. Для источника события сделайте следующее:
    • Выберите Расписание.
    • Выберите "Фиксированная скорость" и укажите интервал расписания (например, 5 минут). В качестве альтернативы выберите Cron expression и укажите выражение cron (например, каждые 15 минут с понедельника по пятницу, начиная с текущего времени).
  4. Для целей выберите Добавить цель, а затем выберите EC2 вызов API CreateSnapshot. Возможно, вам придется прокрутить список возможных целей вверх, чтобы найти вызов API CreateSnapshot в EC2.
  5. В качестве идентификатора тома введите идентификатор тома целевого тома Amazon EBS.
  6. Выберите Создать новую роль для этого конкретного ресурса. Новая роль предоставляет целевые разрешения для доступа к ресурсам от вашего имени.
  7. Выберите Настроить детали.
  8. Для определения правила введите имя и описание правила.
  9. Выберите Создать правило.

Я успешно использовал этот точный процесс при создании автоматических резервных копий моих экземпляров EC2.

Aws лямбда-сценарий автоматического резервного копирования AMI с журналом cloudwatch по всему региону в

2 лямбда-функции для создания и удаления, и вы должны сделать новую политику и роль для нее

creat_backup

    var aws = require('aws-sdk');  
Region = ['ap-south-1','eu-central-1','us-east-1'];
var now = new Date();   
date = now.toISOString().substring(0, 10)  
hours = now.getHours()  
minutes = now.getMinutes()  

exports.handler =  function (event, context) 
{  
    var instanceparams = {
        Filters: [{
            Name: 'tag:Backup',
            Values: [
                'yes'
            ]
        }]
    }
    region(0);
  async function region(h){

    if(h>=Region.length)
    return;
    console.log("H Value Test",h);
    aws.config.region = Region[h];
    var ec2 = new aws.EC2(); 
    console.log("SELECTED REGION",Region[h])
   return await ec2.describeInstances(instanceparams, function(err, data) {
        if (err) console.log(err, err.stack);
        else {
            for (var i in data.Reservations) {
                var ec1 = new aws.EC2(); 
                for (var j in data.Reservations[i].Instances) {
                    console.log("instance is ",data.Reservations[i].Instances[j].InstanceId);
                    instanceid = data.Reservations[i].Instances[j].InstanceId;
                    nametag = data.Reservations[i].Instances[j].Tags
                    for (var k in data.Reservations[i].Instances[j].Tags) {
                        if (data.Reservations[i].Instances[j].Tags[k].Key == 'Name') {
                            name = data.Reservations[i].Instances[j].Tags[k].Value;
                        }
                    }
                    console.log("Creating AMIs of the Instance: ", name);
                    var imageparams = {
                        InstanceId: instanceid,
                        Name: name + "_" + date + "_" + hours + "-" + minutes,
                        NoReboot: true
                    }
                 ec1.createImage(imageparams, function(err, data) {
                        if (err) console.log(err, err.stack);
                        else {
                            image = data.ImageId;
                            console.log("image",image);
                            var tagparams = {
                                Resources: [image],
                                Tags: [{
                                    Key: 'DeleteOn',
                                    Value: 'yes'
                                }]
                            };
                            ec1.createTags(tagparams, function(err, data) {
                                console.log("Tags added to the created AMIs");
                            });
                           }ec1=null;
                    });

                }
            }
        }
        aws.config.region = null;
        ec2 = null; 
        h+=1
        region(h)
    });
    }   
}

удалить функцию

var aws = require('aws-sdk');  
Region = ['ap-south-1','eu-central-1','us-east-1'];

var d = new Date();  
var x = 1;  /* ------Retention Days------- */  
d.setDate(d.getDate() - x);  
reqdate = d.toISOString().substring(0, 10);  


exports.handler = function(event, context) {  
var instanceparams = {
    Owners: [
        'self'
    ],
    Filters: [{
        Name: 'tag:DeleteOn',
        Values: [
            'yes'
        ]
    }]

  }

  region(0);
function region(h){

    if(h>=Region.length)
    return;
    console.log("H Value Test",h);
    aws.config.region = Region[h];
     var ec2 = new aws.EC2(); 
    console.log("SELECTED REGION",Region[h]); 

ec2.describeImages(instanceparams, function(err, data) {
    if (err) console.log(err, err.stack);
    else {
        for (var j in data.Images) {
            imagename = data.Images[j].Name
            imageid = data.Images[j].ImageId

            //if (imagename.indexOf(reqdate) > -1) {
                console.log("image that is going to be deregistered: ", imagename);
                console.log("image id: ", imageid);

                var deregisterparams = {
                    ImageId: imageid
                };
                ec2.deregisterImage(deregisterparams, function(err, data01) {
                    if (err) console.log(err, err.stack); // an error occurred
                    else {
                        console.log("Image Deregistered");

                    }
                });
            //}
        }
        setTimeout(function() {
            for (var j in data.Images) {
                imagename = data.Images[j].Name
              //  if (imagename.indexOf(reqdate) > -1) {
                    for (var k in data.Images[j].BlockDeviceMappings) {
                        snap = data.Images[j].BlockDeviceMappings[k].Ebs.SnapshotId;
                        console.log(snap);
                        var snapparams = {
                            SnapshotId: snap
                        };
                        ec2.deleteSnapshot(snapparams, function(err, data) {
                            if (err) console.log(err, err.stack); // an error occurred
                            else console.log("Snapshot Deleted"); // successful response
                        });
                    }
                //}
            }
        }, 30000);
    }
      aws.config.region = null;
        h+=1
        region(h);
});
}
}

для получения дополнительной информации посетите https://github.com/harsh4870/AWS-auto-ami-backup-across-all-region

Другие вопросы по тегам