【发布时间】:2015-10-16 12:09:19
【问题描述】:
我正在尝试在 S3 中处理上传的文件。由于 getObject 是异步主函数在处理完成之前结束,AWS 在 3-4 秒内杀死 lambda。
更糟糕的是,处理方法中还有异步操作——它会进行 http 调用。
在高层次上,我的代码如下所示:
exports.handler = function(event, context) {
// Get the object from the event and show its content type
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var params = {
Bucket: bucket,
Key: key
};
s3.getObject(params, function(err, data) {
if (err) {
...
} else {
processFile(data.Body.toString(), 0);
console.log("ok");
}
});
//need to wait here till processFile is done
};
processFile = function(content, start) {
... build url to call
http.get(url, function(res) {
console.log("Got response: " + res.statusCode + ");
processFile(content, start + 1);
});
}
我发现nodejs中有异步但亚马逊不包含它; require('async') 或 require('sleep) 都会导致错误。
Lambda 超时配置为 60 秒,但在 3-4 秒后退出。
【问题讨论】:
-
我可以确认看到与 AWS lambda 类似的问题,并且超时设置没有增加执行窗口的逻辑效果...增加内存分配确实似乎增加了可用执行时间,但仍然观察到奇怪的效果。
-
你还记得你是如何解决这个问题的吗?
标签: node.js amazon-web-services aws-lambda