Ao planejar uma arquitetura sem servidor na AWS, ou pelo menos uma porção dela, o serviço AWS Lambda se torna um componente essencial.
Trata-se de uma função de computação sem servidor, usualmente desenvolvida em linguagens como Node.JS ou Python, que você pode construir e executar sem a necessidade de configurar servidores ou clusters de back-end. É possível interligar diversas funções AWS Lambda para criar fluxos de trabalho mais complexos.
Contudo, um aspecto crucial da função Lambda é a restrição quanto à duração do tempo de execução. Esta característica delimita o cenário ideal para a utilização do AWS Lambda.
Fonte: aws.amazon.com
Qual o Significado do Intervalo de Tempo Limite?
O recurso de tempo limite no AWS Lambda define o período máximo que uma função pode operar antes de ser automaticamente interrompida.
Funções Lambda são projetadas para serem breves e sem estado, e essa é a forma apropriada de utilizá-las. Não é incomum que equipes tentem empregar funções Lambda para processos de longa duração, buscando tirar proveito da natureza sem servidor do AWS Lambda. A vantagem de executar código sem a necessidade de provisionar um servidor com configurações específicas de CPU e memória é notável, justificando essa abordagem.
No entanto, se uma função se prolonga excessivamente, pode gerar problemas no uso e desempenho dos recursos. Existe o risco de sobrecarregar os recursos e, devido ao benefício de um processo de longa duração, a preocupação com a otimização das etapas tende a ser negligenciada. Um tempo de espera de cinco minutos pode parecer aceitável, mesmo que desnecessário para o processo em si.
Por padrão, o tempo limite de uma função Lambda é definido em apenas 3 segundos. Isso significa que qualquer código executado dentro da função Lambda deve ser concluído nesse intervalo. Isso é ideal para arquiteturas que exigem comunicação e respostas rápidas, com um grande volume de transações em curto espaço de tempo. Entretanto, isso limitaria consideravelmente os cenários de uso da função Lambda, sendo possível aumentar o limite até um máximo de 900 segundos (15 minutos). Quando esse tempo limite é atingido, o Lambda encerra a função e retorna um código de erro.
Como Ajustar o Tempo Limite?
Fonte: aws.amazon.com
O tempo limite de uma função Lambda pode ser ajustado através do AWS Management Console, da AWS CLI ou dos AWS SDKs.
A seguir, o passo a passo:
- Abra o AWS Management Console e acesse o serviço Lambda.
- Selecione a função Lambda que você deseja modificar.
- Na aba “Configuração”, procure pela seção “Configuração Geral” e identifique a opção “Tempo limite”.
- Clique no botão “Editar” ao lado.
- Insira o novo valor de tempo limite em segundos (entre 1 e 900) e confirme clicando em “Salvar”.
- Para finalizar, clique em “Salvar” na parte superior da página para aplicar as alterações na função Lambda.
Você também pode utilizar a linha de comando da AWS CLI para modificar o tempo limite de uma função Lambda. Veja um exemplo:
aws lambda update-function-configuration --function-name [Nome_Da_Sua_Função_Lambda] --timeout 900
Este comando configura o tempo limite para [Nome_Da_Sua_Função_Lambda] em 15 minutos. Substitua pelo nome da sua função e o tempo limite desejado em segundos.
Considerações Importantes
A configuração de tempo limite se aplica à função como um todo e não apenas a partes específicas do código. Portanto, caso a função execute operações demoradas, como processar arquivos grandes ou realizar requisições de rede, é crucial garantir que o tempo limite seja suficiente para a conclusão da operação, mesmo no pior cenário possível.
É importante ter em mente que funções Lambda são projetadas para ações rápidas e sem estado, destinadas a tarefas pequenas e isoladas. Se sua função Lambda leva muito tempo para ser concluída, considere dividi-la em várias funções menores. Estas funções podem ser chamadas sequencialmente através de um gatilho, por exemplo, se a saída de uma função Lambda for armazenada em um bucket S3.
Além disso, para processos de longa duração que ultrapassam o limite de 15 minutos, o AWS Step Functions é uma alternativa para orquestrar uma série de funções Lambda ou outros serviços da AWS.
Boas Práticas
O intervalo de tempo limite pode não parecer suficiente para algumas tarefas mais complexas. É comum que desenvolvedores configurem diretamente o tempo limite para 15 minutos em todas as funções Lambda, sem grandes consequências, mesmo que a função termine mais cedo.
No entanto, algumas práticas recomendadas merecem atenção.
#1. Defina o Valor Adequado
O tempo limite deve ser definido com base no tempo de execução esperado da função. Isso significa que o valor não deve ser muito curto nem excessivamente longo.
Por exemplo, você pode optar por que o tempo total de execução de uma função Lambda não ultrapasse três minutos, por razões arquitetônicas ou de performance da sua aplicação.
De forma similar, você pode querer garantir que a função Lambda não seja encerrada antes de, digamos, três minutos. Isso pode ser importante para a execução de tentativas dentro do código Lambda, caso alguns recursos necessários para a conclusão do código estejam ocupados ou bloqueados.
Portanto, antes de definir o tempo limite em 15 minutos, reflita sobre qual seria o valor ideal de execução. Ajustar os valores de tempo limite é mais uma ferramenta para definir limites para toda a equipe de desenvolvimento.
#2. Monitoramento Contínuo
Após definir os tempos limites, monitore o tempo de execução das suas funções Lambda. Isso fornecerá informações cruciais para confirmar se as decisões iniciais foram acertadas ou se são necessários ajustes.
Utilize métricas e logs do CloudWatch para acompanhar o tempo de execução das funções. Identifique aquelas que demoram mais do que o previsto e aquelas que terminam muito antes do esperado.
#3. Invocação Assíncrona
Caso sua função Lambda seja acionada por um evento que não exige resposta imediata, como o upload de arquivos ou uma mensagem de fila, utilize a invocação assíncrona para diminuir o risco de tempos limite. A função será executada em segundo plano sem aguardar resposta, o que pode reduzir o número de timeouts. Isso ocorre porque o tempo de espera por recursos não é incluído no tempo geral de execução da função.
#4. Step Functions para Processos Complexos
Para processos que ultrapassam o limite de 15 minutos, utilize o AWS Step Functions para orquestrar uma sequência de funções Lambda ou outros serviços da AWS. O Step Functions divide o processo em tarefas menores e mais gerenciáveis que podem ser executadas dentro do limite de tempo.
Você pode, inclusive, executar várias funções Lambda em paralelo dentro de uma step function. Em seguida, a step function pode aguardar a conclusão de todas elas antes de prosseguir. Essa é uma forma de escalonamento horizontal, onde várias funções lambda trabalham em conjunto para resolver um problema.
Ao final, é necessário apenas coletar os resultados parciais e construir a solução final. Uma função lambda autônoma pode ser suficiente para isso.
#5. Otimização do Código
Otimize o código da função Lambda para reduzir o tempo de execução e melhorar o desempenho. Essa prática é útil quando o tempo limite se torna insuficiente apenas ocasionalmente, podendo ser uma solução para evitar falhas.
Como o Tempo Limite Afeta o Faturamento?
Fonte: aws.amazon.com
A configuração de tempo limite de uma função AWS Lambda não afeta diretamente o faturamento. O AWS Lambda cobra com base no número de requisições e na duração da execução da função.
Aumentar o tempo limite de uma função Lambda pode resultar em tempos de execução maiores, mas apenas se a função realmente necessitar desse tempo adicional. Se isso for combinado com uma maior frequência de execução da função, é esperado um aumento nos custos.
No entanto, se a função não for frequentemente invocada ou se completar o processo antes do tempo limite, o impacto no faturamento pode ser mínimo.
Por isso, definir todas as funções Lambda com um tempo limite de 15 minutos por padrão pode não ser o principal motivo para o aumento do custo total de processamento.
Entretanto, leva a um aumento indireto nos custos. Desenvolvedores podem sentir que têm uma margem de manobra maior e acabar não otimizando o código tanto quanto o fariam se o tempo limite fosse mais restritivo, mas ainda realista.
O AWS Lambda oferece um nível gratuito que inclui 1 milhão de requisições e 400.000 GB-segundos de tempo de computação por mês. Se o uso da função Lambda estiver dentro desses limites, não haverá custos pelo tempo de execução, independente da configuração de tempo limite.
Considerações Finais
A função AWS Lambda é uma ferramenta poderosa, especialmente para processamento sem servidor na nuvem AWS. É importante estar ciente de seus propósitos e limitações. Evite utilizá-la em situações para as quais ela não foi projetada.
Ela é ideal para ações simples, assíncronas e com gatilhos que não demandam mais de 15 minutos de execução. Para processos mais complexos, use AWS Step Functions para combinar várias funções Lambda em um único processo orquestrado. Ou, então, opte por servidores com configurações e capacidade de computação adequadas para sua tarefa.
Para saber mais, confira a introdução ao AWS Lambda para iniciantes.