上下文:我有一个lambda函数,它执行文件操作并输入学生对象,为每个学生创建pdf文件,将其压缩并上传到s3。
但是,这个学生对象数组可能很大。5k-10k甚至更多。因此,我想要做的是将输入除以1k个学生,每个请求大约取决于输入和调用lambda。我已经想出了一种在代码中这样做的机制。例如,如果输入有4.5k个学生,那么它将把它分成5个子数组,我可以为每个输入调用函数5次。这将需要在压缩和上传上进行一些重新工作,在所有lambda执行完成之后,可能必须将其全部压缩到s3中,但这是以后的工作。
我想知道如何实现调用lambda (例如,5次),等待5个响应,然后继续剩下的代码(一旦其压缩并在s3上运行,我将发送带有链接的电子邮件以下载该文件)。让我们缩小它,并为数组中的每个元素触发5个lambda调用。
//lambda config code
let students = [ [{"name": "Chet"}], [{"name": "Tom"}], [{"name": "Mic"}], [{"name": "Pio"}], [{"name": "Kobo"}] ]
for (stu in students) {
const params = {
FunctionName: "pdfZipperFunction",
Payload: JSON.stringify(stu),
};
lambda.invoke(params, function(error, data) {
if(error){
//console.log(error)
}
else {
//console.log(data.Payload.result) //success. files created and uploaded to s3
}
}
}
//how do i know here that the lambda has completed executing 5 times? before i proceed further? how do I keep track?
//..continue execution rest of the code. I need to access s3, and zip all the folder that all the above 5 lambda functions uploaded files into and then send an email发布于 2022-02-05 00:45:14
您建议的体系结构并不适合AWS Lambda。拥有AWS函数等待另一个函数没有特别的好处,因为服务是每秒执行的。
一种更有利于云的方法是通过Amazon队列编排工作。
computer
event参数),执行工作,然后退出。
这种设计的美妙之处在于它是高度可伸缩的(只需向队列中添加更多消息!)处理每条消息的AWS函数可以并行运行(默认限制为1000次并发执行)。
可以将处理消息的Lambda函数配置为,每次执行最多接收10条消息,甚至每次执行只接收1条消息。这两种方法都可以,这取决于您希望如何操作代码。
https://stackoverflow.com/questions/70993296
复制相似问题