Vamos a implementar un API RESTful en Serverless, en otras palabras sin utilización de servidores, como los conocemos. Existen muchos proveedores que ofrecen servicios, sin servidor, pero vamos a quedarnos con Amazon Web Services.

Si no conocen el termino Serverless es buen momento para empezar a investigarlo y empaparnos de su uso.

ARQUITECTURA

Aca un bosquejo de la arquitectura, que utilizaremos, donde tenemos las diferentes funciones Lambdas que eran invocadas desde nuestro API Gateway.

API Gateway invocan a las Funciones Lambda, que se conectan contra la Base de Datos RDS MySQL

Vamos a usar Serverless Framework que nos dará la posibilidad de manejar, localmente, nuestro código para probarlo y a su vez hacer el deploy, de nuestro código, con la configuración del entorno. Automáticamente, tendremos, parametrizada nuestras rutas en el API Gateway.

  EndPoint Método Descripción
1 /usuario GET Lista todos los usuarios de la tabla
2 /usuario/{id} GET Lista el usuario, especifico.
3 /usuario POST Crea un nuevo usuario en la tabla
4 /usuario/{id} PUT Modifica un usuario existente
5 /usuario/{id} DELETE Elimina un usuario

Para esta PoC sera necesario tener instaladas las siguientes herramientas y framework’s.

RECURSOS

  • Node.js 8.10.
  • MySQL, Instancia RDS en AWS.
  • Editor de Código.
  • Postman.

Para crear la Base de Datos, en AWS RDS, es importante que tengamos su FQDN, Nombre de Instancia, Usuarios y Password.

Vamos a crear la Base de Datos, donde trabajaremos, en MySQL, luego de conectarnos.

CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

Serverless Framework

Vamos a instalar Node.js en nuestro equipo, puede variar segun nuestro sistema operativo y serverless.

Llegó el momento de agregar nuestras credenciales de AWS.Para crear un perfil IAM. En mi caso, cada perfil tiene sus credenciales. En mi caso ~/.aws/credentials

Perfiles de AWS

Creamos una carpeta y los archivos necesarios de Node.js y Serverless para comenzar!

Creación de Carpeta y Template
Template Serverless

Vamos a pegarle una mirada a nuestro serverless.yml.

Serverless.yml

Vamos agregarle el perfil, que usaremos, para hacer el deploy y la region donde queremos hacerlo.

Profile & Region

Instalamos las dependencias. Por un lado serverless-offine, para las pruebas locales, junto con MySQL, para la conectar la base de datos, y querystring, para el parseo de los JSON. Luego inicializamos nuestro archivo.

Dependencias e Inicialización

Creamos el archivos connections.js donde pondremos todos nuestros datos de conexión. Vamos a AWS RDS y en base a la BBDD cargamos las variables para su funcionamiento.

connections.js

Creamos la carpeta CRUD/usuarios.js, donde estarán los handlers que atenderán las llamadas de nuestros Endpoints.

crud/usuarios.js

Ahora nos toca crear los Endpoints, en el YAML. Aca les dejo mi serverless.yml.

Endpoints

Ya tenemos todo listo para subirlo a AWS! Serverless creara el API Gateway, las funciones Lambda automaticamente! Hacemos:

sls deploy

En el supuesto caso de querer probar, localmente, podríamos haber utilizado sls offline para la prueba local. Logicamente con los direccionamientos, correspondientes, de base de datos del archivo connections.js.

DEPLOY

Empezo la Magia!

Aca podemos ver, varias cosas:

Si revisamos el S3 Bucket, encontraremos nuestro código. A su vez se crearan las funciones y las rutas en el Gateway.

Funciones Lambda

Lambda

API Gateway

CONSUMO DE LA API

Vamos a jugar, con POSTMAN, para revisar nuestras API’s.

Creamos 1 registro, para ello utilizaremos el verbo POST junto al envio del JSON, con los datos a insertar.

POST create

Vamos a realizar un GET junto con el ID.

Get findOne

Probamos de traer todos los registros.

GET findAll

Vamos a eliminar el registro.

DELETE delete

Espero que les sirva! Les dejo el proyecto en GitHub.

En la próxima entrada, vamos a darle seguridad! Si quieren eliminar, de sus cuentas, el deploy no tienen mas que hacer sls remove.

Saludos!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)

compartir en ....
Avatar

Acerca de Brian Alexander Diaz

Brian Alexander Diaz Investigador en temas de seguridad y Devops Mi nombre es Brian Alexander Diaz. El objetivo de este blog es promover la cultura y mentalidad en seguridad por todo el Internet y que la gente aprenda a facilitar su vida y crear  sistemas mas seguros .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *