Ich führe eine Meteor (Node 4.4.7) -Applikation aus, die lange Operationen auf AWS Lambda ausführt. Ich rufe die Lambda-Funktion aus meinem Code auf und warte auf die Antwort, bevor ich zum nächsten Aufruf übergehe. Ich habe das Timeout auf 300000ms eingestellt, wie in einem former question beschrieben (sowohl bei Lambda als auch im AWS.Lambda-Objekt in meinem Code).AWS Lambda-Aufruffunktion (js sdk): Timeout wird auf Standard zurückgesetzt
Mein Problem ist, dass manchmal der AWS.Lambda
Timeout-Wert auf den Standardwert von 120000ms zurückgesetzt wird. Da meine Lambda-Funktion mehr Zeit für die Ausführung benötigt (aber immer noch weniger als die maximalen 300s), erhalte ich die Antwort nicht. Außerdem sehe ich, dass meine Funktion 3 weitere Male gemäß dem Standard maxRetries
Wert aufgerufen wird, auch wenn ich es auf 1 setze.
Ich kenne die Schritte nicht, um es zu reproduzieren. Es scheint zufällig. In der Regel passiert es nach ein paar Tagen mit meiner App. Wenn ich die Eigenschaften meines AWS.Lambda
Objekts überprüfe, hat es immer noch den 300000ms Zeitüberschreitungswert, obwohl es sich verhält, als ob es den Standard 120000ms Wert hat. Sobald dies geschieht, haben alle nachfolgenden Aufrufanforderungen das gleiche Problem und ich muss die App neu starten, damit sie wieder funktioniert.
Beachten Sie, dass auf den Lambda-Protokollen sehe ich, dass die Funktionen ordnungsgemäß ausgeführt wird. Dauer < 120s gibt in meinem Code zurück. Dauer> 120s werden wiederholt.
Beispielcode:
var options = {
maxRetries: 1,
httpOptions: {
timeout: 300000
}
};
var lambda = new AWS.Lambda(options);
var myEventObject = {...};
var payload = JSON.stringify('myEventObject');
var params = {
FunctionName: 'myLambdaFunction'
InvocationType: 'RequestResponse',
LogType: 'None',
Payload: payload
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
Unter den Dingen, die ich habe versucht: eine new AWS.Lambda()
für jeden Aufruf erstellen.
Wie in der ursprünglichen Frage gesagt, ist die Lambda-Funktion Timeout nicht der Standardwert, aber bereits auf seinen Maximalwert festgelegt, das ist 300s. –