Serverlos: Fire and Forget per Invoke-Methode funktioniert nicht wie erwartet

9

Ich habe eine serverlose Lambda- Funktion, in der ich eine Methode auslösen (aufrufen) und vergessen möchte

Ich mache es so

   // myFunction1
   const params = {
    FunctionName: "myLambdaPath-myFunction2", 
    InvocationType: "Event", 
    Payload: JSON.stringify(body), 
   };

   console.log('invoking lambda function2'); // Able to log this line
   lambda.invoke(params, function(err, data) {
      if (err) {
        console.error(err, err.stack);
      } else {
        console.log(data);
      }
    });


  // my function2 handler
  myFunction2 = (event) => {
   console.log('does not come here') // Not able to log this line
  }

Ich habe bemerkt, dass bis und solange ich kein Promise returnIn mache myFunction1, es nicht auslöst myFunction2, aber sollte das Lambda nicht so eingestellt werden, InvocationType = "Event"dass wir wollen, dass dies Feuer und Vergessen ist und sich nicht um die Rückrufantwort kümmert?

Vermisse ich hier etwas?

Jede Hilfe wird sehr geschätzt.

Manzur Khan
quelle
Haben Sie die Protokolle in Cloudwatch überprüft, um festzustellen, warum der Aufruf fehlschlägt?
Surendhar E

Antworten:

2

Sie myFunction1sollten eine asynchrone Funktion sein, daher kann die Funktion zurückgegeben werden, bevor myFunction2sie aufgerufen werden kann lambda.invoke(). Ändern Sie den Code wie folgt, dann sollte es funktionieren:

 const params = {
    FunctionName: "myLambdaPath-myFunction2", 
    InvocationType: "Event", 
    Payload: JSON.stringify(body), 
 };

 console.log('invoking lambda function2'); // Able to log this line
 return await lambda.invoke(params, function(err, data) {
     if (err) {
       console.error(err, err.stack);
     } else {
       console.log(data);
     }
 }).promise();


 // my function2 handler
 myFunction2 = async (event) => {
   console.log('does not come here') // Not able to log this line
 }
Surendhar E.
quelle