Ich versuche, hochgeladene Datei in S3 zu verarbeiten. Seit getObject ist asynchrone Hauptfunktion beendet, bevor die Verarbeitung abgeschlossen ist, und AWS tötet Lambda in 3-4 Sekunden.Warten auf asynchrone Aktionen in AWS Lambda?
Noch schlimmer, die Verarbeitungsmethode hat auch asynchrone Operationen darin - es macht http Aufrufe.
Auf hohem Niveau, sieht mein Code wie:
exports.handler = function(event, context) {
// Get the object from the event and show its content type
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var params = {
Bucket: bucket,
Key: key
};
s3.getObject(params, function(err, data) {
if (err) {
...
} else {
processFile(data.Body.toString(), 0);
console.log("ok");
}
});
//need to wait here till processFile is done
};
processFile = function(content, start) {
... build url to call
http.get(url, function(res) {
console.log("Got response: " + res.statusCode + ");
processFile(content, start + 1);
});
}
ich herausfinden, dass es async in NodeJS ist, aber es ist nicht von amazon enthalten sind; Beide erfordern ('async') oder erfordern ('schlaf') verursacht Fehler.
Lambda-Timeout konfiguriert auf 60 Sekunden, aber es wird in 3-4 Sekunden beendet.
Ich kann bestätigen, ähnliche Probleme mit AWS Lambda zu sehen, und die Timeout-Einstellungen, die nicht die logische Wirkung der Erhöhung der Ausführungsfenster ... Zunehmende * Speicherzuweisung nicht * scheinen um die verfügbare Ausführungszeit zu erhöhen, aber seltsame Effekte werden immer noch beobachtet. – ericpeters0n
erinnerst du dich daran, wie du das gelöst hast? – Juvaly