Como soluciono erros de tempo limite de invocação da função do Lambda?

8 minuto de leitura
0

Minha função do AWS Lambda atingiu o tempo limite de forma intermitente, embora eu não tenha implantado nenhuma alteração no código.

Resolução

As funções do Lambda podem atingir o tempo limite por vários motivos. Para solucionar problemas de tempo limite da função Lambda, primeiro determine o que causou o problema. Em seguida, corrija o problema com base no seu caso de uso.

Verificar se a função do Lambda atingiu o tempo limite

Para recuperar os IDs de solicitação de uma invocação expirada, pesquise no grupo de logs do Amazon CloudWatch da função a frase Task timed out. Em seguida, use os IDs de solicitação das invocações expiradas associadas para recuperar os logs completos de cada tempo limite de invocação.

Para obter instruções, consulte Como determino se minha função do Lambda está atingindo o tempo limite?

Identificar a causa da expiração da função do Lambda

Use um ou mais dos métodos a seguir para identificar o ponto de falha que causou a expiração da função:

Revise o CloudWatch Logs para Lambda

É possível usar o Amazon CloudWatch para visualizar todos os logs gerados pelo código da sua função e identificar possíveis problemas. Para obter instruções, consulte Usar o CloudWatch Logs com o Lambda.

Se sua função retornou um rastreamento de pilha, a mensagem de erro no rastreamento de pilha especifica o que causou o erro.

Importante: o Lambda gera três linhas de log para cada invocação automaticamente (START, END e REPORT). Essas três linhas são as únicas que aparecem no CloudWatch Logs da sua função se uma das seguintes afirmações for verdadeira:

  • Não há nenhum outro registro em log explícito configurado no código personalizado da função do Lambda.
  • O limite de duração da função é atingido antes que o Lambda possa executar o código da função que gera logs.

Se você não conseguir determinar o que causou a expiração do CloudWatch Logs, tente uma ou mais das seguintes soluções:

  • Verifique se as configurações de contagem de tentativas e tempo limite no AWS SDK que você usou permitem tempo suficiente para que sua função seja inicializada.
  • Aumente temporariamente a configuração de tempo limite da função do Lambda para que o código da função tenha tempo suficiente para gerar dados de log.
  • Aumente a memória configurada da função para ajudar a reduzir a latência da duração da invocação e aumentar a capacidade de computação.

Para adicionar mais resultados de registro em log ao código da sua função, consulte a documentação a seguir sobre a versão de runtime do Lambda que você usou:

Usar o AWS X-Ray para identificar gargalos no desempenho do código

Se sua função do Lambda usa recursos, microsserviços, bancos de dados ou APIs web HTTP downstream da AWS, é possível usar a AWS X-Ray para ajudar a solucionar problemas de desempenho de código.

Para mais informações, consulte Visualizar invocações da função do Lambda usando o AWS X-Ray.

Usar o Lambda Insights para coletar métricas a nível de sistema para a função

O Lambda Insights coleta métricas a nível de sistema, que incluem métricas de tempo de CPU, memória, disco e rede. Além disso, coleta informações de diagnóstico, que incluem inicializações a frio e encerramentos de processadores do Lambda para ajudar você a isolar problemas com suas funções do Lambda.

Observação: o uso do Lambda Insights gera cobranças em sua conta da AWS. A cobrança é feita pelo tempo de invocação consumido pela extensão do Lambda em incrementos de 1 ms.

Usar os logs de fluxo da VPC para determinar por que uma solicitação de invocação específica foi negada ou não foi encaminhada

Os logs de fluxo da VPC permitem que você veja todo o tráfego de rede que flui de e para uma Amazon Virtual Private Cloud (Amazon VPC).

Para mais informações, consulte Solucionar problemas de redes no Lambda.

Observação: as variáveis a seguir são válidas caso opte por configurar os logs de fluxo da VPC:

Usar rastreamentos eletrônicos de HTTP para registrar detalhadamente as solicitações de rede geradas pelo código da função durante uma invocação

