Por que as fontes de eventos assíncronas estão demorando muito para acionar minha função do Lambda?
Há um atraso quando as fontes de eventos assíncronos acionam minha função do AWS Lambda.
Breve descrição
Ao usar invocações assíncronas com suas funções do Lambda, você pode perceber que seus eventos demoram mais do que o esperado para serem acionados. Ou seus eventos podem ser enviados à fila de mensagens não entregues (DLQ) sem serem retirados pelo serviço do Lambda para processamento posterior.
Há vários serviços diferentes da AWS que invocam funções do Lambda de maneira assíncrona:
- Amazon Simple Storage Service (Amazon S3)
- Amazon Simple Notification Service (Amazon SNS)
- Amazon Simple Email Service (Amazon SES)
- AWS CloudFormation
- Amazon CloudWatch Logs
- Eventos do Amazon CloudWatch
- AWS CodeCommit
- AWS Config
Resolução
Atrasos na invocação
Em geral, você pode ver atrasos devido ao método assíncrono de tratamento de solicitações.
- Quando você faz uma solicitação, ela é enviada a uma fila assíncrona interna. O Lambda coleta solicitações da fila assíncrona interna e as envia para a função do Lambda para processamento adicional. Você pode ver um atraso nos logs do Amazon CloudWatch para sua função se a sua função do Lambda apresentar erros. Também poderão ocorrer atrasos se as solicitações forem limitadas no nível da função.
- Se não houver erros ou pontos de dados de limitação no nível da função, verifique se há erros e acelerações nas métricas de nível regional. Se outras funções forem invocadas de maneira assíncrona e, em seguida, encontrarem erros, essas funções serão significativamente atrasadas. Portanto, mesmo que a sua função não tenha pontos de dados de erro ou aceleração, as invocações ou solicitações feitas a ela ainda podem ser atrasadas.
- Se outras funções que estiverem na mesma região da sua função do Lambda forem invocadas várias vezes de maneira assíncrona, a fila interna ficará congestionada. Para resolver o problema, aumente a simultaneidade em nível regional.
- Para verificar o backlog da fila interna, ative o AWS X-Ray na sua função do Lambda. Quando o AWS X-Ray está ativado, você pode usar a propriedade de tempo de permanência. Essa propriedade mostra o tempo total que as solicitações passam na fila interna antes que o serviço Lambda as envie à função do Lambda para processamento.
- Configure uma simultaneidade por função, ou simultaneidade reservada, para proteger as funções contra o backlog da fila.
Invocação duplicada
O Lambda é um serviço distribuído e garante que sua função seja invocada pelo menos uma vez. No entanto, se a função for invocada mais de uma vez, poderão ocorrer duplicatas. Verifique nos logs do CloudWatch essas invocações duplicadas.
- É uma boa prática garantir que sua função possa lidar com solicitações duplicadas. Para obter mais informações,c consulte Como faço para tornar minha função do Lambda idempotente?
- Analise os logs do CloudWatch para o Lambda e verifique os IDs de solicitação da sua função. A partir dos logs, você pode verificar se eventos duplicados têm IDs de solicitação iguais ou diferentes. Os IDs de solicitação permanecem os mesmos durante todo o ciclo de vida de uma invocação assíncrona para o Lambda. Se os IDs de solicitação forem iguais, verifique se a função tem algum ponto de dados de erro que fez com que a invocação fosse repetida e duplicada.
- Se os IDs de solicitação forem diferentes, as invocações duplicadas estão ocorrendo no lado do cliente.
Invocações ausentes
Analise os logs do CloudWatch para diferenciar entre invocações ausentes e atrasadas. Para invocações atrasadas, siga as etapas detalhadas anteriormente na seção Invocações atrasadas deste artigo.
Invocações ausentes ocorrem quando não há simultaneidade suficiente para atender à solicitação. Se a função tiver simultaneidade reservada e apresentar erros, significa que a solicitação está muito tempo na fila assíncrona. A solicitação é então excluída sem ser processada pelo Lambda. Analise a métrica AsyncEventsDropped para verificar o número de eventos que foram eliminados sem executar a função.
Se você configurou a DLQ, verifique a DLQ ou o destino em falha para a solicitação. Se um evento expirar na fila interna após seis horas, a solicitação poderá ser enviada para a DLQ sem ser processada pelo Lambda.
Métricas para invocação assíncrona
Para obter mais informações sobre como analisar outras métricas para invocação assíncrona, consulte Introdução a novas métricas de invocação assíncrona para o AWS Lambda.
Informações relacionadas
Como lidar com a idempotência de funções do Lambda com o AWS Lambda Powertools
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 9 meses
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 2 anos