

# Entender o modelo de programação do Lambda
<a name="foundation-progmodel"></a>

O Lambda oferece dois modelos de programação: as funções padrão, que duram até 15 minutos, e as funções duráveis, que podem ser executadas por até um ano. Embora ambas compartilhem conceitos fundamentais, as funções duráveis adicionam recursos para fluxos de trabalho de longa duração e com estado.

O Lambda oferece um modelo de programação comum a todos os runtimes. O modelo de programação define a interface entre seu código e o sistema Lambda. Você diz ao Lambda o ponto de entrada para sua função definindo um *manipulador* na configuração da função. O runtime transmite ao handler os objetos que contêm o *evento* de invocação e o *contexto*, como o nome da função e o ID da solicitação.

**Para as funções duráveis, o manipulador também recebe um objeto DurableContext que fornece:**
+ Capacidades de ponto de verificação por meio de step()
+ Gerenciamento do estado de espera por meio de wait() e waitForCallback()
+ Persistência de estado automática entre invocações

Quando o handler termina de processar o primeiro evento, o runtime o envia outro. Para as funções duráveis, o manipulador pode pausar a execução entre as etapas, e o Lambda salvará e restaurará automaticamente o estado quando a função for retomada. A classe da função permanece na memória, de forma que é possível reutilizar clientes e variáveis que são declarados fora do método do handler no *código de inicialização*. Para economizar tempo de processamento em eventos subsequentes, crie recursos reutilizáveis como clientes do AWS SDK durante a inicialização. Uma vez inicializada, cada instância da função pode processar milhares de solicitações.

Sua função também tem acesso ao armazenamento local no diretório `/tmp`, um cache transitório que pode ser utilizado para várias invocações. Para obter mais informações, consulte [Ambiente de execução](lambda-runtime-environment.md).

Quando o [rastreamento do AWS X-Ray](services-xray.md) está habilitado, o runtime registra subsegmentos separados para inicialização e execução.

O runtime captura a saída do registro em log da função e a envia para o Amazon CloudWatch Logs. Além de registrar em log a saída da função, o runtime também registra em log as entradas quando a invocação da função é iniciada e termina. Isso inclui um log de relatório com o ID da solicitação, a duração faturada, a duração da inicialização e outros detalhes. Se a função lançar um erro, o runtime retornará esse erro para o chamador.

**nota**  
O registro em log está sujeito a[Cotas CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html). Os dados de log podem ser perdidos devido a limitação ou, em certos casos, quando uma instância da sua função é interrompida.

**Principais diferenças das funções duráveis:**
+ O estado é persistido automaticamente entre as etapas
+ As funções podem pausar a execução sem consumir recursos
+ As etapas são tentadas novamente de forma automática em caso de falha
+ O andamento é monitorado por meio de pontos de verificação

O Lambda dimensiona a função executando instâncias adicionais dela à medida que a demanda aumenta, e interrompendo instâncias à medida que a demanda diminui. Esse modelo leva a variações na arquitetura da aplicação, como:
+ Salvo indicação em contrário, as solicitações de entrada poderiam ser processadas fora de ordem ou simultaneamente.
+ Não dependa de que instâncias da sua função sejam de longa duração. Em vez disso, armazene o estado da sua aplicação em algum outro local.
+ Use o armazenamento local e os objetos do nível de classe para aumentar a performance, mas mantenha no mínimo o tamanho do pacote de implantação e da quantidade de dados transferidos para o ambiente de execução.

Para obter uma introdução prática do modelo de programação na linguagem de programação de sua preferência, consulte os capítulos a seguir.
+ [Criar funções do Lambda com Node.js](lambda-nodejs.md)
+ [Criar funções do Lambda com Python](lambda-python.md)
+ [Construir funções do Lambda com Ruby](lambda-ruby.md)
+ [Construir funções do Lambda com Java](lambda-java.md)
+ [Criar funções do Lambda com Go](lambda-golang.md)
+ [Construir funções do Lambda com C\$1](lambda-csharp.md)
+ [Construir funções do Lambda com o PowerShell](lambda-powershell.md)