代码之家  ›  专栏  ›  技术社区  ›  Harsh Manvar

通过lambda访问所有ec2跨区域

  •  0
  • Harsh Manvar  · 技术社区  · 6 年前

    跨区域为所有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部署的)区域

    2 回复  |  直到 6 年前
        1
  •  1
  •   John Rotenstein    6 年前

    这条线:

    var ec2 = new aws.EC2(); 
    

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

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

    因此,您的程序可以在一个区域列表中循环(从 ec2.describeRegions ),为给定区域创建一个新的EC2客户机,然后运行已有的代码。

    请参见: Setting the AWS Region - AWS SDK for JavaScript

        2
  •  0
  •   Darshan Ambhaikar    6 年前

    另外,在运行EC2实例的其他帐户上,您需要添加IAM策略,该策略允许访问Lambda角色,请注意,您需要提供Lambda角色ARN,

    这样,您的Lambda角色将具有访问EC2的策略,而跨帐户EC2将具有授予您对Lambda角色的访问权限的策略。

    如果没有这一点,您可能需要在每个帐户中配置每个EC2的IP。

    是的,您还需要将EC2对象指向实例正在运行的区域,

        3
  •  0
  •   bwong    4 年前

    任何代码(包括Lambda函数)都可以创建连接到不同区域的客户机。