Serverless: sparare e dimenticare con il metodo invoke non funziona come previsto


9

Ho una funzione lambda Serverless , in cui voglio sparare (invocare) un metodo e non pensarci più

Lo sto facendo in questo modo

   // 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
  }

Ho notato che fino a quando e se non faccio un Promise returnin myFunction1, non si innesca myFunction2, ma non dovrebbe impostare il lambda InvocationType = "Event"significa che vogliamo che questo sia fuoco e dimentichi e non ci importi della risposta di callback?

Mi sto perdendo qualcosa qui?

Qualsiasi aiuto è molto apprezzato.


Hai controllato i log in Cloudwatch per capire perché l'invocazione non riesce?
Surendhar E

Risposte:


2

Il tuo myFunction1dovrebbe essere una funzione asincrona è per questo che i rendimenti delle funzioni prima myFunction2potevano essere invocate lambda.invoke(). Modificare il codice nel seguente quindi dovrebbe funzionare:

 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
 }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.