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

5 minuto de leitura
0

Eu configurei minha função do AWS Lambda para processar mensagens em uma fila do Amazon Simple Queue Service (Amazon SQS). Algumas das minhas mensagens válidas do Amazon SQS são recebidas várias vezes até o maxReceiveCount e acabam na minha fila de cartas sem saída.

Breve descrição

Se sua função do Lambda for controlada, retornar um erro ou não responder ao ler um lote de mensagens do Amazon SQS, as mensagens retornarão à sua fila. Após o tempo limite de visibilidade, sua função do Lambda recebe o lote de mensagens novamente. Caso a sua função falhar em processar mensagens válidas várias vezes, o Amazon SQS enviará as mensagens para sua fila de mensagens não entregues, se você tiver configurado uma.

Para evitar que mensagens válidas sejam colocadas em uma fila de mensagens não entregues, seu código de função deve ser idempotente e capaz de lidar com mensagens várias vezes. Para mais informações, consulte Como evitar que uma mensagem do Amazon SQS invoque minha função do Lambda mais de uma vez?

Resolução

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

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

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

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

Para mais informações, consulte Tempo limite de visibilidade do Amazon SQS no Guia do desenvolvedor do Amazon SQS.

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

Verifique se o atributo maxReceiveCount está definido como pelo menos cinco na política de redrive da sua fila de origem

Defina o maxReceiveCount na política de redrive da fila de origem para pelo menos cinco. Se sua função retornar um erro ou não puder ser invocada porque está em simultaneidade máxima, o processamento poderá ser bem-sucedido com tentativas adicionais. Um maxReceiveCount de pelo menos cinco dá às suas mensagens mais chances de serem processadas antes de serem enviadas para sua fila de mensagens não entregues.

Para atualizar o limite máximo de configuração de simultaneidade, consulte Configurar a simultaneidade máxima para fontes de eventos do Amazon SQS.

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

Verifique a função do Lambda quanto à limitação e à simultaneidade reservada

Às vezes, as funções do Lambda são limitadas para proteger seus recursos e aplicativos posteriores. Embora o Lambda seja dimensionado automaticamente para acomodar o tráfego de entrada, sua função ainda pode ser limitada por vários motivos.

Use o console do Lambda para verificar a configuração de simultaneidade reservada. Se a simultaneidade reservada não estiver configurada, a função usará simultaneidade não reservada. Quando as invocações com funções excedem a simultaneidade não reservada, ocorre o controle de utilização.

Observação: Se você configurou uma função com zero simultaneidade reservada, a função será controlada porque não pode processar nenhum evento. Verifique se aumentou o valor para um número maior que zero.

Se outras funções na mesma região da AWS estiverem usando o limite de simultaneidade, o controle poderá ocorrer. As funções do Lambda que sofrem controle enviam as mensagens SQS para a fila de mensagens não entregues.

Evite reprocessar todas as mensagens SQS em um lote com falha

Todas as mensagens do SQS são visíveis na fila de mensagens não entregues para que as funções do Lambda encontrem erros ao processar um lote, incluindo mensagens que o Lambda processou com êxito. Em seguida, o Lambda repete todo o lote de mensagens SQS.

Para evitar o reprocessamento de todas as mensagens SQS em um lote com falha, configure o mapeamento da origem do evento com o valor ReportBatchItemFailures na lista FunctionResponseTypes. Isso permite que sua função retorne um sucesso parcial e reduza o número de novas tentativas. Para mais informações, consulte Relatar falhas em itens de lote.

Identifique e resolva quaisquer erros que sua função do Lambda retornar

Siga as instruções em Como soluciono falhas de funções do Lambda? Sua função remove automaticamente as mensagens da sua fila somente se a função não retornar um erro.

Informações relacionadas

Como solicito um aumento do limite de simultaneidade para minha função Lambda?

Como soluciono problemas de controle de utilização de funções do Lambda com erros de “Taxa excedida” e 429 “TooManyRequestsException”?

AWS OFICIAL
AWS OFICIALAtualizada há um ano