Ich führe eine AWS Lambda-Funktion für Bild/Video-Verarbeitung mit Node 4.3 as a runtime. Ich rufe meine Funktion von meinem webapp-Code mit dem Knoten aws-sdk auf.AWS Lambda-Aufruf-Funktion gibt nicht immer zurück
Das Problem ist, dass, wenn die Funktion eine lange Zeit dauert (z. B. 250 Sekunden), der Aufruf Callback nie erhalten wird, obwohl ich in den Cloudwatch-Logs deutlich sehen kann, dass die Funktion ordnungsgemäß ausgeführt. Obendrein wird die Funktion mindestens zweimal erneut ausgeführt (dies hängt wahrscheinlich mit dem maxRetries-Parameter des Aufrufs zusammen: da er keine Antwort zurückerhält, versucht er es erneut).
Was mich verwirrt ist, dass es für schnellere Funktionen funktioniert und meine Lambda-Funktion niemals ausläuft. Wer hat ein solches Problem? Kann es mit der neuen 4.3 Runtime zusammenhängen? Beachten Sie, dass ich die context.succeed()
oder context.fail()
weglassen, wie es nicht mehr erforderlich ist, aber ich habe es versucht und es ändert nichts.
Lambda Code
...
var handler = function (event, context, callback) {
// video/image processing code
//
// callback function
..., function(err, result) {
if (err) {
console.log("Error", err, err.stack);
callback(err);
} else {
console.log("Done");
callback(null, result);
}
}
};
Lambda Invocation
var lambda = new AWS.Lambda;
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
});
Lambda Cloudwatch Log
REPORT RequestId: xxx Duration: 206757.82 ms Billed Duration: 206800 ms Memory Size: 1536 MB Max Memory Used: 354 MB
Ich vermute, dass die Timeout-Konfiguration für die SDK 240 Sekunden ist, was erklären könnte, dass Sie eine Wiederholung erhalten. Könnten Sie versuchen, diese Konfiguration in Ihrem CLI zu ändern? – Tom
Nein, die Timeout-Konfiguration ist auf max: 300 Sekunden eingestellt. Wenn es länger als 300 Sekunden dauert, überschreiten die Funktionen die Zeit und ich kann es in den Cloudwatch-Protokollen sehen. Wenn ich das Timeout auf einen niedrigeren Wert setze, sagen wir 30 Sekunden, kehrt die Funktion mit einem Timeout-Fehler zurück und ich erhalte den Callback-Fehler. –
Bitte beachten Sie, dass ich nicht über die Auszeit von Lambda, aber die aus der SDK-Konfiguration sprechen, also Sie? – Tom