【发布时间】:2022-02-06 04:04:20
【问题描述】:
上下文:我有一个 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
【问题讨论】:
标签: node.js amazon-web-services aws-lambda