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

9 minuto de leitura
0

Minha função do AWS Lambda excede o tempo limite intermitentemente, mesmo eu não tendo implantado alterações de código. Como solucionar e prevenir problemas de tempo limite de invocação de função do Lambda?

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 determinar se a 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:

Revise seus 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 mais informações, consulte Acessar os Amazon CloudWatch Logs para AWS Lambda.

Se sua função está retornando um rastreamento de pilha, a respectiva mensagem de erro especifica o que causa o erro.

Importante: o Lambda gera três linhas de log automaticamente para cada invocação (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 a causa da expiração do tempo limite, 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, microsserviços, bancos de dados ou APIs da web HTTP downstream, 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

Os 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:

  • Cobranças por ingestão e arquivamento de dados de logs vendidos incorrem quando você publica logs de fluxo em um destes:
  • CloudWatch Logs
  • Amazon Simple Storage Service (Amazon S3)

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 em log de ligações seguras HTTP.

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

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

As chamadas de API podem demorar mais tempo 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, 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, é prática recomendada fazer o seguinte 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 para outros serviços e recursos downstream

Essa inicialização estática permite que esses recursos sejam inicializados uma vez por área restrita para testes e, em seguida, reutilizados para todas as invocações futuras no mesmo ambiente de tempo de execução.

Para obter mais informações, consulte Otimização da inicialização estática. Há também a Indisponibilidade 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 tentará a chamada automaticamente outra vez. 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 solucionar problemas de novas tentativas 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.

Observação: 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 resolver os erros que recebo ao integrar o API Gateway a uma função do Lambda? Consulte também Uso do AWS Lambda com outros serviços.

Confirme 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 solucionar problemas de tempo limite de uma função do Lambda que está em uma Amazon VPC?


AWS OFICIAL
AWS OFICIALAtualizada há um ano