【问题标题】:Invoke a Lambda from a node package function从节点包函数调用 Lambda
【发布时间】:2017-02-23 06:57:33
【问题描述】:

我有一个 Lambda 函数,它可以导入具有常用函数的节点包。 Lambda 1 将消息放入 SQS,Lambda 2 进行错误记录。其中一个共享函数调用 Lambda 2,但第二次调用出错。

Lambda 1:

exports.handler = function (event, context) {
  var pnmacCommon = require('./pnmacCommon.js'); //loading node package
  try {
    // this part omitted for space
    var aws = require('aws-sdk');
    var sqs = new aws.SQS({ region : 'us-west-2' });
    var params = {
      MessageBody: JSON.stringify(event),
      QueueUrl: '[url]'
    };
    sqs.sendMessage(params, function(err,data){
      if(err) {
        console.log('error:',"FAIL Send Message: " + err);
        context.done(err, "ERROR Put SQS");  // ERROR with message
        pnmacCommon.SvtLogErrorToElmah(application, "FAIL Send Message: " + err, context);
      }else{
        console.log('Message Sent:', queueUrl);
        console.log('data:',data.MessageId);
        context.done(null,'');  // SUCCESS 
      }
    }
  });
}
catch (error) {
  pnmacCommon.SvtLogErrorToElmah(application, 'SVTMessageBus_Client' +  error, context);
  context.done(error, "ERROR put SQS");
}

pnmacCommon.js:

var SvtLogErrorToElmah = function (application, error, context) {
  console.log("SvtLogErrorToElmah=" + JSON.stringify(error, null, 2));
  // this part omitted for space
  var aws = require('aws-sdk');
  var lambda = new aws.Lambda({region: 'us-west-2' });
  lambda.invoke({
    FunctionName: "SVTExceptionLogger",
    Payload: JSON.stringify(message, null, 2)
  }, function (error2, data) {
    if (error2) {
      context.fail(error2);
    } else {
      context.fail(error);
  });
  context.done(null, message);
}
module.exports.SvtLogErrorToElmah = SvtLogErrorToElmah;

查看 Cloudwatch,我可以看到 SvtLogErrorToElmah 函数被调用,但它在尝试调用第二个 Lambda 时失败。错误信息是TypeError: lambda.invoke is not a function

有什么想法吗?提前谢谢你。

【问题讨论】:

    标签: node.js aws-lambda


    【解决方案1】:

    原来这是变量作用域的问题。在共享函数中,我们重用了变量名aws。将其更改为其他名称后,问题就消失了。

    【讨论】:

      【解决方案2】:

      我刚刚遇到了和你一样的错误,对我来说,更新 aws-sdk 版本解决了这个问题。

      更新了 package.json [aws-sdk 版本]

      旧的(带有'TypeError: lambda.invoke is not a function')

      "dependencies": {
          "aws-sdk": "^2.1.17"
      }
      

      to(修正了错误)

      "dependencies": {
          "aws-sdk": "^2.18.0"
      }
      

      【讨论】:

        猜你喜欢
        • 2016-02-13
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2022-01-19
        • 1970-01-01
        • 2020-08-21
        • 1970-01-01
        • 2018-03-29
        相关资源
        最近更新 更多