Introdução à Arquitetura Serverless e AWS Lambda
O desenvolvimento web moderno está se movendo rapidamente em direção à computação serverless. Esse paradigma permite que os desenvolvedores se concentrem em escrever a lógica de negócios, sem se preocupar com o gerenciamento da infraestrutura. AWS Lambda é um dos serviços mais populares para implementar funções serverless e se integra perfeitamente com JavaScript (Node.js).
Neste artigo, vamos detalhar o que é AWS Lambda, como criar e executar sua primeira função serverless em JavaScript, abordar as melhores práticas e exemplos de código real. O material será útil tanto para iniciantes quanto para desenvolvedores experientes que desejam dominar o desenvolvimento serverless.
O que é AWS Lambda e como funciona com Node.js
AWS Lambda é um serviço de computação que executa seu código em resposta a eventos e gerencia automaticamente os recursos computacionais. Você paga apenas pelo tempo de execução consumido (arredondado para 1 ms) e pelo número de requisições.
Principais características do AWS Lambda para desenvolvedores JavaScript
- Suporte a Node.js: AWS Lambda suporta oficialmente Node.js 14, 16, 18 e 20.
- Escalonamento automático: Lambda cria automaticamente instâncias da função para processar cada requisição recebida.
- Triggers: As funções podem ser invocadas por HTTP (via API Gateway), por agendamento (CloudWatch Events), ao fazer upload de arquivo no S3 e de muitas outras formas.
- Limitações: Tempo de execução de até 15 minutos, memória de 128 MB a 10.240 MB, tamanho do pacote de até 50 MB (compactado) ou 250 MB (descompactado).
Para trabalhar com Lambda em JavaScript, não é necessária nenhuma configuração adicional — basta escrever o handler e fazer upload do código para a AWS.
Criando sua primeira função serverless em JavaScript
Vamos escrever uma função serverless simples que recebe um JSON com o nome do usuário e retorna uma saudação. Este é um exemplo clássico para começar a se familiarizar com AWS Lambda.
Passo 1: Estrutura básica do handler
Cada função Lambda em Node.js consiste em uma função handler exportada, que recebe três parâmetros: event (evento), context (contexto de execução) e callback (para resposta assíncrona).
// index.jsexports.handler = async (event, context) => { // Lógica da função const name = event.name || 'Convidado'; return { statusCode: 200, body: JSON.stringify({ message: `Olá, ${name}! Esta é sua primeira função serverless.` }) };};Passo 2: Tratamento de diferentes tipos de eventos
Em projetos reais, os eventos podem vir de diferentes fontes. Vejamos um exemplo de processamento de requisição do API Gateway:
// handler.jsexports.handler = async (event) => { try { // Parse do corpo da requisição (se houver) const body = event.body ? JSON.parse(event.body) : {}; const { userId, action } = body;
// Exemplo de lógica de negócios const result = { userId: userId || 'unknown', action: action || 'default', timestamp: new Date().toISOString(), message: 'Ação executada com sucesso' };
return { statusCode: 200, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify(result) }; } catch (error) { return { statusCode: 500, body: JSON.stringify({ error: error.message }) }; }};Trabalhando com serviços externos e ambiente
Funções serverless raramente trabalham isoladamente. Na maioria das vezes, precisam interagir com bancos de dados, S3, Dyna