Por que minha função Lambda está tentando reenviar mensagens válidas do Amazon SQS e colocando-as na minha fila de mensagens não enviadas?

Última atualização: 01/11/2021

Configurei minha função do AWS Lambda para processar mensagens em uma fila do Amazon Simple Queue Service (Amazon SQS). Agora, algumas das mensagens válidas do Amazon SQS são recebidas várias vezes até o maxReceiveCount e acabam na fila de mensagens não enviadas. Por que isso está acontecendo e como garantir que minha função Lambda processe todas as minhas mensagens válidas do Amazon SQS?

Breve descrição

Se a função Lambda estiver suspensa, retorna um erro, ou não responder ao ler um lote de mensagens do Amazon SQS, as mensagens retornarão à fila. Depois que o tempo limite de visibilidade é atingido, a função Lambda recebe o lote de mensagens novamente. Se a função não conseguir processar mensagens válidas várias vezes, o Amazon SQS enviará as mensagens para a fila de mensagens não enviadas, caso você tenha configurado uma.

Para evitar que mensagens válidas sejam colocadas em uma fila de mensagens não enviadas, o código da função deve ser idempotente e capaz de lidar com mensagens várias vezes.

Resolução

Verifique se o código da função Lambda é idempotente

Para obter as práticas recomendadas de idempotência e exemplos de lógica de função, consulte Como tornar minha função Lambda idempotente?

Verifique se o tempo limite de visibilidade da fila do Amazon SQS é pelo menos seis vezes maior do que a configuração de tempo limite da função Lambda

Defina o tempo limite de visibilidade da fila de origem para pelo menos seis vezes o tempo limite da função. O tempo a mais permite que sua função tente processar novamente um lote se a função for acelerada durante o processamento de um lote anterior.

Para obter mais informações, consulte Configurar o tempo limite de visibilidade no Guia do desenvolvedor do Amazon SQS.

Observação: caso sua função não receba mensagens porque o tempo limite de visibilidade da fila não é longo o suficiente, as mensagens não serão registradas no Amazon CloudWatch Logs.

Verifique se o atributo maxReceiveCount está definido como no mínimo cinco na política de redirecionamento da fila de origem

Defina o maxReceiveCount na política de redirecionamento da fila de origem para pelo menos cinco. Se sua função retornar um erro ou não puder ser invocada porque está na simultaneidade máxima, o processamento poderá ser concluído após outras tentativas. Um maxReceiveCount de pelo menos cinco permite que suas mensagens tenham mais chances de serem processadas antes de serem enviadas à fila de mensagens não enviadas.

Para obter mais informações, consulte Como funcionam as filas de mensagens não enviadas? e Evitar o processamento inconsistente de mensagens no Guia do desenvolvedor do Amazon SQS.

Identifique e solucione erros retornados pela função Lambda

Siga as instruções em Como solucionar problemas de falhas de função Lambda? Sua função removerá automaticamente as mensagens da fila somente se a função não retornar um erro.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?