AWS Lambda可以与S / FTP进行交互吗?

我写了一些基本的js来列出一个FTP的文件,但我得到:

“完成请求之前退出进程”

那是因为Lambda无法与FTP交互?

我正在使用jsftp btw。

这是我的设置:

  • 我使用无服务器来创build项目
  • 对于我的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 

所以它看起来只是在某处窒息而已

现在可以testing了。 确保你的超时设置足够长,你在进程终止时调用context.succeed()

 function __main__(event, context) { var JSFtp = require("jsftp"); var ftp = new JSFtp({ host: "speedtest.tele2.net", port: 21, // defaults to 21 }); ftp.ls(".", function(err, res) { var results = []; res.forEach(function(file) { results.push(file.name); }); context.succeed(results); }); }; 

简而言之,因为使用临时端口,所以ftp不能和lambda一起工作。

sftp会和lambda很好地配合使用。 我通过jsch使用java代码testing没有问题; 我不能看到它将如何与任何js sftp lib工作。

默认情况下,Lambda函数只有3秒钟才能完成。 如果花费比这更长的时间,你会看到你所看到的错误。

您可以将超时时间调整到最多5分钟。 要使用aws CLI更改它,请运行:

 aws lambda update-function-configuration --function-name my-lambda-function --timeout 300