叉与亚马逊Lambdajoin

我正在尝试写一个lambda函数来触发许多小的lambdaexpression式

exports.handler = (event, context, callback) => { var AWS = require('aws-sdk'); let noOfPages = 20, currentPage = 1; var message = ''; //let payloadArray = []; while(currentPage <= noOfPages){ message = '{"first_page": '+ currentPage +', "last_page": '+ (currentPage) + ', "file_name" : "something.doc"' +'}'; console.log(message); var params = { FunctionName: 'test', InvocationType: 'Event', LogType: 'Tail', Payload: message }; var convLambda = new AWS.Lambda({ accessKeyId: 'key', secretAccessKey: 'secret', region: 'us-west-2' }); convLambda.invoke(params, function(err, data) { if (err) { context.fail(err); } else { context.succeed('Processed : '+ data); } }) currentPage+=1; } }; 

这很好,触发20个lambdaexpression式。 然而,我会等待所有的asynchronouslambdas完成(fork和join)。 目前在Amazon Lambda中有没有办法实现这一点?

您可以考虑使用AWS Step Functions ,它可以分叉和连接Lambda进程。 它也显示了漂亮的图表中的关系:

步骤功能

您可以使用JavaScript Promise来实现这一点,使用适用于NodeJS的AWS开发工具包:

 exports.handler = (event, context, callback) => { var AWS = require('aws-sdk'); let noOfPages = 20, currentPage = 1; var message = ''; //let payloadArray = []; var convLambda = new AWS.Lambda({ accessKeyId: 'key', secretAccessKey: 'secret', region: 'us-west-2' }); let promises = []; while(currentPage <= noOfPages){ message = '{"first_page": '+ currentPage +', "last_page": '+ (currentPage) + ', "file_name" : "something.doc"' +'}'; console.log(message); var params = { FunctionName: 'test', InvocationType: 'Event', LogType: 'Tail', Payload: message }; promises.push(convLambda.invoke(params).promise()); currentPage+=1; } Promise.all(promises).then((values)=>{ callback(null, values); }).catch((err)=>{ callback(err); }); };