AWS Lambda调用函数没有'不要总是回来
AWS Lambda invoke function doesn't always return
我正在运行一个用于图像/视频处理的AWS Lambda函数,将Node 4.3作为运行时。我正在使用节点aws-sdk从我的webapp代码中调用我的函数。
问题是,当函数执行需要很长时间(例如250秒)时,调用回调永远不会收到,尽管我可以在aws cloudwatch日志中清楚地看到函数执行正确。除此之外,该函数至少会再次运行两次(这可能与调用中的maxRetries参数有关:因为它没有得到响应,所以会重试)。
让我困惑的是,它适用于更快的函数,而我的lambda函数永远不会超时。有人有这样的问题吗?它是否与新的4.3运行时有关?注意,我省略了context.succeed()
或context.fail()
,因为它不再是必需的,但我尝试过它,它没有改变任何东西。
Lambda代码
...
var handler = function (event, context, callback) {
// video/image processing code
//
// callback function
..., function(err, result) {
if (err) {
console.log("Error", err, err.stack);
callback(err);
} else {
console.log("Done");
callback(null, result);
}
}
};
Lambda调用
var lambda = new AWS.Lambda;
var myEventObject = {...};
var payload = JSON.stringify('myEventObject');
var params = {
FunctionName: 'myLambdaFunction'
InvocationType: 'RequestResponse',
LogType: 'None',
Payload: payload
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
Lambda CloudWatch日志
REPORT RequestId: xxx Duration: 206757.82 ms Billed Duration: 206800 ms Memory Size: 1536 MB Max Memory Used: 354 MB
如注释中所述,aws-sdk有自己的超时配置设置,默认设置为120秒(这是一个与lambda不同的超时设置)。
在当前的情况下,当lambda运行更多的超时时,sdk会假设失败并重试。
将此配置设置为300秒应该可以解决问题。正如Daniel T在评论中所展示的,临时更改可以通过以下方式实现:var lambda=new AWS。Lambda({httpOptions{timeout:300000}});
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- node.js:setInterval()正在跳过调用
- 如何在单击复选框后调用控制器方法
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 使用Google Visualization动态调用构造函数
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 调用函数内部的函数
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- AWS Lambda调用函数没有'不要总是回来
- 阿贾克斯回来了,但动作是“永远不会”.调用