Como soluciono problemas de tempo-limite de invocação de função do Lambda?

Última atualização: 11/01/2022

Minha função do AWS Lambda está expirando intermitentemente, mesmo que eu não tenha implantado alguma alteração de código. Como soluciono problemas de tempo-limite de função do Lambda e como evito que as funções do Lambda atinjam o tempo-limite?

Resolução

As funções do Lambda podem atingir o tempo-limite por vários motivos. Para solucionar problemas de tempo-limite de função do Lambda, primeiro determine o que está causando o problema usando um dos serviços e recursos da AWS listados neste artigo. Em seguida, corrija o problema com base no seu caso de uso.

Para evitar que a função do Lambda atinja o tempo-limite, consulte a seção Práticas recomendadas para evitar que as funções do Lambda atinjam o tempo-limite deste artigo.

Verificar se a função do Lambda está atingindo o tempo-limite

Recupere os IDs de solicitação de qualquer invocação que tenha atingido o tempo-limite procurando a frase Task timed out (A tarefa atingiu o tempo-limite) no grupo de logs do Amazon CloudWatch referentes à função. Em seguida, use os IDs de solicitação das invocações associadas que atingiram o tempo-limite 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 o que faz a função do Lambda atingir o tempo-limite

Use um ou mais dos seguintes métodos para identificar o ponto de falha que faz a sua função atingir o tempo-limite:

Analisar seus Amazon CloudWatch Logs para Lambda

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

Se sua função retorna um rastreamento de pilha, a respectiva mensagem de erro especifica o que causa 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 aparecerão nos CloudWatch Logs da sua função se uma das seguintes situações for verdadeira:

  • Não há outro registro 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, depois de analisar os logs, você não conseguir determinar o que faz o tempo-limite expirar, tente um ou mais dos seguintes procedimentos:

Para adicionar mais saída de log ao código da sua função, consulte a seguinte documentação referente ao tempo de execução do Lambda que você está usando:

Usar o AWS X-Ray para identificar quaisquer gargalos de performance do código

Se a função do Lambda usar recursos da AWS downstream, microsserviços, bancos de dados ou APIs da web HTTP, você poderá usar o AWS X-Ray para ajudar a solucionar problemas de performance de código.

Para obter mais informações, consulte Uso do AWS Lambda com o AWS X-Ray.

Usar o Lambda Insights para coletar métricas no nível do sistema para sua função

O Lambda Insights coleta métricas no nível do sistema, incluindo tempo de CPU, memória, disco e métricas de rede. Ele também coleta informações de diagnóstico, incluindo partidas a frio e desligamentos de operador do Lambda para ajudar a isolar problemas nas suas funções do Lambda.

Para obter mais informações, consulte Uso do Lambda Insights.

Nota: o uso do Lambda Insights incorre em cobranças na sua conta da AWS. Você é cobrado pelo tempo de invocação consumido pela extensão do Lambda em incrementos de 1 ms.

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

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

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

Nota: se você optar por configurar os VPC Flow Logs, lembre-se do seguinte:

Use ligações seguras HTTP para registrar o log detalhado de solicitações de rede que são geradas pelo código da função durante uma invocação

Para obter mais informações, consulte Registro de log de ligações seguras HTTP.

Práticas recomendadas para evitar atingir o tempo-limite da função do Lambda

Certificar-se de que sua função do Lambda seja idempotente

As chamadas de API podem demorar mais do que o esperado quando ocorrem problemas de conexão de rede. Problemas de rede também podem causar novas tentativas e solicitações de API duplicadas. Para se preparar para essas ocorrências, verifique se a função do Lambda é idempotente.

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

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

Quando você inicializa uma função do Lambda, ele 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 fazer o seguinte fora do manipulador de função no código de inicialização:

  • Importar bibliotecas e dependências
  • Ajustar a configuração
  • 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, em seguida, reutilizados para todas as invocações futuras no ambiente do tempo de execução.

Para obter mais informações, consulte Otimização da inicialização estática. Há também a indisponibilidade de downstream no Guia do operador do Lambda e o código da função no Guia do desenvolvedor do Lambda.

Nota: o Lambda remove conexões ociosas para recursos downstream. Para permitir que sua função mantenha uma conexão persistente, use a variável tcp_keepalive associada ao tempo de execução do Lambda que você está usando.

Verifique se as configurações de contagem e tempo-limite de repetição no AWS SDK que você está usando permitem tempo suficiente para que sua função seja inicializada.

Se você fizer uma chamada de API usando um AWS SDK e a chamada falhar, o AWS SDK repetirá a chamada automaticamente. A quantidade de vezes que o AWS SDK tenta novamente e por quanto tempo são determinados pelas configurações, que variam para cada AWS SDK. Sua função pode precisar de mais tempo para inicializar do que as configurações padrão do AWS SDK permitem.

Para obter 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 do tempo de execução para que eles 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 Configuração da simultaneidade provisionada.

Para obter mais informações, consulte Gerenciamento de simultaneidade para uma função do Lambda.

Nota: a configuração da simultaneidade provisionada incorre em cobranças na 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 a função do Lambda tem recursos de sistema suficientes

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

Para obter mais informações, consulte Memória e capacidade de computação no Guia do operador do Lambda.

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

Para obter mais informações, consulte Noções básicas 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 tempos-limite diferentes.

Por exemplo, o Amazon API Gateway aguarda no máximo 29 segundos pela conclusão de uma invocação de proxy de função do Lambda. Para obter mais informações, consulte Como faço para resolver os erros que recebo ao integrar o API Gateway a uma função Lambda? Há também Uso do AWS Lambda com outros serviços.

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

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


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?