【发布时间】:2016-03-25 09:39:10
【问题描述】:
我写了一些基本的 js 来列出 FTP 的文件,但我得到了:
“完成请求前进程退出”
是因为 Lambda 无法与 FTP 交互吗?
顺便说一句,我正在使用 jsftp。
这是我的设置:
- 我使用Serverless创建项目
- 对于我的 lambda,我使用了 nodejs,并且我使用 JSFTP 来处理 ftp 内容。
我的代码:
// Require Serverless ENV vars
var ServerlessHelpers = require('serverless-helpers-js').loadEnv();
// Require Logic
var lib = require('../lib');
// Lambda Handler
module.exports.handler = function (event, context) {
lib.respond(event, function (error, response) {
return context.done(error, response);
});
};
我的 ftp lambda 代码:
var JSFtp = require("jsftp");
module.exports.respond = function (event, cb) {
var ftp = new JSFtp({
host: "host",
user: "user",
password: "password"
});
ftp.auth(ftp.user, ftp.password, function(err, res) {
if (err) console.log(err);
else console.log(res);
ftp.ls(".", function (err, res) {
var results = [];
res.forEach(function (file) {
results.push(file.name);
});
ftp.raw.quit();
return cb(null, results.length);
})
});
};
我在整个地方都添加了一些 console.log(),一旦它尝试 ftp.auth,它似乎就窒息了。
我在云表中看到的输出:
START RequestId: __ID__ Version: $LATEST
END RequestId: __ID__
REPORT RequestId: __ID__ Duration: 526.46 ms Billed Duration: 600 ms Memory Size: 1024 MB Max Memory Used: 33 MB
Process exited before completing request
所以看起来它只是在某个地方窒息......
【问题讨论】:
-
lambda 函数执行的默认超时时间是 3 秒。您的通话可能需要更长的时间并被终止。您可以尝试将其更改为更大的值
-
要么您的进程崩溃(在日志中查找错误),要么您最后没有调用 context.succeed()。
-
@mbaird 使用我正在使用的代码更新了操作
-
您是使用 Lambda 模板创建的吗?代码看起来不对。 Lambda 应该向您传递一个事件对象和一个上下文对象。您的函数采用事件对象和回调函数。我不确定你的函数是否被 Lambda 调用。
-
代码是使用无服务器生成的,如果您查看第一个 sn-p,它具有事件/上下文;那些 r 传递给另一个方法来处理逻辑..
标签: node.js ftp sftp aws-lambda serverless-framework