Como posso solucionar problemas de inicialização a frio da função do Lambda?
Minha função do AWS Lambda está passando por uma duração de inicialização a frio de alta latência.
Resolução
A configuração inicial de uma solicitação de função do Lambda para o ambiente e o código é chamada de horário de início a frio ou latência de inicialização. Para minimizar o tempo de inicialização a frio e a latência de sua função Lambda, siga estas instruções para seu caso de uso.
Práticas recomendadas de configuração e código de função do Lambda
- Aumente a memória alocada para a função Lambda. O intervalo de inicialização a frio depende do tamanho da sua função, da quantidade de memória que você alocou e da complexidade do seu código. Adicionar mais memória aumenta proporcionalmente a quantidade de CPU, aumentando a potência computacional geral disponível. Para obter mais informações, acesse Memória e potência computacional.
- Minimize o tamanho do seu pacote de implantação. Quanto menor for o pacote de implantação, mais rápido sua função será inicializada. Minimize o número de dependências e bibliotecas externas que sua função importa e mantenha o tamanho do pacote de implantação abaixo de 50 MB. Para obter mais informações, acesse Pacotes de implantação do Lambda.
- Otimize seu código de função do Lambda para minimizar o tempo necessário para inicializar. Reduza o número de dependências e bibliotecas externas que sua função importa. Reduza a quantidade de código executado durante a inicialização.
- Evite computação complexa na inicialização. Se sua função exigir computação complexa na inicialização, como carregar grandes conjuntos de dados, você poderá executar isso em segundo plano. Execute a computação em um thread em segundo plano durante a fase de inicialização. Em seguida, armazene em cache os resultados para invocações subsequentes. Armazenar os resultados em cache ajuda a reduzir o tempo necessário para cálculos complexos na inicialização.
- Reutilize conexões de banco de dados do Amazon Relational Database Service (Amazon RDS). Se sua função se conectar a um banco de dados Amazon RDS, você poderá criar um proxy de banco de dados Amazon RDS Proxy para sua função. Um proxy de banco de dados gerencia um pool de conexões de banco de dados. A reutilização de conexões de banco de dados do Amazon RDS reduz o tempo de estabelecimento de uma conexão a cada vez que sua função é invocada.
- Configure a simultaneidade provisionada. Funções que usam simultaneidade provisionada não mostram comportamento de inicialização a frio porque o ambiente de execução é preparado antes da invocação. Você pode especificar o número de instâncias de função para manter o aquecimento e gerenciar o tráfego.
- Minimize a complexidade de suas dependências. Use estruturas simples que carregam rapidamente na inicialização do ](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html)ambiente de execução[.
- Para reduzir o tempo necessário para o Lambda descompactar pacotes de implantação criados em Java, coloque seus arquivos .jar de dependência em um diretório /lib separado. Separar os arquivos .jar é mais rápido que colocar todo o código da sua função em um único lugar com um grande número de arquivos .class. Para obter mais informações, acesse Implantar funções Java Lambda com arquivos .zip ou JAR.
- Use o monitoramento para descobrir problemas e a observabilidade para descobrir o porquê. Monitore o desempenho da inicialização a frio de suas funções e use o Lambda Insights no Amazon CloudWatch para solucionar problemas de desempenho.
Para obter mais informações, acesse Práticas recomendadas para trabalhar com funções do Lambda.
Longa duração do INIT na simultaneidade provisionada
Nas funções do Lambda sob demanda, o inicializador estático é executado após o recebimento de uma solicitação, mas antes que o manipulador seja invocado. Isso resulta em latência para o solicitante e contribui para a duração geral da inicialização a frio.
- Determine se a simultaneidade de sua função excede o nível configurado de simultaneidade provisionada. Você pode verificar o número de vezes que sua função é invocada usando a métrica CloudWatch ProvisionedConcurrencysPillOverInvocations. Um valor diferente de zero indica que toda a simultaneidade provisionada está em uso e que alguma invocação ocorreu com uma inicialização a frio.
- Verifique sua frequência de invocação (solicitações por segundo). As funções com simultaneidade provisionada têm uma taxa máxima de 10 solicitações por segundo por simultaneidade provisionada (solicitações da API Lambda). Por exemplo, uma função configurada com 100 simultaneidades provisionadas pode lidar com 1000 solicitações por segundo. Se a taxa de invocação exceder 1000 solicitações por segundo, poderão ocorrer algumas inicializações a frio. Para obter mais informações, acesse Lambda: inicializações a frio com simultaneidade provisionada.
Para obter mais informações, acesse Como solucionar problemas de simultaneidade provisionada pela função do Lambda?
Solicitações do Amazon API Gateway integradas ao Lambda
Se você estiver usando o Lambda com o API Gateway e observar uma métrica IntegrationLatency alta,analise os logs do CloudWatch da sua função do Lambda. A alta latência deve ser solucionada quando um endpoint de API integrado a uma função do Lambda demora muito para enviar respostas a um cliente. As inicializações a frio nas funções do Lambda não são registradas na métrica de duração da função; portanto, a latência de integração da sua API pode ser maior que a duração da função. Para ver a duração de sua função com uma inicialização a frio, use AWS X-Ray.
Para obter mais informações, acesse Como solucionar problemas de alta latência em minhas solicitações do API Gateway que são integradas ao Lambda?
Informações relacionadas
Como melhorar o desempenho da inicialização com o Lambda SnapStart for Java 11 Runtime
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 3 anos