Serverless em TypeScript: seu backend sem servidores (e sem dor de cabeça)
Olá, colega! Se você já configurou um VPS, lutou com o nginx, monitorou a carga da CPU e reiniciou um PostgreSQL caído às três da manhã — este artigo é para você. O mundo está caminhando para o serverless (computação sem servidor), e o TypeScript é a linguagem ideal para embarcar nesse trem em alta velocidade.
Vamos entender o que são funções serverless, como escrevê-las em TypeScript e quais plataformas (AWS Lambda, Google Cloud Functions, Yandex Cloud Functions) escolher para o seu projeto. Spoiler: terá código, terá exemplos, mas servidores — não.
O que é Serverless? (Spoiler: servidores ainda existem)
O nome "serverless" é um truque de marketing. Os servidores, claro, existem, mas você não sabe nada sobre eles e não quer saber. Você simplesmente escreve uma função (geralmente em TypeScript), a envia para a nuvem, e ela é executada sob demanda. Você paga apenas pelo tempo de execução — nem por um servidor ocioso, nem por escalonamento.
Isso é chamado de FaaS (Function as a Service). Principais vantagens:
- Escalonamento automático — de 0 a 10.000 requisições por segundo em poucos segundos.
- Economia — você paga por milissegundos de execução, não pelo aluguel de uma máquina.
- Menos DevOps — a nuvem atualiza o ambiente de execução e corrige vulnerabilidades.
- TypeScript nativo — todos os grandes provedores suportam Node.js e, portanto, TypeScript.
Mas também há desvantagens: inicialização a frio (primeiros milissegundos de carregamento), limite de tempo de execução (geralmente 15 minutos), dificuldades com depuração.
Escrevendo nossa primeira função Serverless em TypeScript para AWS Lambda
AWS Lambda é o rei do serverless. Vamos começar com ele. Instale aws-sdk e @types/aws-lambda para TypeScript.
npm init -ynpm install typescript @types/node aws-lambda --save-devnpx tsc --initCrie o arquivo handler.ts:
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
export const handler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => { const name = event.queryStringParameters?.name || 'Convidado'; return { statusCode: 200, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: `Olá, ${name}! Esta é uma função serverless em TypeScript.`, timestamp: new Date().toISOString(), }), };};Compile o projeto:
npx tsczip -r function.zip .Carregue o arquivo zip no AWS Lambda através do console, defina o runtime Node.js 20.x e o ponto de entrada como handler.handler.
Pronto! Agora você tem uma API HTTP que não requer servidor. Pode conectá-la ao API Gateway e usá-la.
Google Cloud Functions: alternativa em TypeScript do Google
Se você prefere o ecossistema do Google (Firebase, BigQuery, GCP), então Google Cloud Functions é a sua escolha. A sintaxe é semelhante à da AWS, mas há nuances.
Instale a ferramenta:
npm install -g @google-cloud/functions-frameworkCrie index.ts:
import { Request, Response } from 'express';
export const helloWorld = (req: Request, res: Response) => { const name = req.query.name || 'Mundo'; res.json({ message: `Olá, ${name}! Esta é uma Google Cloud Function em TypeScript.`, timestamp: new Date().toISOString(), });};Para teste local:
npx @google-cloud/functions-framework --target=helloWorldImplantação com um comando:
gcloud functions deploy hello-world \ --runtime nodejs20 \ --trigger-http \ --allow-unauthenticated \ --entry-point hell