Sem servidor: disparar e esquecer pelo método de chamada não funciona conforme o esperado


9

Eu tenho uma função lambda sem servidor , na qual quero disparar (invocar) um método e esquecê-lo

Eu estou fazendo assim

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

Percebi que até e, a menos que eu faça um Promise returnin myFunction1, ele não dispara myFunction2, mas não deve definir o lambda InvocationType = "Event"como queremos que isso seja acionado e esquecido e que não nos importo com a resposta de retorno de chamada?

Estou faltando alguma coisa aqui?

Qualquer ajuda é muito apreciada.


Você verificou os logs no Cloudwatch por que a chamada está falhando?
Surendhar E

Respostas:


2

Você myFunction1deve ser uma função assíncrona; é por isso que a função retornada antes myFunction2pode ser chamada lambda.invoke(). Mude o código para o seguinte, então ele deve 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
 }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.