Ir para o conteúdo

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 do Lambda, primeiro identifique 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 Tarefa expirada. 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 How do I determine if my Lambda function is timing out? (Como determino se minha função do Lambda atingiu o tempo limite?)

Identificar a causa da função do Lambda ter atingido o tempo limite

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

Revisar 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 Using CloudWatch Logs with Lambda (Como usar o CloudWatch Logs com 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 nos logs do CloudWatch 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 não for possível identificar o que causou a expiração a partir do dos logs do CloudWatch, tente uma ou mais das seguintes soluções:

  • Verifique se as configurações de contagem de novas 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 o AWS X-Ray para ajudar a solucionar problemas de desempenho do código.

Para mais informações, consulte Visualizar as 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 sua 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 identificar por que uma solicitação de invocação específica foi negada ou não foi roteada

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 em log as solicitações de rede geradas pelo código da função durante uma invocação

Para mais informações, consulte Logging HTTP wire traces (Registrar em log rastreamentos eletrônicos de HTTP).

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

Certificar-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 mais informações, consulte How do I make my Lambda function idempotent? (Como faço para tornar minha função do Lambda idempotente?)

Inicializar a lógica estática da função fora do manipulador de 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 de 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 em todas as invocações futuras no mesmo ambiente de runtime.

Para mais informações, consulte Otimização da inicialização estática.

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

Verificar se as configurações de contagem de novas 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 tentará realizar a chamada novamente de forma automática. 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 usar um AWS SDK para invocar uma função do Lambda?

(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 da 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.

Verificar se sua função do Lambda tem recursos de sistema suficientes

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

Para mais informações, consulte Memory and computing power (Memória e potência computacional).

Certificar-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 Understanding container reuse in AWS Lambda (Sobre a reutilização de contêineres no AWS Lambda).

Verificar se a 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 How can I resolve the errors that I receive when I integrate API Gateway with a Lambda function? (Como posso resolver os erros que recebo ao integrar o API Gateway com uma função do Lambda?) Além disso, consulte Invocando o Lambda com eventos de outros serviços da AWS.

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

Para consultar suas 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 OFICIALAtualizada há um ano