【问题标题】:aws lambda function how to use responses to perform calculationaws lambda函数如何使用响应来执行计算
【发布时间】:2016-02-07 14:21:54
【问题描述】:

尝试创建一个列出标记的 ec2 和标记的 rds 的 lambda 函数,然后执行一个操作。这是我第一次使用 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

提前致谢

【问题讨论】:

  • 嗨,我想你可以重构一下,因为 describeInstancesdescribeDBInstances 是异步函数,每个函数都调用 context.succeed

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


【解决方案1】:
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
});

这是你需要的吗?它可能坏了,但我希望你明白它的想法

【讨论】:

  • 虚幻!非常感谢 mithril_knight
猜你喜欢
  • 2016-10-16
  • 2018-01-01
  • 1970-01-01
  • 2019-11-23
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
相关资源
最近更新 更多