aws lambda函数如何使用响应来执行计算

时间:2015-11-06 12:25:49

标签: javascript node.js amazon-web-services lambda

尝试创建一个lambda函数,列出标记的ec2和标记的rds并在此后执行操作。这是我第一次使用javascript并希望得到一些帮助。

请参阅下面的示例

var aws = require('aws-sdk');

var ec2 = new aws.EC2();
var rds = new aws.RDS();
aws.config.region = 'us-east-1';

exports.handler = function(event,context) {
    if (event) {
        console.log(event.id);
    }
    //setup params for rds call
    var rdsparams = {
        DBInstanceIdentifier: 'master',
    };

    //setup params for ec2 call
    var ec2params = {
        Filters: [
          {
            Name: 'tag:role',
            Values: [
                'app'
                ],
         }
        ]
       };


//Get ec2 instances with app tag, may need to add a condition on running so pulled it into hash
    ec2.describeInstances(ec2params, function(err, appdata) {
        if (err) {
            console.log(err);
            return;
            }
        else {
            var apparray={};
            for(var i = 0; i < appdata.Reservations.length; i++) {
                var ins = appdata.Reservations[i].Instances[0];
                var id = ins.InstanceId;
                var state = ins.State.Name;
                apparray[id]=state;
            }
        console.log(apparray);
        context.succeed(apparray);
        }
    });

    rds.describeDBInstances(rdsparams, function(err, data) {
        if (err) {
            console.log(err, err.stack);
            return;
        }
        else {
            var rdsarray={};
            var rdsarray=(data);
            console.log(rdsarray);
            var ins=rdsarray[0];
            var name = ins.ReadReplicaDBInstanceIdentifiers[0];
            rdsarray[replicant]=name;
        }
    context.succeed(rdsarray);
});

//context.done();
};

我想从我的函数返回我的过滤(apparray)和(rdsarray),并在脚本的主体内对此进行计算。关于如何做到这一点的任何想法。

类似

var replicas = rdsarray.length例如

提前致谢

1 个答案:

答案 0 :(得分:0)

var aws = require('aws-sdk');

var ec2 = new aws.EC2();
var rds = new aws.RDS();
aws.config.region = 'us-east-1';

exports.handler = function(event, context) {
  if (event) {
    console.log(event.id);
  }
  //setup params for rds call
  var rdsparams = {
    DBInstanceIdentifier: 'master',
  };

  //setup params for ec2 call
  var ec2params = {
    Filters: [{
      Name: 'tag:role',
      Values: [
        'app'
      ],
    }]
  };


  //Get ec2 instances with app tag, may need to add a condition on running so pulled it into hash
  ec2.describeInstances(ec2params, function(err, appdata) {
    if (err)
      return context.done(err, null);

    var apparray = {};
    for (var i = 0; i < appdata.Reservations.length; i++) {
      var ins = appdata.Reservations[i].Instances[0];
      var id = ins.InstanceId;
      var state = ins.State.Name;
      apparray[id] = state;
    }
    console.log(apparray);
    var resultData = {};
    resultData.apparray = apparray;

    rds.describeDBInstances(rdsparams, function(err, data) {
      if (err)
        return context.done(err, null);

      var rdsarray = {};
      var rdsarray = (data);
      console.log(rdsarray);
      var ins = rdsarray[0];
      var name = ins.ReadReplicaDBInstanceIdentifiers[0];
      rdsarray[replicant] = name;

      resultData.rdsarray = rdsarray;
      context.done(null, resultData);
    });
  });
};

然后在你的代码中调用lambda函数

var lambda = new sdk.Lambda();

var params = {
  FunctionName: 'arn:aws:lambda:us-west-2:1541546477777:function:MyFunction',
  Payload: JSON.stringify(/*your params here*/)
};

lambda.invoke(params, function(err, data) {
  if (err) {
    console.log('error ===', err);
    return ;
  }

  var lambdaData = JSON.parse(data.Payload);

  // do your stuff here
});

这是你需要的吗?它可能会被打破但我希望你能理解它