API RESTful Serverless en Lambda y MySQL
API Gateway Lambda MySQL Serverless Framework
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, podemos revisar este articulo donde se crea una instancia. 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. Acá les dejo un documento, para crear un perfil IAM. En mi caso, cada perfil tiene sus credenciales. En mi caso ~/.aws/credentials
Creamos una carpeta y los archivos necesarios de Node.js y Serverless para comenzar!
Vamos a pegarle una mirada a nuestro serverless.yml.
Vamos agregarle el perfil, que usaremos, para hacer el deploy y la region donde queremos hacerlo.
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.
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.
Creamos la carpeta CRUD/usuarios.js, donde estarán los handlers que atenderán las llamadas de nuestros Endpoints.
Ahora nos toca crear los Endpoints, en el YAML. Aca les dejo mi serverless.yml.
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
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.
Vamos a realizar un GET junto con el ID.
Probamos de traer todos los registros.
Vamos a eliminar el registro.
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!