【发布时间】:2017-07-04 17:52:16
【问题描述】:
我想从 S3 加载具有行分隔值的文件并将其推送到数组中。
以下代码可以在我的本地机器上运行,但不能作为 lambda 函数执行。 lambda 函数超时(即使我将超时时间增加到 15 秒)。 SDK的不同吗?我在这里错过了什么,因为除了超时之外我没有收到任何错误消息?
Lambda 环境:节点 6.10 访问 S3 的权限是这样设置的
"Statement": [{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::mybucket",
"arn:aws:s3:::mybucket/*"
]
}]
代码如下所示
var AWS = require('aws-sdk');
var s3 = new AWS.S3({region:'eu-central-1'});
exports.index = function(event, context, callback){
var params = {
Bucket: 'mybucket',
Key: 'file.txt'
}
urls=[];
var stream = s3.getObject(params);
stream.on('httpError',function(err){
console.log(err);
throw err;
});
stream.on('httpData', function(chunk) {
urls.push(chunk.toString());
});
stream.on('httpDone', function() {
urls2 = urls.join('\n\r');
callback(urls2);
});
stream.send();
}
我通过 AWS 控制台执行 lambda 时遇到以下错误
{
"errorMessage": "2017-07-04T18:25:20.271Z 19ab7138-60e6-11e7-9e1e-c318d929bc39 Task timed out after 15.00 seconds"
}
感谢您的帮助!
【问题讨论】:
-
lambda 函数需要事件来触发脚本。您在什么事件上触发脚本?
-
当然,我现在通过控制台的“测试”按钮手动执行 lambda。执行开始了,但看起来没有任何事件被命中......所以 callback() 永远不会被调用并且 lambda 超时。
标签: javascript node.js amazon-s3 lambda aws-lambda