Como soluciono problemas da função do Lambda do SQS ReportBatchItemFailures?
Eu configurei a resposta parcial em lote para minha função do AWS Lambda que tem o Amazon Simple Queue Service (Amazon SQS) configurado como uma fonte de eventos. Agora, minha função Lambda está retornando uma lista de "ReportBatchItemFailures" e ocorre uma das seguintes situações: o Lambda tenta novamente um lote de mensagens inteiro quando não houve um erro de função ou o Lambda não tenta novamente nenhum dos lotes de mensagens parciais. Como solucionar o problema?
Resolução
Observação: você deve configurar manualmente a resposta parcial em lote na função Lambda para processar programaticamente lotes parciais do Amazon SQS. Para obter mais informações, consulte Relatórios de falhas de itens em lote no Guia do desenvolvedor do AWS Lambda.
Exemplo de comando da AWS Command Line Interface (AWS CLI) para ativar a resposta parcial em lote para uma função Lambda
Importante: substitua <esm_UUID> pelo identificador universalmente exclusivo (UUID) do mapeamento de fonte de eventos do Amazon SQS. Para recuperar o UUID do mapeamento da fonte de eventos, execute o comando list-event-source-mappings da AWS CLI. Se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.
aws lambda update-event-source-mapping --uuid <esm_UUID> --function-response-types "ReportBatchItemFailures"
Para solucionar problemas de ReportBatchItemFailures em que o Lambda tenta novamente um lote inteiro de mensagens do SQS quando não houve um erro de função
Revise a resposta parcial em lote no código da função Lambda para ver se há alguma das respostas a seguir. Em seguida, corrija o problema com base na resposta registrada.
Observação: o Lambda trata um lote como uma falha completa se sua função retornar qualquer uma das respostas a seguir.
Respostas para um EventResponse que não é um JSON válido
return "Hello world" return ""
Resposta para um valor itemIdentifier vazio
return {"batchItemFailures":[{"itemIdentifier": ""}]}
Resposta para um valor itemIdentifier nulo
return {"batchItemFailures":[{"itemIdentifier": None}]}
Resposta para um valor itemIdentifier com um nome de chave incorreto
return {"batchItemFailures":[{"bad_key": messageID}]}
Resposta para um valor itemIdentifier com um ID da mensagem que não existe
return {"batchItemFailures":[{"itemIdentifier": "random_ID"}]}
Importante: sua função Lambda deve retornar um valor JSON itemIdentifier válido.
Para solucionar problemas de ReportBatchItemFailures em que o Lambda não tenta novamente nenhum dos lotes parciais de mensagens
Revise a resposta parcial em lote no código da função Lambda para ver se há alguma das respostas a seguir. Em seguida, corrija o problema com base na resposta registrada.
Observação: o Lambda trata um lote como um sucesso completo quando sua função retorna qualquer uma das respostas a seguir.
Resposta para uma lista de batchItemFailures vazia
return {"batchItemFailures":[]}
Resposta para uma lista de batchItemFailures nula
return {"batchItemFailures": None}
Respostas para um EventResponse com um valor JSON vazio ou inesperado
return {} return {"Key1":"Value1"}
Respostas para um EventResponse nulo
return return None
Importante: a função Lambda deve retornar uma resposta que contenha um valor JSON “batchItemFailures” que inclua uma lista de IDs de mensagens válidas.
Informações relacionadas
Como impedir que uma mensagem do Amazon SQS invoque minha função Lambda mais de uma vez?
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 6 meses