Sin servidor: el método de invocar y olvidar por invocación no funciona como se esperaba

9

Tengo una función lambda sin servidor , en la que quiero activar (invocar) un método y olvidarlo

Lo estoy haciendo de esta manera

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

Me he dado cuenta de que hasta ya menos que haga una Promise returnen myFunction1, no lo hace el gatillo myFunction2, pero no debería establecer el lambda InvocationType = "Event"significa que queremos que esto sea dispara y olvida y no se preocupan por la respuesta de devolución de llamada?

¿Me estoy perdiendo de algo?

Cualquier ayuda es muy apreciada.

Manzur Khan
fuente
¿Revisó los registros en Cloudwatch por qué falla la invocación?
Surendhar E

Respuestas:

2

Su myFunction1debe ser una función asíncrona es por eso que las declaraciones de las funciones antes myFunction2podían ser invocados lambda.invoke(). Cambie el código a lo siguiente, entonces debería funcionar:

 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
fuente