我想通过aws lambda函数从给定的URL中获取文件。 我写了这段代码:
exports.handler = (event, context, callback) => {
var http = require('http');
var url= "https://mail.google.com/mail/u/0/?ui=2&ik=806f533220&attid=0.1&permmsgid=msg-a:r-8750932957918989452&th=168b03149469bc1f&view=att&disp=safe&realattid=f_jro0gbqh0"
//var client = http.createClient(80, url);
var request = http.request({
port: 80,
host: url
});
request.on('response', function( res ) {
res.on('data', function( data ) {
console.log(data);
});
});
request.end();
const result = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
callback(null, result);
};
但我收到一条错误消息:
"Response: {
"errorMessage": "RequestId: 52baec5e-60bc-47ea-911e-8e6cb1d2f1da Process exited before completing request"
}"
因为我只需要前2个字节,我想也许我应该阅读它们,而不是整个文件。
有什么想法吗?
非常感谢!
答案 0 :(得分:2)
您是否增加了Lambda执行量超时限制?首次创建时,默认情况下将lambda设置为仅3秒。您可以在基本设置下进行更改。将超时更改为2或3分钟,以使您的Lambda完成执行。同时检查您的内存是否足够。您可能需要增加一点。我有256 MB。
测试lambda时,请注意持续时间和内存大小值。 Lambda将在日志输出的最后一行中打印出来。因此,如果您将Lambda执行超时设置为5分钟且仅需2分钟,或者您的Lambda内存大小接近于 Memory ,则可能需要增加它,以使Lambda不会因执行失败而失败内存问题。
答案 1 :(得分:0)
我通常通过获取或请求来执行此操作。您可以通过这样的请求来做到这一点:
exports.handler = (event, context, callback) => {
var request = require('request');
var url= "https://mail.google.com/mail/u/0/?ui=2&ik=806f533220&attid=0.1&permmsgid=msg-a:r-8750932957918989452&th=168b03149469bc1f&view=att&disp=safe&realattid=f_jro0gbqh0"
request(url, { json: true, timeout: 1000 }, (err, response, body) => {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(body);
callback(null, "Hello from Lambda");
}
});
};
只需运行 npm安装请求即可获取模块请求,您就可以开始了。
从本地开发环境开始总是一个好主意,当一切准备就绪时,您只需压缩文件,然后将其上传到lambda。这样,您就知道代码一切都很好,并且您可以专注于lambda配置细节。这样一来,测试变得更加容易,而且您不会消耗任何lambda资源。
这是将文件上传到lambda的方法: