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"...
Du musst angemeldet sein, um einen Kommentar abzugeben.
kurz gesagt, ftp funktioniert nicht mit lambda, da Sie die Verwendung temporärer ports.
sftp funktioniert gut mit lambda. getestet habe ich mit Hilfe von java-code über jsch ohne Probleme; tho ich kann nicht sehen, wie es nicht funktioniert mit jedem js-sftp-lib.
Ist es möglich, getestet nur jetzt.
Stellen Sie sicher, ur timeout gesetzt werden, die lange genug und Sie aufrufenden Kontext.erfolgreich sein() auf die Beendigung des Prozesses
JS:
cb
in Ihrer Methode, nicht eine Funktion, sondern ein Objekt mit drei primären Funktionensucceed, fail, done
. Ausgeführt werden müssen, wie in dem Beispiel, das ich zur Verfügung gestelltStandardmäßig, Lambda-Funktionen haben nur 3 Sekunden. Wenn es länger dauert, als das, erhalten Sie die Fehlermeldung, die Sie sehen.
Können Sie die timeout-alles bis zu 5 Minuten. Ändern Sie es mithilfe der
aws
CLI ausgeführt: