Hay dos formas de construir en la nube. La forma antigua: Entrar a la consola de AWS, hacer clic en “Crear Lambda”, configurar permisos manualmente, luego ir a API Gateway, crear rutas, conectar todo y rezar para no haber olvidado un clic. A esto le llamamos “ClickOps”.
Y la forma profesional: Infraestructura como Código (IaC).
Si estás construyendo aplicaciones modernas, no puedes depender de clics manuales. Necesitas reproducibilidad, velocidad y seguridad. Aquí es donde entra Serverless Framework, la herramienta estándar para desplegar aplicaciones serverless sin dolor de cabeza.
En Tijiki, todos nuestros despliegues son automatizados. Hoy te enseñamos cómo dejar de ser un “clicker” y convertirte un arquitecto de código.
¿Qué es Infraestructura como Código (IaC)?
IaC significa gestionar y aprovisionar tus recursos de la nube (servidores, bases de datos, redes) a través de archivos de definición legibles por máquina, en lugar de configuración de hardware físico o herramientas de configuración interactivas.
Imagina que tu infraestructura es un plano arquitectónico.
- Sin IaC: Construyes la casa poniendo ladrillo por ladrillo cada vez. Si quieres otra casa igual, tienes que volver a hacerlo todo de memoria.
- Con IaC: Tienes un plano digital. Le das “Imprimir” (Desplegar) y la nube construye la casa idéntica tantas veces como quieras.
¿Por qué Serverless Framework?
Existen herramientas potentes como Terraform o AWS CloudFormation. Son increíbles, pero muy verbosas y complejas para arquitecturas basadas en funciones.
Serverless Framework es una capa de abstracción. Simplifica enormemente la configuración. Lo que en CloudFormation te tomaría 50 líneas de JSON, en Serverless Framework te toma 5 líneas de YAML.
Anatomía del archivo serverless.yml
El corazón de este framework es un archivo llamado serverless.yml. Aquí defines todo lo que tu aplicación necesita.
Veamos un ejemplo básico de cómo se ve una API real:
service: mi-api-usuarios
provider:
name: aws
runtime: nodejs18.x
region: us-east-1
environment:
TABLA_USUARIOS: ${self:custom.tableName}
functions:
crearUsuario:
handler: src/crearUsuario.handler
events:
- http:
path: /usuarios
method: post
resources:
Resources:
TablaUsuarios:
Type: AWS::DynamoDB::Table
Properties:
TableName: usuarios-db
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH