Introducción a las funciones Serverless en TypeScript con AWS Lambda
\n\nLa arquitectura Serverless se ha convertido en el estándar del desarrollo moderno en la nube. AWS Lambda permite ejecutar código sin gestionar servidores, y TypeScript añade tipado estricto y facilidad de desarrollo. En este artículo analizaremos todo el proceso: desde la creación de la primera función hasta el despliegue en producción. Aprenderás a escribir funciones serverless eficientes en TypeScript, trabajar con disparadores y manejar errores.
\n\nLas funciones serverless son ideales para microservicios, procesamiento de eventos, webhooks y tareas en segundo plano. TypeScript hace que el código sea más seguro y predecible, lo cual es crítico para soluciones en producción.
\n\n1. Configuración del entorno para AWS Lambda en TypeScript
\n\nAntes de comenzar, instala las herramientas necesarias. Necesitarás Node.js (versión 18+), npm y AWS CLI.
\n\n1.1. Instalación de dependencias
\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. Configuración de TypeScript
\n\nCrea el archivo tsconfig.json con la configuración 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. Instalación de AWS CLI
\n\nDescarga y configura AWS CLI desde la fuente oficial. Después de la instalación, ejecuta:
\n\naws configure\n\n\nIngresa tu Access Key ID, Secret Access Key, región (por ejemplo, us-east-1) y formato de salida (json).
2. Creación de la primera función serverless en TypeScript
\n\nLa estructura del proyecto debe verse así:
\n\nmy-lambda-project/\n├── src/\n│ └── handler.ts\n├── dist/\n├── tsconfig.json\n├── package.json\n└── .gitignore\n\n\n2.1. Manejador básico de Lambda
\n\nCrea el archivo src/handler.ts con una función simple:
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: '¡Hola desde AWS Lambda con 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. Compilación de TypeScript
\n\nAgrega los scripts en package.json:
"scripts": {\n "build": "tsc",\n "watch": "tsc --watch",\n "clean": "rm -rf dist"\n}\n\n\nEjecuta la compilación:
\n\nnpm run build\n\n\nVerifica que en la carpeta dist aparezca el archivo handler.js.
3. Despliegue de la función Lambda en AWS
\n\nHay varias formas de desplegar. Veamos la más sencilla: a través de AWS CLI.
\n\n3.1. Empaquetado de la función
\n\nCrea un archivo ZIP con el código:
\n\ncd dist\nzip -r ../function.zip .\ncd ..\n\n\n3.2. Creación de la función Lambda
\n\nEjecuta el comando de AWS CLI:
\n\naws lambda create-function \\\n --function-name hello-typescript \\\n --runtime nodejs18.x \\\n --role arn:aws:iam::Y