AWS Lambda
Guia do desenvolvedor

Invocação assíncrona

Quando você invoca um função de maneira assíncrona, o Lambda envia o evento para uma fila. Um processo separado lê os eventos na fila e executa sua função. Quando o evento é adicionado à fila, o Lambda retorna uma resposta informando êxito, sem informações adicionais. Para invocar uma função de maneira assíncrona, defina o parâmetro do tipo de invocação como Event.

$ aws lambda invoke --function-name my-function --invocation-type Event --payload '{ "key": "value" }' response.json { "StatusCode": 202 }

O arquivo de saída (response.json) não contém informações, mas ainda será criado quando você executar esse comando. Se o Lambda não conseguir adicionar o evento a uma fila, a mensagem de erro será exibida na saída do comando.

O Lambda gerencia a fila de invocação assíncrona da função e faz novas tentativas de eventos com falha. Se a função retornar como erro, o Lambda tentará executá-la mais duas vezes, com um intervalo de um minuto entre a primeira e a segunda tentativa, e um intervalo de dois minutos entre a segunda e a terceira. Os erros de função incluem erros retornados pelo código e pelo tempo de execução da função, como o tempo limite ser atingido. Se as 3 tentativas falharem, o Lambda enviará o evento para uma fila de mensagens mortas, caso esteja configurada.


      O Lambda grava cada tentativa em um subsegmento.

Se a função não tiver simultaneidade suficiente disponível para processar todos os eventos, as solicitações adicionais serão limitadas. Para erros de limitação (429) e de sistema (série 500), o Lambda retorna o evento para a fila e tenta executar a função novamente por até 6 horas. O intervalo entre novas tentativas aumenta exponencialmente de 1 segundo na primeira tentativa para até 5 minutos, no entanto, ele pode aumentar ainda mais caso a fila esteja salva. O Lambda também reduz a velocidade em que lê eventos na fila, e eventos no fim da fila podem não ser lidos. Um evento pode ficar na fila por, no máximo, 4 dias.


      Solicitações limitadas aparecem como pendentes no AWS X-Ray.

Mesmo que a função não retorne um erro, é possível que ela receba o mesmo evento do Lambda várias vezes, pois a própria fila se tornará consistente. Se a função não conseguir acompanhar os eventos em andamento, é possível que os eventos sejam excluídos da fila sem serem enviados para a função. Certifique-se de que seu código de função lide corretamente com eventos duplicados, e de que você tenhas simultaneidade suficiente disponível para lidar com todas as invocações. Configure uma dead-letter queue para reter eventos excluídos.

Fila de mensagens mortas da função do AWS Lambda

Quando as três tentativas de processamento de uma invocação assíncrona falharem, o Lambda poderá enviar o evento para uma fila do Amazon SQS ou um tópico do Amazon SNS. Configure sua função com uma fila de mensagens mortas para salvar esses eventos para processamento adicional.

Se você não tiver uma fila ou um tópico, crie um. Escolha o tipo de destino que corresponde ao seu caso de uso.

Sua função precisa de permissões adicionais para enviar eventos a uma fila ou um tópico. Adicione uma política com as permissões necessárias à função de execução de sua função.

Se a fila ou o tópico de destino for criptografado com uma chave gerenciada pelo cliente, a função de execução também deverá ser um usuário na política baseada em recursos da chave.

Depois de criar o destino e atualizar a função de execução de sua função, adicione a fila de mensagens mortas à função. Você pode configurar várias funções para enviarem eventos ao mesmo destino.

Como configurar uma fila de mensagens mortas

  1. Abra a página Functions (Funções) do console do Lambda.

  2. Escolha uma função.

  3. Em Debugging and error handling (Depuração e tratamento de erros), defina DLQ resource (Recurso da DLQ) como Amazon SQS ou Amazon SNS.

  4. Escolha a fila ou o tópico de destino.

  5. Selecione Save (Salvar).

Para configurar uma fila de mensagens mortas com o AWS CLI, use o comando update-function-configuration.

$ aws lambda update-function-configuration --function-name my-function \ --dead-letter-config TargetArn=arn:aws:sns:us-east-2:123456789012:my-topic

O Lambda envia o evento para a fila de mensagens mortas no mesmo estado, mais informações adicionais nos atributos. Você pode usar essas informações para identificar o erro retornado pela função, ou correlacionar o evento com logs ou um rastreamento do AWS X-Ray.

Atributos de mensagens da DLQ

  • RequestID (String) – o ID de invocação da solicitação. Os IDs de solicitação aparecem nos logs de função. Você pode usar o SDK do X-Ray para gravar o ID de solicitação em um atributo no rastreamento e, depois, pesquisar esse ID de solicitação no console do X-Ray. Consulte a amostra de erro de processador para ver um exemplo.

  • ErrorCode (Número) – o código de status HTTP.

  • ErrorMessage (String) – o primeiro 1 KB da mensagem de erro.


      Atributos do evento da fila de mensagens mortas no console do Amazon SQS.

Se o Lambda não puder enviar uma mensagem para a fila de mensagens mortas, ele excluirá o evento e emitirá a métrica DeadLetterErrors. Isso pode acontecer devido a falta de permissões, ou se o tamanho total da mensagem exceder o limite da fila ou do tópico de destino. Por exemplo, se uma notificação do Amazon SNS com um corpo próximo a 256 KB aciona uma função que resulta em erro, os dados do evento adicional incluídos pelo Amazon SNS, combinados aos atributos adicionados pelo Lambda podem fazer com que a mensagem exceda o tamanho máximo permitido na DLQ.

Se você está usando o Amazon SQS como uma fonte de eventos, configure uma DLQ na própria fila do Amazon SQS e não na função do Lambda. Para obter mais informações, consulte Uso do AWS Lambda com o Amazon SQS.

Nesta página: