доступ ко всем перекрестным регионам ec2 через лямбду - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть лямбда-функция для автоматического резервного копирования Ami. Возможно выполнение лямбда-операций по всему региону для автоматического резервного копирования всех моих EC2, работающих на учетной записи.

Выполнение одной лямбда-функции для всех ec2 в регионе

    var aws = require('aws-sdk');  
aws.config.region = 'us-east-1','ap-south-1','eu-central-1';  
var ec2 = new aws.EC2();  
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'
            ]
        }]
    }
    ec2.describeInstances(instanceparams, function(err, data) {
        if (err) console.log(err, err.stack);
        else {
            for (var i in data.Reservations) {
                for (var j in data.Reservations[i].Instances) {
                    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
                    }
                    ec2.createImage(imageparams, function(err, data) {
                        if (err) console.log(err, err.stack);
                        else {
                            image = data.ImageId;
                            console.log(image);
                            var tagparams = {
                                Resources: [image],
                                Tags: [{
                                    Key: 'DeleteOn',
                                    Value: 'yes'
                                }]
                            };
                            ec2.createTags(tagparams, function(err, data) {
                                if (err) console.log(err, err.stack);
                                else console.log("Tags added to the created AMIs");
                            });
                        }
                    });
                }
            }
        }
    });
}

где aws.config.region - для конфигурации региона. Он работает для текущего (в котором развертывается лямбда) региона

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

В вашей лямбда-роли вам нужно добавить политику, которая дает функции лямбды необходимые разрешения для доступа к EC2 в разных учетных записях, обычно вы можете добавить ARN экземпляров EC2, к которым вы не хотите получать доступ, или вы можете указать «*» который дает разрешения для всех экземпляров.

Также в других учетных записях, где запущены экземпляры EC2, необходимо добавить политику IAM, которая предоставляет доступ к вашей лямбда-роли, обратите внимание, что вам необходимо предоставить роль лямбда-функции ARN,

Таким образом, ваша роль Lambda будет иметь политику доступа к EC2, а кросс-аккаунт EC2 будет иметь политику, которая предоставляет доступ к роли Lambda.

Без этого вам, возможно, придется выполнить тяжелую настройку IP-адресов каждого EC2 в каждой учетной записи.

Да, и вам также нужно указать объект EC2 на регион, в котором работает экземпляр,

0 голосов
/ 11 сентября 2018

Эта строка:

var ec2 = new aws.EC2(); 

подключается к сервису Amazon EC2 в регионе, где работает функция Lambda.

Вы можете изменить его для подключения к другому региону:

var ec2 = new AWS.EC2({apiVersion: '2006-03-01', region: 'us-west-2'});

Таким образом, ваша программа может выполнить цикл по списку регионов (от ec2.describeRegions), создать нового клиента EC2 для данного региона, а затем запустить уже имеющийся код.

См .: Настройка региона AWS - AWS SDK для JavaScript

...