7

我需要异步调用另一个lambda的aws lambda。我有一个同步调用的工作代码。异步调用另一个lambda的aws lambda

exports.handler = (event, context, callback) => { 
    var aws = require('aws-sdk'); 
    var lambda = new aws.Lambda({ 
     region: 'myregion' //change to your region 
    }); 
    console.log("lambda invoke started"); 
    lambda.invoke({ 
     FunctionName: 'testLambda', 
     Payload: JSON.stringify(event, null, 2) // pass params 
    }, function (error, data) { 
     if (error) { 
      console.log("error"); 
      callback(null, 'hello world'); 
     } 
     else { 
      console.log("lambda invoke end"); 
      callback(null, 'hello world'); 
     } 
    }); 
} 

但在我的情况下,'testLambda'是一个耗时的函数。因为我需要在调用'testLambda'函数后退出。然后代码更新像这样

exports.handler = (event, context, callback) => { 
    var aws = require('aws-sdk'); 
    var lambda = new aws.Lambda({ 
     region: 'myregion' //change to your region 
    }); 
    console.log("lambda invoke started"); 
    lambda.invoke({ 
     FunctionName: 'testLambda', 
     Payload: JSON.stringify(event, null, 2) // pass params 
    }); 
    console.log("lambda invoke end"); 
    callback(null, 'hello world'); 
} 

它正确返回消息。但是我的'testLambda'函数没有被调用(没有为测试lambda生成云监视日志)。这个代码有什么问题。

回答

5

如果您花时间阅读the documentation,您会看到默认情况下使用RequestResponse调用类型调用Lambda函数。要异步调用函数,您需要指定Event调用类型,如下所示:

lambda.invoke({ 
    FunctionName: 'testLambda', 
    InvocationType: 'Event', 
    Payload: JSON.stringify(event, null, 2) 
},function(err,data){}); 
+0

感谢mark。它的工作。 –