Implementando una API REST utilizando TypeScript con Serverless Framework y AWS

Kenny J. Luque
Pragma
Published in
5 min readMar 27, 2024

La arquitectura Serverless ha revolucionado la forma en que construimos y desplegamos aplicaciones, permitiendo a los desarrolladores centrarse en la lógica de negocio sin preocuparse por la gestión de servidores. En este artículo, exploraremos cómo utilizar Serverless Framework para crear una API REST altamente escalable, flexible y rentable.

Comenzaremos entendiendo los principios fundamentales de la arquitectura serverless y por qué el Serverless Framework es una herramienta poderosa para su implementación.

Luego, nos sumergiremos en el proceso paso a paso de construir una API REST emulándola localmente.

Finalmente, discutiremos el proceso de despliegue usando la nube de AWS.

¿Serverless?

Tradicionalmente alojamos nuestras aplicaciones en servidores a los cuales le asignamos recursos de acuerdo a nuestras cargas de trabajo, es decir, somos responsables de aprovisionar, mantener y administrar los recursos para ella.

Esto demanda de nuestra atención distrayéndonos de trabajo mas importante que tenemos; construir y mantener la aplicación actual. Serverless en un modelo de ejecución donde el proveedor de Nube abstrae la infraestructura subyacente al desarrollador dejando la responsabilidad de aprovisionar, mantener y administrar los recursos necesarios al proveedor de nube.

Esto trae múltiples beneficios:

  • No es necesario gestionar el servidor.
  • Pago por uso.
  • Desarrollos mas rápidos.
  • Escalamiento global y automático.
  • Alta disponibilidad y tolerancia a fallas.

Serverless Framework es un marco de trabajo que permite crear aplicaciones en infraestructura de nube, es la herramienta de desarrollo líder para implementar arquitecturas serverless.

Utiliza una sintaxis abstracta simple en YAML, definiendo fácilmente aplicaciones como funciones y eventos. Implementa infraestructura y código con un solo comando.

https://www.serverless.com/

Instalación

Para ejecutar nuestro código debemos tener instalado un entorno de ejecución para JavaScript, en este ejemplo usaremos Node.js (https://nodejs.org) en la versión 18.19.0, e instalamos la CLI de serverless framework con el siguiente comando:

npm install -g serverless

y verificamos que tengamos la versión 3:

sls -v

Listo, una vez verificado podemos utilizar la CLI de serverless para ejecutar comandos, para iniciar nuestro proyecto nos basaremos en uno de los ejemplos oficiales que nos brinda serverless framework v3 y lo instalaremos en nuestra carpeta “my-api”

serverless install -u https://github.com/serverless/examples/tree/v3/aws-node-typescript -n my-api

Aquí usamos el comando serverless, pero con usar sls tambien es aceptado por la CLI.

Para revisar todos los ejemplos brindados podemos ir al repositorio oficial.

https://github.com/serverless/examples

Analicemos el archivo serverless.yml

Analicemos cada una de las propiedades principales:

  • La propiedad service indica el nombre del stack de cloudformation, en este caso my-api.
  • La propiedad provider especifica el provedor de nube y en entorno de ejecución.
  • En functions se definen las Funciones Lambda donde implementaremos la API REST.
  • En plugins definimos paquetes que contienen codigo javascript personalizado para extender las funcionalidades de serverless framework.

Instalamos serverless-offline para emular AWS lambda y AWS API Gateway en nuestro ambiente local.

pnpm i -D serverless-offline

En este caso usamos pnpm como gestor de paquetes, puedes usar npm o yarn en su lugar.

Y modificamos el archivo serverless.yml para exponer nuestra API.

service: my-api
frameworkVersion: '3'

provider:
name: aws
runtime: nodejs18.x

functions:
hello:
handler: src/functions/hello.handler
events:
- httpApi:
method: GET
path: /hello

plugins:
- serverless-esbuild
- serverless-offline

Ahora debemos modificar nuestro handler que se encuentra en la ruta

src/functions/hello.handler

Emulemos nuestro API en local con el siguiente comando y realicemos el consumo de nuestro endpoint con método GET

sls offline

Genial, ahora tenemos nuestra primer API en serverless framework 🚀!

Ahora agreguemos el tipado para nuestro handler usando @types/aws-lambda

pnpm i -D @types/aws-lambda
import { Handler, APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda'

export const handler: Handler = async (event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult> => {
return {
body: JSON.stringify({
data: "Hola mundo desde serverless framework",
}),
statusCode: 200,
};
}

Todo bien hasta aquí, ya sabemos que:

Ahora debemos desplegarlo en AWS, para ello debes tener una cuenta en AWS e instalar su CLI, te dejo la web oficial con el paso a paso para cada sistema operativo.

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

Ejecutamos el siguiente comando y configuramos nuestras credenciales

$ aws configure
AWS Access Key ID [None]: accesskey
AWS Secret Access Key [None]: secretkey
Default region name [None]: us-west-2
Default output format [None]:

Finalmente ejecutamos:

sls deploy

Nota: Serverless framework nos crea mediante API Gateway nuestro endpoint de forma automática.

Como podemos observar, con un solo comando serverless framework crea y configura nuestra infraestructura en AWS de forma rápida y fácil de usar.

Si queremos eliminar todo nuestro stack creado podemos usar el comando:

sls remove

Conclusión

Hemos implementado una API REST usando serverless framework, entendiendo la estructura que usa el framework para generar nuestro stack con unas cuantas líneas de código, a este proceso se le conoce como IaC (Infrastructure as Code).
Usamos TypeScript y desplegamos la solución de forma ágil y sencilla.

Este post hace parte de la serie de publicaciones donde continuaremos implementando sobre lo construido, en la próxima edición agregaremos nuevas herramientas de desarrollo, funcionalidades, usaremos el SDK v3 de AWS, un CRUD con DynamoDB, etc.

Por último les comparto el repositorio de esta serie de blogs.

https://github.com/Kenny2397/serverless-framework-series

Referencias:

Kenny J. Luque @kennyluquet
Mira mis otros artículos aquí

--

--

Kenny J. Luque
Pragma
0 Followers
Writer for

🚀 Serverless enthusiast