如何在无服务器上创建一个自定义事件来触发一个函数?

问题描述 投票:0回答:1

我有一个函数,每5分钟进行一次请求,然后得到一个结果数组。我想让这个数组中的每一项都调用另一个lambda来单独处理。

我如何创建一个自定义的触发器,当这个数组被接收时调用一个函数?我使用的是Nodejs与无服务器框架。

PS:如果我只是简单的对数组中的每一个项目进行http调用,我怎么才能得到另一个函数的url,dinamically?

谢谢

javascript node.js amazon-web-services aws-lambda serverless
1个回答
0
投票

你应该可以使用AWS SDK使用invoke方法来调用Lambda。

var params = {
  FunctionName: "my-function", 
  Payload: <Binary String>, 
  Qualifier: "1"
 };
 lambda.invoke(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
   /*
   data = {
    Payload: <Binary String>, 
    StatusCode: 200
   }
   */
 });

https:/docs.aws.amazon.comAWSJavaScriptSDKlatestAWSLambda.html#invok-属性。

这让你可以在当前的函数中调用任意多的Lambda函数。然而,我建议使用另一种技术,因为这并不能非常干净地处理错误,并且假设你将始终使用唯一的Lambnda来处理一个小数组中的少量项目。一个更好的方法可以帮助更好地处理错误,因为我们可以更好地处理数量的增加。

在你的serverless.yml文件中,有一个处理列表中的项目的函数被SNS触发(请在你的情况下正确命名)。

functions:
  receiveItem:
    handler: fileName.receiveItem
    events:
      - sns: recieveItem

然后在拥有数组的Lambda中,将项目作为消息一次一次地添加到SNS主题中,然后你就会让Lambda函数旋转起来处理它们。

© www.soinside.com 2019 - 2024. All rights reserved.