我有一个函数,每 5 分钟发出一个请求并获得一个结果数组。我想让这个数组中的每个项目调用另一个 lambda 单独处理。
如何创建自定义触发器以在接收此数组时调用函数?我正在使用带有无服务器框架的 Nodejs。
PS:如果我只是简单地为数组中的每个项目调用http,我如何动态获取另一个函数的url?
谢谢!
您应该能够使用 AWS 开发工具包通过调用方法调用 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.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke-property
这使您可以根据需要从当前函数中调用任意数量的 Lambda 函数。但是,我建议使用不同的技术,因为这不能很好地处理错误,并且假设您将始终使用唯一的 Lambnda 来处理小数组中的少量项目。更好的方法可以帮助更好地处理错误,因为我们可以更好地处理体积的增加。
在您的 serverless.yml 文件中,有一个处理列表中项目的函数由 SNS 触发(请在您的情况下正确命名(:
functions:
receiveItem:
handler: fileName.receiveItem
events:
- sns: recieveItem
然后在具有数组的 Lambda 中,将项目作为消息逐个添加到 SNS 主题中,然后您将让 Lambda 函数启动并处理它们。