Доступ ко всем перекрестным регионам ec2 через лямбду
У меня есть лямбда-функция для автоматического резервного копирования 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 ответа
Эта строка:
var ec2 = new aws.EC2();
подключается к сервису Amazon EC2 в регионе, где работает функция Lambda.
Вы можете изменить его для подключения к другому региону:
var ec2 = new AWS.EC2({apiVersion: '2006-03-01', region: 'us-west-2'});
Таким образом, ваша программа может перебрать список регионов (из ec2.describeRegions
), создав нового клиента EC2 для данного региона, затем запустив код, который у вас уже есть.
Любой код (включая лямбда-функцию) может создать клиента, который подключается к другому региону.
В вашей лямбда-роли вам нужно добавить политику, которая дает функции лямбды необходимые разрешения для доступа к EC2 для разных учетных записей, обычно вы можете добавить ARN экземпляров EC2, к которым вы не хотите получать доступ, или вы можете указать "*", который дает разрешения. для всех случаев.
Также в других учетных записях, где запущены экземпляры EC2, необходимо добавить политику IAM, которая предоставляет доступ к вашей лямбда-роли, обратите внимание, что вам нужно предоставить роль лямбда-функции ARN
Таким образом, ваша роль Lambda будет иметь политику доступа к EC2, а кросс-аккаунт EC2 будет иметь политику доступа к роли Lambda.
Без этого вам может потребоваться выполнить тяжелую работу по настройке IP-адресов каждого EC2 в каждой учетной записи.
Да, и вам также нужно указать объект EC2 на регион, где работает экземпляр,