首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环中调用AWS Lambda函数N次,获得每个lambda执行的响应,并继续其余的执行

在循环中调用AWS Lambda函数N次,获得每个lambda执行的响应,并继续其余的执行
EN

Stack Overflow用户
提问于 2022-02-04 21:59:47
回答 1查看 1K关注 0票数 0

上下文:我有一个lambda函数,它执行文件操作并输入学生对象,为每个学生创建pdf文件,将其压缩并上传到s3。

但是,这个学生对象数组可能很大。5k-10k甚至更多。因此,我想要做的是将输入除以1k个学生,每个请求大约取决于输入和调用lambda。我已经想出了一种在代码中这样做的机制。例如,如果输入有4.5k个学生,那么它将把它分成5个子数组,我可以为每个输入调用函数5次。这将需要在压缩和上传上进行一些重新工作,在所有lambda执行完成之后,可能必须将其全部压缩到s3中,但这是以后的工作。

我想知道如何实现调用lambda (例如,5次),等待5个响应,然后继续剩下的代码(一旦其压缩并在s3上运行,我将发送带有链接的电子邮件以下载该文件)。让我们缩小它,并为数组中的每个元素触发5个lambda调用。

代码语言:javascript
复制
//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
EN

回答 1

Stack Overflow用户

发布于 2022-02-05 00:45:14

您建议的体系结构并不适合AWS Lambda。拥有AWS函数等待另一个函数没有特别的好处,因为服务是每秒执行的。

一种更有利于云的方法是通过Amazon队列编排工作。

computer

  • Configure

  • 让您的主进程为所需的每一项工作将消息推送到Amazon队列中(例如为一名学生创建PDF ) --这可以由AWS函数完成,甚至可以通过在EC2实例上运行的程序,或者甚至是您自己的

  • -- SQS队列,在消息是received

  • That Lambda函数时触发AWS函数,然后查看它给出的消息(通过event参数),执行工作,然后退出

这种设计的美妙之处在于它是高度可伸缩的(只需向队列中添加更多消息!)处理每条消息的AWS函数可以并行运行(默认限制为1000次并发执行)。

可以将处理消息的Lambda函数配置为,每次执行最多接收10条消息,甚至每次执行只接收1条消息。这两种方法都可以,这取决于您希望如何操作代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70993296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档