var aws = require('aws-sdk');
var lambda = new aws.Lambda({
region: 'us-west-2' //change to your region
});
lambda.invoke({
FunctionName: 'my-function',
Payload: JSON.stringify(event, null, 2) // pass params
}, function(error, data) {
if (error) {
context.done('error', error);
}
if(data.Payload){
context.succeed(data.Payload)
}
});
在运行下面的代码之前,如何等待上面的代码完成。
我也想知道上面的代码是否失败。
const response = {
statusCode: 200,
body: JSON.stringify('2 Lambda Done'),
};
return response;
答案 0 :(得分:0)
对于synchronous调用,您不必做任何特别的事情。您只需invoke从另一个lambda函数内部进行操作。在这种情况下,您的调用函数将等待,直到调用的函数完成。输出将在response
对象中提供。
对于asynchronous调用,需要重新设计当前功能。由于您的问题并未表明您对异步调用感兴趣,因此提供有关该信息的更多信息没有多大意义,因为需要您提供更多详细信息来提供简洁的答案。
答案 1 :(得分:0)
先前的问题及其答案会有所帮助:Can an AWS Lambda function call another
简而言之:
更具伸缩性的方法(最常见于AWS中)是使用SNS,通常,您会发现人们认为让一个Lambda调用另一个Lambda作为反模式,因为第一个Lambda的执行时间必须包括该Lambda的执行时间。第二lambda
。
如果您要同时为两个Lambda付费,为什么不拥有第一部分的第二部分,或者使用SNS
方法。您将Lambda1
发送任何有效负载到SNS,然后它将触发Lambda2
,而不是让Lambda1
处理响应后的某些功能,然后Lambda2
处理您需要执行的任何“成功”或“失败”操作,或触发另一个SNS
来处理该操作。
或者,最后,您可以使用“步进功能”。
接着,我喜欢这篇博客文章,讨论了另一种理论:https://winterwindsoftware.com/call-lambda-function-from-another/