Para mais informações, consulte Registrar em log rastreamentos eletrônicos de HTTP.

Práticas recomendadas para evitar a expiração da função do Lambda

Certifique-se de que a função do Lambda seja idempotente

As chamadas de API podem demorar mais do que o esperado devido a problemas transitórios de rede. Problemas de rede também podem causar novas tentativas e solicitações de API duplicadas. Para se preparar para essas ocorrências, certifique-se de que sua função do Lambda seja idempotente.

Para obter mais informações,c consulte Como faço para tornar minha função do Lambda idempotente?

Inicializar a lógica estática da função fora do manipulador da função

Quando você inicializa uma função do Lambda, o Lambda aloca até 10 segundos para que a fase de inicialização da invocação seja concluída. Devido a essa restrição de tempo, é uma prática recomendada realizar as seguintes ações fora do manipulador da função no código de inicialização:

  • Importar bibliotecas e dependências
  • Definir a configuração inicial
  • Inicializar conexões com outros serviços e recursos downstream

Essa inicialização estática permite que esses recursos sejam inicializados uma vez por sandbox e depois reutilizados para todas as invocações futuras no mesmo ambiente de runtime.

Para mais informações, consulte Optimizing static initialization (Otimizar a inicialização estática).

Observação: o Lambda remove conexões ociosas com recursos downstream. Para permitir que a função mantenha uma conexão persistente, use a variável TCP keepAlive associada ao runtime do Lambda que você usa.

Verifique se as configurações de contagem de tentativas e tempo limite no AWS SDK que você usa garantem tempo suficiente para que sua função seja inicializada

Se você usou um AWS SDK para fazer uma chamada de API e a chamada falhar, o AWS SDK repetirá a chamada automaticamente. O número de tentativas do AWS SDK e a duração de cada nova tentativa são determinados pelas configurações que variam entre cada AWS SDK. Sua função pode precisar de mais tempo para ser inicializada do que as configurações padrão do AWS SDK permitem.

Para mais informações, consulte Como soluciono problemas de repetição e tempo limite ao invocar uma função do Lambda usando um AWS SDK?

(Opcional) Configurar a simultaneidade provisionada para sua função do Lambda

A simultaneidade provisionada inicializa um número solicitado de ambientes de runtime para que estejam preparados para responder imediatamente às invocações de sua função. Para configurar a simultaneidade provisionada para sua função, siga as instruções em Configurar a simultaneidade provisionada.

Observação: a configuração da simultaneidade provisionada gera cobranças em sua conta da AWS. É possível configurar a simultaneidade provisionada em uma versão de uma função ou em um alias de função do Lambda.

Verifique se a função do Lambda tem recursos de sistema suficientes

A quantidade de largura de banda da rede e CPU alocada para uma invocação de função do Lambda é determinada pela configuração de memória da função.

Para mais informações, consulte Memória e poder de computação.

Certifique-se de que todos os processos em segundo plano que sua função do Lambda usa sejam concluídos antes que o manipulador da função retorne uma string

Para mais informações, consulte Sobre a reutilização de contêineres no AWS Lambda.

Verifique se sua função do Lambda está configurada para funcionar dentro das configurações de tempo limite máximo de qualquer serviço integrado da AWS

Embora o limite máximo de tempo limite de invocação de uma função do Lambda seja de 15 minutos, outros serviços da AWS podem ter limites diferentes.

Por exemplo, o Amazon API Gateway espera, no máximo, 29 segundos para que uma invocação de proxy da função do Lambda seja concluída.

Para mais informações, consulte Como posso resolver os erros que recebo ao integrar o API Gateway com uma função do Lambda? Além disso, consulte Invocar o Lambda com eventos de outros serviços da AWS.

Confirme se há um caminho de rede válido para o endpoint que sua função está tentando alcançar

Para revisar as configurações de rede, siga as instruções em Como soluciono problemas de tempo limite com uma função do Lambda que está em uma Amazon VPC?

AWS OFICIAL
AWS OFICIALAtualizada há 3 meses