AWS Lambda “Proces afgesloten voordat verzoek werd voltooid”

Ik probeer een DynamoDB-clientmethode aan te roepen en één item uit de DynamoDB-tabel te halen. Ik gebruik AWS Lambda. Ik krijg echter steeds de melding:

“Proces afgesloten voordat verzoek werd voltooid.”

Ik heb voor de zekerheid de time-out verhoogd, maar de verwerkingstijd is korter dan de time-out. Enig advies?

console.log('Loading event');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = function(event, context) {
dynamodb.listTables(function(err, data) {
});
var params = {
    "TableName": "User",
     "Key":
        {"User Id"   : {"S":event.objectId}
    },
    "AttributesToGet"   : ["First Name","Last Name", "Latitude", "Longitude"],
    "ConsistentRead"    : true
  }
   dynamodb.getItem(params, function(response,result) {
    response.on('data', function(chunk){
    console.log(""+chunk);
    console.log("test1")
    context.done(result);
});
result.on('ready', function(data){
    console.log("test2")
    console.log("Error:" + data.error);
    console.log("ConsumedCapacityUnits:" + data.ConsumedCapacityUnits);
     context.done('Error',data);
    // ...
});
});
};

Antwoord 1, autoriteit 100%

Kijk eens naar je geheugenverbruik (opgenomen in de laatste logregel). Ik kreeg dezelfde melding toen ik te weinig geheugen toewijsde aan mijn lambda-functie.


Antwoord 2, autoriteit 82%

Het bericht “Proces afgesloten voordat verzoek werd voltooid” betekent dat de Javascript-functie is afgesloten voordat context.done(of context.succeed, enz.) wordt aangeroepen. Meestal betekent dit dat er een fout in uw code zit.

Ik ben (helemaal) geen Javascript-expert, dus er kunnen elegantere manieren zijn om de fout te vinden, maar mijn benadering was om een ​​aantal console.log-berichten in mijn code te plaatsen, voer het uit en bekijk vervolgens de logboeken. Ik kan meestal de beledigende regel in de gaten houden en, als ik er lang genoeg naar kijk, kan ik meestal mijn fout achterhalen.

Ik zie dat je al wat logboekregistratie hebt. Wat zie je in de uitvoer?


Antwoord 3, autoriteit 9%

Ik heb callbackgebruikt in plaats van context.
Meer recente voorbeelden op de aws-website gebruiken callbackin plaats van context.

Om het verzoek te voltooien, moet een van de onderstaande opties worden aangeroepen:

callback(error);         // This is used when there is an error
// or
callback(null, data);    // This is used when there is a success
                         // 'data' will contain success result, like some JSON object  

Wanneer de uitvoering van lambda het verzoek voltooit,
het niet bellen van een van de bovenstaande callbacks,
u ziet onderstaande fout:

“Proces afgesloten voordat verzoek werd voltooid.”


Antwoord 4

Fout in uw code. Verwijder de laatste }); en gebruik geen context die er is voor achterwaartse compatibiliteit, gebruik callbacks op node.js 4.3 en 6.1 runtime.


Antwoord 5

Misschien volg je de aws lamda-standaard voor het gebruik van de functie niet
controleer deze Golang-code.

package main
import "github.com/aws/aws-lambda-go/lambda"
func main() {
   lambda.Start(yourFunction)
}
func yourFunction(){
   // do your stuff
}

Antwoord 6

Controleer uw lamda-geheugengebruik, bij mij is deze fout opgetreden omdat lambda 201 MB geheugen gebruikte, wat meer was dan 200 MB geheugen voor de uitvoering ervan.

Controleer eerst uw code en als deze in orde is, verhoog dan de geheugentoewijzing aan deze lambda vanuit configuratie > Algemene configuratie > Bewerken > Geheugen vergroten

Other episodes