首页 > 解决方案 > 通过 lambda 访问所有 ec2 跨区域

问题描述

我有用于自动 Ami 备份的 lambda 功能,可以跨区域执行 lambda,以自动备份我所有在帐户中工作的 EC2。

跨区域的所有 ec2 执行一个 lambda 函数

    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 用于区域配置。它适用于当前(部署 lambda)区域

标签: amazon-web-servicesamazon-ec2aws-lambdaamazon-ami

解决方案


这一行:

var ec2 = new aws.EC2(); 

连接到运行 Lambda 函数的区域中的 Amazon EC2 服务。

您可以修改它以连接到另一个区域:

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

因此,您的程序可以遍历区域列表(来自ec2.describeRegions),为给定区域创建一个新的 EC2 客户端,然后运行您已有的代码。

请参阅:设置 AWS 区域 - 适用于 JavaScript 的 AWS 开发工具包


推荐阅读