Introdução às funções Serverless em TypeScript
A computação Serverless (sem servidor) muda radicalmente a abordagem de desenvolvimento e implantação de aplicações. Em vez de gerenciar servidores, os desenvolvedores se concentram exclusivamente na escrita de código. AWS Lambda é o serviço líder para criar funções serverless, e TypeScript adiciona a confiabilidade da tipagem estática.
Neste artigo, vamos detalhar como criar, configurar e implantar uma função serverless em TypeScript usando AWS Lambda. Você aprenderá a escrever código eficiente, processar eventos e integrar o Lambda com outros serviços AWS.
O que é AWS Lambda e por que TypeScript?
Fundamentos do AWS Lambda
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 efetivamente utilizado (arredondado para 1 ms).
Principais características:
- Arquitetura orientada a eventos — a função é executada quando um evento ocorre (requisição HTTP, upload de arquivo no S3, alteração no DynamoDB)
- Escalonamento automático — de uma requisição a milhares simultaneamente
- Suporte a múltiplas linguagens — Node.js (TypeScript), Python, Java, Go, .NET
- Limite gratuito — 1 milhão de requisições por mês (dentro do Free Tier)
Vantagens do TypeScript para Lambda
TypeScript é uma extensão do JavaScript que adiciona tipagem estática. Para funções serverless, isso oferece:
- Menos erros em tempo de execução — o compilador detecta incompatibilidades de tipos antes da implantação
- Melhor documentação do código — os tipos servem como autodocumentação
- Suporte a recursos modernos — async/await, decoradores, genéricos
- Integração com AWS SDK — tipos completos para todos os serviços AWS
Criação e configuração de uma função Lambda em TypeScript
Passo 1: Inicialização do projeto
Vamos criar um novo projeto e instalar as dependências necessárias:
mkdir my-lambda-functioncd my-lambda-functionnpm init -ynpm install --save-dev typescript @types/node aws-sdknpm install --save-dev @types/aws-lambdaPasso 2: Configuração do TypeScript
Crie o arquivo tsconfig.json:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "lib": ["ES2020"], "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "declaration": true }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"]}Passo 3: Escrita da função Lambda
Crie o diretório src e o arquivo src/handler.ts:
import { Context, APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
interface UserData { userId: string; name: string; email: string;}
export const handler = async ( event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult> => { console.log('Event:', JSON.stringify(event, null, 2)); console.log('Context:', context);
try { // Parsing do corpo da requisição const body: UserData = JSON.parse(event.body || '{}');
// Validação dos dados if (!body.userId || !body.name || !body.email) { return { statusCode: 400, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify({ message: 'Missing required fields: userId, name, email' }) }; }