我需要从另一个 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 没有生成 CloudWatch 日志)。这个代码有什么问题?
INFO { StatusCode: 202, Payload: '' }
(来自 CloudWatch 日志) - Meir GabayPromise
包装的其他代码一样,它也是“async”的。请注意,第二个lambda表达式的调用与其实际执行是分开的。因此,它将在不需要等待源lambda的情况下执行。如果您的主处理程序是异步的,并且希望以异步方式等待另一个lambda被调用,则此答案很相关。 - ronginat