Introdução às Funções Serverless em TypeScript com AWS Lambda
\n\nA arquitetura serverless tornou-se o padrão do desenvolvimento moderno em nuvem. O AWS Lambda permite executar código sem gerenciar servidores, e o TypeScript adiciona tipagem estrita e facilidade de desenvolvimento. Neste artigo, abordaremos todo o processo: desde a criação da primeira função até o deploy em produção. Você aprenderá a escrever funções serverless eficientes em TypeScript, trabalhar com triggers e tratar erros.
\n\nAs funções serverless são ideais para microsserviços, processamento de eventos, webhooks e tarefas em segundo plano. O TypeScript torna o código mais seguro e previsível, o que é essencial para soluções em produção.
\n\n1. Configuração do ambiente para AWS Lambda em TypeScript
\n\nAntes de começar, instale as ferramentas necessárias. Você precisará do Node.js (versão 18+), npm e AWS CLI.
\n\n1.1. Instalação de dependências
\n\nnpm init -y\nnpm install -D typescript @types/node @aws-sdk/client-lambda\nnpm install aws-lambda @types/aws-lambda\n\n\n1.2. Configuração do TypeScript
\n\nCrie o arquivo tsconfig.json com as configurações para Lambda:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "lib": ["ES2020"],\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true,\n "forceConsistentCasingInFileNames": true,\n "resolveJsonModule": true,\n "declaration": true,\n "declarationMap": true,\n "sourceMap": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist"]\n}\n\n\n1.3. Instalação do AWS CLI
\n\nBaixe e configure o AWS CLI a partir da fonte oficial. Após a instalação, execute:
\n\naws configure\n\n\nInsira seu Access Key ID, Secret Access Key, região (por exemplo, us-east-1) e formato de saída (json).
2. Criação da primeira função serverless em TypeScript
\n\nA estrutura do projeto deve ser assim:
\n\nmy-lambda-project/\n├── src/\n│ └── handler.ts\n├── dist/\n├── tsconfig.json\n├── package.json\n└── .gitignore\n\n\n2.1. Handler básico do Lambda
\n\nCrie o arquivo src/handler.ts com uma função simples:
import { Context, APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';\n\ninterface HelloResponse {\n message: string;\n timestamp: string;\n eventType: string;\n}\n\nexport const handler = async (\n event: APIGatewayProxyEvent,\n context: Context\n): Promise<APIGatewayProxyResult> => {\n console.log('Event:', JSON.stringify(event, null, 2));\n console.log('Context:', context);\n\n const response: HelloResponse = {\n message: 'Hello from AWS Lambda with TypeScript!',\n timestamp: new Date().toISOString(),\n eventType: event.httpMethod || 'UNKNOWN'\n };\n\n return {\n statusCode: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*'\n },\n body: JSON.stringify(response)\n };\n};\n\n\n2.2. Compilação do TypeScript
\n\nAdicione scripts ao package.json:
"scripts": {\n "build": "tsc",\n "watch": "tsc --watch",\n "clean": "rm -rf dist"\n}\n\n\nExecute a compilação:
\n\nnpm run build\n\n\nVerifique se o arquivo handler.js foi criado na pasta dist.
3. Deploy da função Lambda na AWS
\n\nExistem várias formas de fazer deploy. Vamos considerar a mais simples — via AWS CLI.
\n\n3.1. Empacotamento da função
\n\nCrie um arquivo ZIP com o código:
\n\ncd dist\nzip -r ../function.zip .\ncd ..\n\n\n3.2. Criação da função Lambda
\n\nExecute o comando AWS CLI:
\n\naws lambda create-function \\\n --function-name hello-typescript \\\n --runtime nodejs18.x \\\n --role arn:aws:iam::Y