Sto cercando di elaborare il file caricato in S3. Dal getObject la funzione principale asincrona termina prima che l'elaborazione sia terminata e AWS uccide lambda in 3-4 secondi.Come attendere le azioni asincrone all'interno di AWS Lambda?
Ancora peggio, il metodo di elaborazione ha anche operazioni asincrone in esso - effettua chiamate http.
Su di alto livello, il mio codice è simile:
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);
});
}
scopro che c'è asincrono in nodejs, ma non è incluso da Amazon; Entrambi richiedono ('async') o richiedono ('sleep) causa errori.
Timeout lambda configurato su 60 secondi, ma esce in 3-4 secondi.
Posso confermare visto problemi simili con AWS lambda, e le impostazioni di timeout non avere l'effetto logica di finestra di esecuzione aumentando ... Aumentare l'allocazione di memoria * non * sembrano per aumentare il tempo di esecuzione disponibile, ma si osservano ancora strani effetti. – ericpeters0n
ti ricordi come hai risolto questo? – Juvaly