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.


¿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
 }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.