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

iCo*_*unk 6 ftp sftp node.js aws-lambda serverless-framework

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

"在完成请求之前退出流程"

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

我正在使用jsftp btw.

这是我的设置:

  • 我使用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);
    });
};
Run Code Online (Sandbox Code Playgroud)

我的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);
        })
    });
};
Run Code Online (Sandbox Code Playgroud)

我在整个地方添加了一些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
Run Code Online (Sandbox Code Playgroud)

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

iCo*_*unk 6

简而言之,ftp 不能与 lambda 一起使用,因为它们使用临时端口。

sftp 可以很好地与 lambda 配合使用。我通过 jsch 使用 java 代码进行了测试,没有任何问题;我看不出它是如何与任何 js sftp 库一起使用的。

  • 这不是真的。也许是在你回答这个问题的时候,所以我不会反对这个假设。我们在生产环境 AWS Lambda 中使用 Python 编写了 FTP 传输代码。 (2认同)
  • https://aws.amazon.com/lambda/faqs/ 表示不允许传入 TCP 连接。这意味着 FTP PASV 至少不会工作。问:AWS Lambda 函数代码有哪些限制?...入站网络连接被 AWS Lambda 阻止,出站连接仅支持 TCP/IP 套接字,并且 ptrace(调试)系统调用受到限制。作为反垃圾邮件措施,TCP 端口 25 流量也受到限制。 (2认同)