¡Hey! Bienvenido a esta clase donde vamos a conocer el proyecto del curso.
A lo largo de todas las siguientes clases vamos a trabajar en agregar buenas prácticas
y agregar diferentes funcionalidades a un proyecto base.
Pero, ¿este proyecto base de dónde viene?
Si recordarás, te hemos comentado que venimos de un camino de aprendizaje
en el ecosistema serverless y de serverless framework,
donde ya creamos un CRUD totalmente serverless utilizando API Gateway,
Lambda Functions y DynamoDB.
Pero, ¿por qué vamos a utilizar este proyecto base?
En el mundo de serverless hay muchas buenas prácticas y consideraciones a tener en cuenta.
Te vamos a explicar paso a paso cómo integrar diferentes servicios
y así mismo cómo aprovechar el potencial de serverless al máximo.
No siendo más, vamos al diagrama y al código.
Como vemos en la siguiente imagen, tenemos diferentes componentes de nuestro proyecto serverless.
Notarás entonces que tenemos cuatro funciones Lambda, tenemos DynamoDB y tenemos un API Gateway.
Pero, ¿cómo vemos esto en código?
En este curso vas a agregarle nuevas prácticas y mejores herramientas a este proyecto base.
Este proyecto viene del curso de serverless en donde creamos solamente un CRUD
y esto lo vas a encontrar en la sección de recursos.
Vas a encontrar una URL y un enlace a la clase donde hablamos de este proyecto.
Pero, ¿cómo entiendo qué es el create, el read, el update y el delete?
Vamos a verlo en detalle.
Si recordarás, vamos a trabajar con serverless framework
y la estrella en nuestro repositorio de el framework es el serverless YAML.
En el serverless YAML hay un montón de información,
pero vamos a hablar puntualmente de las funciones.
Notarás que tenemos cuatro funciones, tenemos el getUsers, el createUsers,
el updateUsers y el deleteUsers.
Cada una de estas funciones hace match exactamente con una función Lambda
que tenemos en el diagrama.
Pero, ¿y lo de Dynamo y lo del API Gateway?
Bueno, te voy a explicar muy rápidamente para que vayamos al despliegue
y posteriormente al código.
Entonces, DynamoDB notarás que es un recurso que tenemos en la sección inferior.
Cuando definimos DynamoDB, creamos solamente una tabla relacionando usuarios
y definiendo un primary key.
Ese va a ser el uso puntual de Dynamo y vamos a partir de este proyecto base.
Cuando hablamos de API Gateway, notarás que no tenemos ninguna configuración
ni ningún recurso adicional.
Resulta que, del curso anterior, aprendimos que API Gateway es un recurso
que automáticamente serverless framework gestiona por nosotros.
Interesante, ¿no es cierto?
Ahora, vas a notar entonces que cada una de estas funciones,
getUsers, createUsers, cada una de estas tiene un evento HTTP.
Estos eventos van a responder a diferentes endpoints.
Puede ser un endpoint con un slash, un ID, puede ser un endpoint,
un slash solito, sin ningún inconveniente.
Y vas a notar adicionalmente que cada uno de estos llamados
o cada una de estas funciones se van a llamar mediante métodos HTTP.
Entonces, por convención, sabemos que un CRUD sigue los métodos HTTP,
del GET, del POST, del PUT o el PATCH y del DELETE.
Entonces, notarás eso en esta sección de acá,
en los eventos en cada una de las funciones lambda.
Pero, ¿cómo puedo poner yo a ejecutar nuestro proyecto?
En el curso anterior, definimos la instalación de las herramientas
y qué era lo necesario para poder ejecutar esto en local.
Pero entonces, vamos un poco más allá y vamos a descargar este proyecto
utilizando la CLI de GitHub.
Entonces, me copio la URL, voy a mi terminal,
voy a ubicar esto un poco más grande,
y notarás aquí que puedo hacer GET, CLONE y pego la URL de mi repositorio.
En este caso, vamos a hacer la visualización con Visual Studio Code
de este proyecto y notarás que ya tenemos todo preparado.
Ya teniendo nuestro proyecto clonado,
podríamos abrir en nuestro Visual Studio Code
o en nuestro editor de preferencia una terminal
para validar que efectivamente podemos hacer un SLS deploy.
Algo a tener en cuenta es que este proyecto en el repositorio
no tiene las dependencias y tampoco tiene un package log.json.
Es decir, este proyecto se encuentra de la siguiente forma.
Se encuentra solamente la carpeta relacionando GitHub,
create users, delete users, get users, el hola mundo,
que es la plantilla inicial con la cual iniciamos nuestro proyecto
en el curso anterior, y el update users y los archivos relacionados
al package, al readme y al serverless.yml.
Es decir, tendríamos un proyecto de esta forma.
Si ejecutamos el serverless deploy con esta estructura de carpetas
sin tener los node modules y sin tener el package log.json,
nos va a saltar un error porque no encuentra las dependencias.
Entonces, inmediatamente clones este proyecto,
y debes hacer una instalación limpia de todas las dependencias.
Esto lo logras mediante una instalación de npm.
Entonces, haces npm install y él automáticamente va a gestionar
todas las dependencias que tenemos en nuestro package.json.
Notarás que no son muchas dependencias,
entonces no debería tomar mucho tiempo.
A lo largo de esta clase de despliegue,
vas a notar que se van a generar unas carpetas
que son las que previamente eliminamos.
La de node modules, se genera la del. serverless
y el package-log.json.
Estos archivos son netamente necesarios
para poder dar la información al framework
y que todas las herramientas que utilizamos
a lo largo de este curso funcionen de manera fluida.
Entonces, ya tenemos nuestra instalación.
Podríamos hacer en este momento un sls deploy
y validar que efectivamente, ahorita,
ya está funcionando el despliegue.
Notarás en consola algunos mensajes.
Estos mensajes están asociados a serverless framework
que están realizando ciertas actualizaciones
con CloudFormation y con otros recursos.
En este caso, está creando un stack de CloudFormation
y si nos vamos a la consola de AWS,
podríamos validar que CloudFormation, en este momento,
ya tiene un stack que está siendo creado.
Entonces, dice creación en progreso
y cada uno de estos stacks va a generar diferentes eventos.
Entonces, tenemos eventos asociados
a la creación de diferentes recursos.
Notarás entonces que dice,
está actualizando el CloudFormation stack,
va más de 40 segundos,
y él comienza a generar el upload
de los diferentes archivos que tenemos
definidos en el serverless jaml.
Estos archivos del curso anterior
aprendimos que son los necesarios
para que cada una de las funciones lambda pueda vivir.
Si no tomaste el curso anterior,
te invitamos a que puedas validar
el conocimiento de serverless framework
o si te sientes cómodo con el ecosistema serverless de AWS,
puedes realizar solamente el examen
y con eso validas tu conocimiento.
Del curso anterior aprendimos una cantidad de herramientas,
pero algo muy importante que nos permite optimizar
el tamaño de cada una de estas funciones lambda
es la definición del empaquetamiento.
Notarás aquí que tengo seleccionado el package,
el patterns, y tengo la línea donde especifico
cuál es el archivo puntual que quiero que cada función lambda
utilice en la nube.
Notarás que para el getUsers tengo el getUsersHandler,
para el createUsers el createUsersHandler,
y así sucesivamente con las cuatro funciones.
Por eso mismo, cada una de estas funciones lambda
pesa muy poquito.
Eso es algo sorprendente porque estamos utilizando
todo el poder de AWS con un mínimo de código.
Cuando termine de actualizar el stack de CloudFormation
podríamos validar no solamente que tenemos un stack limpio
y listo para utilizarse, sino que también tenemos
funciones lambda ya disponibles también para ser consumidas.
Si vas a la sección de lambda, tenemos un montón de información.
Esta información está asociada al tipo de empaquetamiento,
al runtime, y mira, tenemos efectivamente
tres funciones lambda con Node.js y una con Python.
Increíble, ¿no es cierto?
Todo hace parte de un mismo ecosistema de aplicaciones
que hemos desarrollado en un curso previo.
Vamos a validar y efectivamente ya notamos que este proyecto
ya sirve y podríamos desplegar, podríamos hacer consumo
de cualquiera de estas URLs que tenemos aquí.
Por ejemplo, podríamos simplemente hacer un curl a esta URL.
Voy a hacer un curl y voy a poner esto un poquito más grande
y voy a escribir curl, esta URL, y le paso un ID 1.
Aquí él me dice, listo, la respuesta es un objeto usuario
en un JSON que me dice que no tengo ningún ítem
y que una cantidad cero y que no tengo nada escaneado.
Esto es netamente una respuesta de DynamoDB.
Como aprendiste, hemos logrado desplegar nuestro proyecto,
instalamos una serie de dependencias y validamos además
que en AWS tenemos un stack de CloudFormation
listo para ser utilizado.
Cuéntame en los comentarios qué te pareció este despliegue.
¿Ya conocías herramientas para trabajar con serverless
como Serverless Framework?
Nos vemos en la próxima clase.