Desenvolvimento de funções Lambda

Domine variaveis de ambiente Lambda, layers, modelos de concorrencia, acesso VPC e tratamento de erros.

Lambda e o servico mais avaliado no exame DVA-C02. Para quem e novo no Lambda, vamos comecar com o basico. Lambda e um servico que permite executar codigo sem gerenciar servidores por conta propria. Pense nele como uma "maquina de vendas de codigo" — assim como voce coloca uma moeda (um evento ocorre) e obtem a bebida que quer (o codigo e executado), voce simplesmente escreve sua funcao sem se preocupar com servidores. Este artigo explica, de forma acessivel para iniciantes, o que voce precisa saber ao realmente desenvolver e configurar o Lambda.

 

Configuracao principal do Lambda

Variaveis de ambiente — Separando o codigo da configuracao

E muito perigoso escrever diretamente no codigo informacoes sensiveis como senhas de banco de dados ou chaves de API. As variaveis de ambiente sao uma forma de injetar esses valores de configuracao de fora do codigo. Pense nisso como manter separados o cardapio e a receita de um restaurante — o codigo (a receita) permanece o mesmo, mas voce pode alterar os valores de configuracao (informacoes do fornecedor) de forma independente. Usando o KMS (Key Management Service), voce pode criptografar as variaveis de ambiente para um armazenamento ainda mais seguro.

Lambda Layers — Compartilhando bibliotecas comuns

Imagine que varias funcoes Lambda usam a mesma biblioteca (por exemplo, uma biblioteca de processamento de imagens ou utilitarios comuns). Incluir a mesma biblioteca em cada funcao cria duplicacao e dificulta o gerenciamento. O Lambda Layers empacota bibliotecas de uso comum como uma camada separada que varias funcoes podem compartilhar. E como uma sala de suprimentos compartilhada de uma empresa — as equipes nao precisam comprar seus proprios suprimentos; todos usam recursos compartilhados.

Memoria e Timeout

Ao executar uma funcao Lambda, voce define dois limites.

A memoria pode ser configurada de 128MB a 10.240MB (cerca de 10GB). Um ponto importante: aumentar a memoria aumenta proporcionalmente o desempenho da CPU tambem. Se uma funcao estiver lenta, uma abordagem e aumentar a alocacao de memoria.

O timeout e o tempo maximo que uma funcao pode ser executada, ate 15 minutos. Tarefas que demoram mais de 15 minutos nao podem ser tratadas somente pelo Lambda, entao voce precisara usar o Step Functions ou outro servico.

 

Modelos de concorrencia — Como multiplas solicitacoes sao tratadas simultaneamente

Quando chegam solicitacoes, o Lambda cria automaticamente novos ambientes de execucao para trata-las em paralelo. Isso e concorrencia.

Concorrencia reservada

Esta e uma forma de pre-alocar um numero fixo de execucoes simultaneas para uma funcao especifica. Por exemplo, se voce definir Concorrencia reservada como 100 para uma funcao de pagamento, essa funcao sempre tera 100 ambientes de execucao garantidos mesmo quando outras funcoes estao muito ocupadas. Definir como 0 desativa a funcao completamente, o que e util para parar uma funcao especifica durante a manutencao.

Concorrencia provisionada

Para entender isso, primeiro voce precisa conhecer os cold starts. O Lambda nao mantem ambientes de execucao prontos quando nao ha solicitacoes. Quando uma solicitacao chega repentinamente, ele precisa criar um novo ambiente, e esse tempo de preparacao (o cold start) torna a resposta inicial mais lenta. A Concorrencia provisionada pre-aquece os ambientes de execucao para que os cold starts sejam eliminados. Custa mais, mas e apropriada para servicos onde a latencia importa (por exemplo, transacoes financeiras em tempo real ou jogos).

!Reserved vs Provisioned Concurrency

Cold Start vs Warm Start

Um cold start e o processo de preparacao pelo qual o Lambda passa quando e executado pela primeira vez. Ele cria um novo ambiente de execucao, baixa o pacote de codigo, inicializa o runtime (Python, Java, etc.) e somente entao executa o codigo real (o handler). E como o tempo de inicializacao quando voce liga um PC pela primeira vez.

Um warm start ocorre quando um ambiente de execucao ja preparado e reutilizado. Apenas o handler e executado, por isso e muito rapido. E como iniciar um programa imediatamente em um PC que ja esta ligado.

Ha tres maneiras de reduzir os cold starts. Primeiro, use Concorrencia provisionada. Segundo, coloque o codigo de conexao ao banco de dados e de inicializacao fora da funcao handler — isso permite que a conexao seja reutilizada em warm starts. Terceiro, mantenha o pacote de implantacao pequeno. Quanto menos codigo houver para baixar, mais rapido a funcao inicia.

 

Executando Lambda em uma VPC

Uma VPC (Virtual Private Cloud) e uma rede privada virtual que voce cria dentro da AWS. Se o Lambda precisar acessar um banco de dados (como o RDS) em uma sub-rede privada que nao e diretamente acessivel de fora, voce precisa conectar o Lambda a VPC.

Um Lambda conectado a uma VPC cria uma ENI (Elastic Network Interface), uma placa de rede virtual, na sub-rede da VPC. Isso permite que ele acesse os recursos dentro da mesma VPC.

Uma nota importante: um Lambda conectado a uma VPC nao pode acessar a internet por padrao. Se o acesso a internet for necessario, voce precisara rotear atraves de uma sub-rede publica que tenha um NAT Gateway, ou usar um VPC Endpoint.

 

Tratamento de erros — O que acontece quando as coisas falham

DLQ (Dead Letter Queue)

Quando uma funcao Lambda que foi invocada de forma assincrona falha, voce pode enviar esse evento de falha para uma fila SQS ou um topico SNS. Isso permite que voce analise ou reprocesse o evento de falha posteriormente.

Lambda Destinations

Esta e uma abordagem mais poderosa do que a DLQ. Voce pode especificar destinos separados (SQS, SNS, Lambda, EventBridge) para quando a funcao tem sucesso e quando falha. Por exemplo, voce pode configura-la para que em caso de sucesso o proximo Lambda seja invocado, e em caso de falha um alerta seja enviado ao SNS, dando a voce controle flexivel e granular.

 

Pontos-chave para o exame

"Compartilhar bibliotecas comuns entre multiplas funcoes" -- Lambda Layers

"Eliminar cold starts" -- Concorrencia provisionada

"Fixar execucoes simultaneas para uma funcao especifica" -- Concorrencia reservada

"Desativar uma funcao" -- Definir Concorrencia reservada como 0

"Acessar RDS na VPC" -- Conectar Lambda a VPC (precisa de ENI)

"Lambda na VPC precisa de acesso a internet" -- NAT Gateway necessario

"Tratar falhas de invocacao assincrona" -- DLQ ou Lambda Destinations

"Destinos diferentes para sucesso vs falha" -- Lambda Destinations

Colocar o codigo de inicializacao fora do handler para reutilizar conexoes melhora o desempenho

Voltar à lista do blog