Kann AWS Lambda reach/interagieren mit S/FTP?

Schrieb ich einige grundlegende js, um nur eine Liste der Dateien von einem FTP-aber ich bekomme die Meldung:

"Prozess wurde beendet vor Abschluss der Anfrage"

Ist, da Lambda nicht interagieren können, mit FTP?

Ich bin mit jsftp btw.

Hier ist mein setup:

  • Ich benutze Serverlose um das Projekt zu erstellen
  • Für meine lambda, die ich verwendet, nodejs und ich bin mit JSFTP zum Umgang mit dem ftp-Kram.

Mein code:

//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);
    });
};

Mein ftp-lambda-code:

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);
        })
    });
};

Ich noch ein paar console.log() alle über dem Platz und es scheint, wie es gewürgt wird, sobald es versucht ftp.auth.

Den Ausgang sehe ich in der cloud watch:

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

So wie es aussieht ist es nur gewürgt irgendwo...

  • Der Standardwert für das Zeitlimit für eine lambda-Funktion-Ausführung ist in 3 Sekunden. Ihren Anruf nehmen könnte, mehr und gekündigt bekommen. Sie können versuchen, es zu ändern, um einen größeren Wert
  • Entweder Ihr Prozess abstürzt (Fehler in der log), oder Sie sind nicht aufrufenden Kontext.es gelingt() am Ende.
  • aktualisierte op mit dem code im mit
  • Haben Sie erstellen diese mit einer Lambda-Vorlage? Der code sieht falsch aus. Lambda sollte vorbei und werden Sie ein event-Objekt und einem Kontext-Objekt. Ihre Funktion ist unter einer event-Objekt, und eine callback-Funktion. Ich bin nicht sicher, ob Sie Ihre Funktion noch aufgerufen wird von der Lambda.
  • der code wird generiert unter Verwendung Serverlose, wenn u Blick auf das erste snippet, es ist das Ereignis/Kontext; die r übergeben, um eine andere Methode zum Umgang mit der Logik..
  • Es wird wahrscheinlich helfen, um Fehler zu protokollieren UND beenden Sie die Funktion aus, wenn Sie passieren. Sie müssen dazu in ftp.auth und ftp.ls. if(err) { console.log('ERROR', err); return cb('Unable to get list');}. Wenn Sie das nicht tun, dass der code wird weiterhin ausgeführt, obwohl Sie nicht angemeldet oder haben eine andere config-Fehler. Ich war in der Lage zu duplizieren, Ihr Problem mit den falschen Anmeldeinformationen, so dass ich vermute, Sie haben vielleicht ein problem gibt, oder mit dem host.
  • auch, dumme Frage, aber hast du add jsftp zu den Modul-Paket.json und strukturieren Sie Ihre Funktion?
  • die meisten auf jeden Fall. von dem, was ive gesehen, wenn u dont fügen Sie das Modul, und zu tun, die erfordern, lambda-verlassen mit "unable to find package" Art des Fehlers. gerade jetzt im wahrsten Sinne des Wortes sehen "Prozess beenden vor dem beenden"...

Schreibe einen Kommentar