Como soluciono problemas da função do Lambda do SQS ReportBatchItemFailures?

3 minuto de leitura
0

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?

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos