Se você deseja construir uma arquitetura sem servidor na AWS, ou pelo menos parte dela, o serviço AWS Lambda será a parte mais importante disso.
É uma função de computação sem servidor (normalmente escrita em linguagem de programação Node.JS ou Python) que você pode desenvolver e executar sem iniciar nenhum cluster ou servidor de back-end. Você pode conectar várias funções do AWS Lambda para formar processos mais complexos.
No entanto, uma propriedade importante da função Lambda é a sua limitação em termos de duração do tempo de processamento. Em última análise, isso define quando é o propósito correto usar a função AWS Lambda.
Fonte: aws.amazon.com
últimas postagens
Qual é o intervalo de tempo limite?
O recurso de tempo limite da função AWS Lambda é uma configuração que define o tempo máximo que uma função pode ser executada antes de ser encerrada.
As funções Lambda são projetadas para serem de curta duração e sem estado, e é assim que devem ser usadas. Não é uma exceção rara ver como as equipes tentam utilizar a função Lambda para processos de longa execução. Eles fazem isso apenas porque desejam aproveitar os benefícios da natureza sem servidor do AWS Lambda. É sempre muito mais barato executar um código sem a necessidade de inicializar um servidor com configuração específica de CPU e memória. Portanto, a intenção é fácil de entender.
No entanto, se uma função for executada por muito tempo, ela poderá causar problemas de utilização e desempenho de recursos. Você corre o risco de bloquear os recursos e, como tem o benefício de um processo de longa execução, provavelmente não se importa realmente com a otimização das etapas dentro dos processos. De repente, um tempo de espera de cinco minutos não é um grande problema. Você pode deixá-lo presente mesmo que, para o processo em si, possa ser inútil.
Por padrão, o tempo limite de uma função Lambda é definido como apenas 3 segundos. Nesse caso, você precisaria contar com o fato de que qualquer código executado dentro de uma função Lambda deve terminar em três segundos. Isso é ótimo se você deseja construir uma arquitetura com comunicações e tempos de resposta realmente rápidos, potencialmente com milhões de transações em um tempo muito curto. Mas isso limitaria significativamente os casos de uso utilizáveis da função Lambda, então você pode aumentar esse limite até um máximo de 900 segundos (15 minutos). Quando esse tempo limite for atingido, o Lambda encerrará a função e retornará um código de erro.
Como configurar o recurso de tempo limite?
Fonte: aws.amazon.com
Você pode definir o tempo limite para uma função do Lambda usando o AWS Management Console, a AWS CLI ou os AWS SDKs.
Aqui estão as etapas concretas para conseguir isso:
Você também pode usar a linha de comando da AWS CLI para atualizar o tempo limite de uma função do Lambda. Aqui está um exemplo de comando:
<code>aws lambda update-function-configuration --function-name [My_Lambda_Function_Name] --timeout 900
Este comando define o tempo limite para o [My_Lambda_Function_Name] a 15 minutos. Basta colocar aí o nome real da função e o valor de tempo limite desejado em segundos.
Algumas considerações
A configuração de tempo limite se aplica a toda a função, não apenas a blocos de código individuais ou operações dentro da função. Portanto, se a sua função estiver executando uma operação de longa duração, como processar um arquivo grande ou fazer uma solicitação de rede, você precisará garantir que o tempo limite ainda seja suficiente para a operação ser concluída, mesmo no pior cenário. .
É importante notar que as funções Lambda são projetadas para serem de curta duração e sem estado. Eles se destinam a realizar tarefas pequenas e discretas. Se você achar que sua função Lambda está demorando muito para ser concluída, pode ser bom considerar dividi-la em várias funções menores. Você pode então chamá-los um por um por um gatilho. Por exemplo, se a saída da função Lambda anterior estiver armazenada em um bucket S3 específico.
Além disso, se você precisar executar um processo de longa duração que exceda o limite de 15 minutos, considere usar o AWS Step Functions para orquestrar uma série de funções Lambda ou outros serviços da AWS para alcançar o resultado desejado.
Melhores Práticas
O intervalo de trabalho do tempo limite em si não parece ser grande o suficiente para algumas palestras extensas. Na maioria das vezes, os desenvolvedores acabam configurando diretamente para 15 minutos para todas as funções do Lambda. Mesmo que a função acabe muito mais cedo, não há nenhum efeito colateral negativo nisso.
No entanto, ainda existem algumas práticas recomendadas a serem observadas.
#1. Defina o valor apropriado
Você deve definir o valor do tempo limite com base no tempo de execução esperado da função. Basicamente, isso significa definir um valor que não seja muito curto, mas também não desnecessariamente longo.
Talvez você queira garantir que o tempo total de uma única função do Lambda não seja superior a três minutos, por exemplo, apenas por motivos arquitetônicos ou de desempenho geral do seu aplicativo.
Da mesma forma, você pode querer ter certeza de que a função Lambda não será encerrada antes de, digamos, três minutos. Um dos motivos pode ser que você queira preencher um certo número de novas tentativas dentro do código Lambda. Por exemplo, caso alguns dos recursos necessários para completar o código estejam ocupados ou bloqueados.
Portanto, antes de prosseguir e configurar o tempo limite para 15 minutos, pense um pouco sobre qual poderia ser o valor ideal do tempo de execução. Definir valores mais precisos é apenas mais uma ferramenta para definir limites para toda a equipe de desenvolvimento.
#2. Monitoramento ao longo do tempo
Depois de definir os limites de tempo limite, faça um esforço para monitorar o tempo de execução de suas funções Lambda. Isso lhe dará informações importantes sobre se a decisão original estava correta ou se precisa de alguns ajustes.
Você pode usar métricas e logs do CloudWatch para rastrear o tempo de execução das funções. Em seguida, identifique aqueles que estão demorando mais do que o esperado, bem como aqueles que são muito mais rápidos para serem concluídos do que o esperado.
#3. Invocação Assíncrona
Se a sua função Lambda for acionada por um evento que não exija uma resposta imediata, por exemplo, um upload de arquivo ou uma mensagem de uma fila, use a invocação assíncrona para reduzir o risco de tempos limite. Isso fará com que a função seja executada em segundo plano sem esperar por uma resposta. É claro que isso pode levar a uma quantidade reduzida de tempos limite. Isso ocorre simplesmente porque você não precisa incluir no tempo geral de execução do Lambda o tempo de espera que a função necessita para aquele recurso.
#4. Use Step Functions para processos complexos
Se precisar executar um processo de longa duração que exceda o limite de 15 minutos, você poderá usar o AWS Step Functions para orquestrar uma série de funções do Lambda ou outros serviços da AWS para alcançar esse resultado. Step Function dividirá o processo em tarefas menores e mais gerenciáveis que você pode executar dentro do limite de tempo limite.
Você pode até executar várias funções lambda em paralelo dentro de uma função step. Em seguida, deixe a função step aguardar todas as funções lambda paralelas antes de prosseguir. Esta é uma forma de escalonamento horizontal onde várias funções lambda podem dividir um problema e resolvê-lo parcialmente juntas.
No final, você só precisa coletar os resultados parciais e construir a resolução final, para a qual seguir a função lambda autônoma pode ser suficiente.
#5. Otimize o código
Você pode otimizar o código da função Lambda para reduzir o tempo de execução e melhorar o desempenho. Isto é útil se o intervalo de tempo limite não for suficiente apenas ocasionalmente. Nesse caso, pode valer a pena procurar otimização de código para remover tais casos de falha.
Como o tempo limite afeta o faturamento?
Fonte: aws.amazon.com
A configuração de tempo limite para uma função do AWS Lambda não afeta diretamente o faturamento da função. O AWS Lambda fatura com base no número de solicitações e na duração do tempo de execução da função.
Se você aumentar a configuração de tempo limite para uma função do Lambda, isso poderá resultar em tempos de execução mais longos. Mas somente se a função realmente precisar desse tempo adicional. Se você combinar isso com uma frequência mais alta de uma função que leva mais tempo para ser executada, então sim, você poderá esperar custos mais altos.
No entanto, se a função não for invocada frequentemente ou se concluir o processo antes de o valor do tempo limite ser atingido, o impacto na faturação poderá ser mínimo.
É por isso que configurar 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 no custo do seu processamento geral.
No entanto, conduz certamente a um aumento indirecto dos custos globais. Os desenvolvedores sentirão que têm alguma reserva para usar e podem não otimizar o código na medida que provavelmente o fariam se os tempos limite fossem mais restritivos, mas ainda assim realistas.
Outra coisa é que o AWS Lambda oferece um nível gratuito que inclui 1 milhão de solicitações gratuitas e 400.000 GB-segundos de tempo de computação por mês. Se o uso da função Lambda estiver dentro dos limites do nível gratuito, você não pagará pelo tempo de execução da função, independentemente da configuração de tempo limite.
Palavras Finais
A função AWS Lambda é uma ferramenta poderosa, especialmente para processamento sem servidor na nuvem AWS. Tem seu propósito e limites dos quais devemos estar atentos. Não vamos tentar usá-lo em casos para os quais não foi projetado.
É perfeito para ações simples, assíncronas e idealmente acionadas que não exigem tempo de execução superior a 15 minutos. Se precisar de algo mais complexo, use AWS Step Functions para combinar várias funções Lambda em um único processo orquestrado. Ou desista do processamento sem servidor mais barato e use servidores com configuração e capacidade de computação adequadas para realizar sua tarefa.
A seguir, confira a introdução ao AWS Lambda para iniciantes.