1. Objetivos

En este articulo, vamos a crear una base de datos con el engine PostgreSQL en el servicio AWS RDS. Tambien vamos a crear los deployments para los distintos servicios para EKS, ajustando los templates que os proporcionamos para que se adapten a vuestro caso y vamos a desplegarlos en los Node Groups.

Una vez ya hemos desplegado todos los módulos de nuestra PoC de EKS, prepararemos todos los componentes para realizar las pruebas, que van a ser Postman y NodeRed, así como tambien vamos a crear la estructura básica de la base de datos que luego vamos a consultar desde nuestro backend.

Si no conoces alguno de estos software’s, te dejamos una version resumida de que hace cada uno.

¿Qué es Postman?

Postman es una herramienta de desarrollo de software que permite a los desarrolladores probar, depurar y documentar APIs.

Postman es útil para múltiples tareas, como por ejemplo:

  • Testear colecciones o catálogos de APIs tanto para Frontend como para Backend.
  • Organizar en carpetas, funcionalidades y módulos los servicios web.
  • Gestionar el ciclo de vida (conceptualización y definición, desarrollo, monitoreo y mantenimiento) de nuestra API.
  • Generar documentación de nuestras APIs.
  • Trabajar con entornos (calidad, desarrollo, producción) y compartir la información con el resto del equipo involucrado en el desarrollo a través de un entorno cloud.

Para usar Postman, generalmente se comienza creando una colección, que permite agrupar solicitudes3. Luego, puedes incorporar en ella todas las solicitudes que necesites3. Postman permite trabajar cómodamente con todos los métodos del HTTP, como GET, POST, PUT, PATCH, DELETE3. Gracias a Postman, puedes guardar todas las solicitudes que quieras, para tenerlas preparadas y poder ejecutarlas las veces que haga falta3.

¿Qué es Node Red?

Node-RED es una herramienta de programación visual que permite conectar dispositivos de hardware, APIs y servicios en línea de formas nuevas e interesantes. Es especialmente útil para simplificar la programación, la conectividad y los servicios, distribuyéndolos de forma eficiente para ganar tiempo en el registro y gestión de la información.

En el caso que nos ocupa, lo usaremos para simular un dispositivo MQTT que se conectaria a nuesto mqtt broker que esta corriendo en nuestro clúster de EKS. Podriamos utilizarlo de las siguientes formas:

  • Subscribirse a ciertos topics
  • Recibir/Publicar mensajes en ciertos topics

¿Qué es un Security Group?

Un Security Group en AWS es un firewall virtual que controla el tráfico de entrada y salida de los recursos de AWS y las instancias de EC2.

Para cada Security Group, puedes agregar reglas que reflejen el rol de la instancia que está asociada al Security Group. Por ejemplo, una instancia configurada como servidor web necesita unas “reglas” de seguridad que permitan el acceso HTTP y HTTPS entrante, del mismo modo que una instancia de la base de datos necesita reglas que permitan el acceso para el tipo de base de datos (como el acceso a través del puerto 3306 para MySQL).

Además, puedes especificar el origen, el rango de puertos y el protocolo de cada regla de entrada, y el destino, el rango de puertos y el protocolo de cada regla de salida.

En resumen, un Security Group actúa como un firewall virtual y es la primera defensa de seguridad contra los accesos indeseados.

2. Creando nuestra base de datos en AWS

Para nuestra base de datos, usaremos Amazon RDS. Este es el servicio administrado que AWS ofrece a sus clietes para tener bases de datos relacionales en la nube de AWS. En el articulo 2. El proyecto, ¿Qué necesitamos? , explicavamos de forma más detallada que es AWS RDS.

Tendremos que realizar varios pasos para tener correctamente configurado nuestro RDS funcional.

2.1 Creando el subnet group

Antes de nada, crearemos un subnet group. Si no sabes lo que es, te recomiendo que te leas la brebe explicación.

¿Que es un subnet group?

Un Subnet Group de RDS (RDS Subnet Group) en AWS RDS es un recurso de la VPC que se utiliza para definir un conjunto específico de subnets donde se puede lanzar una instancia de RDS, lo que permite aumentar la disponibilidad y fiabilidad de la instancia de la base de datos.

En nuestro caso, crearemos un Subnet Group con las subredes privadas de back, esto permitira que no haya accesos externos desde fuera de nuestra VPC.

Vamos a crear un subnet group:

2.2 Creación de la base de datos en Amazon RDS

3. Preparando las pruebas de nuestro EKS

3.1 Crear deployments en el EKS

Vale, ahora tenemos las máquinas, pero nos falta ejecutar algo dentro de ellas, ahí es donde entran los “deployments” de Kubernetes. Los deployments son como ficheros de configuración donde le indicamos a kubernetes donde, como y que tiene que desplegar en nuestro cluster.

Para ello se han proporcionado en el zip “Imagenes y configuracion” unos ficheros *.yaml que se encuentran dentro de las carpetas Config de cada servicio.

3.1.1 Modificaciones necesarias

Hay diversas modificaciones que tienen que hacerse en los ficheros de configuración. Te guiaremos para realizar cada una de ellas.

\Backend\Image\app.py :

Este fichero tiene el código que ejecutará tu backend.

Hay que ir al principio del fichero y cambiar el valor de dentro de la variable RDS_HOST por el valor que nos ha proporcionado RDS anteriormente. Si hemos indicado un password distinto a “superpass” durante la creación del RDS, también deberemos modificarlo en la variable RDS_PASS.

Una vez que hagamos hecho estos cambios, tendremos que volver a compilar la imagen. Para ello seguiremos las instrucciones que nos proporciona ECR o sino puedes revisar como se hacia en el artículo 4 en el apartado 3.2 .

\Backend\Config\backend.yaml

Este es el fichero de configuración que utilizara kubernetes para crear el servicio, deployment y el POD.

Tendrás que dirigirte a la línea 43, donde se indica la imagen, y substituir el valor de “image:” por el que nos proporciona ECR (OJO: Al final tiene que quedar <ECR URI>:latest, ya que de momento no usaremos los tags).

\Frontend\Config\config.yaml :

En este fichero se especifica toda la información referente al servicio de frontend.

En este caso hay que modificar la línea 36, lo mismo que en el caso anterior, cambiar la URI pero dejando “:latest” al final.

\mqtt-broker\Config\mqtt-broker.yaml :

En este fichero se especifica toda la información referente al servicio de frontend.

En este fichero hay que modificar la línea 37, lo mismo que en el caso anterior.

3.1.2 Creando todos los deployments en EKS

Para crear estos deployments de kubernetes haremos lo siguiente:

kubectl apply -f .\mqtt-broker.yaml

3.2 Preparando NodeRed

Para realizar las pruebas vamos a necesitar Docker y Node Red. Para configurarlo haremos lo siguiente:

docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red

3.3 Preparando Postman

Potman es un programa que nos permite hacer llamadas HTTP a endpoints.

Para configurarlo debemos:

kubectl get services

3.4 Inicializando la base de datos

Con el Postman ya configurado, vamos a hacer una llamada al path “/initialize”. Esto va a hacer que se cree una tabla llamada “devices” donde se insertara un registro con los campos siguientes:

Nombre del campoValorEjemplo
idint (autogenerado)1
mac_addressstr(20) MAC del dispositivo00:00:00:00:00:01
device_namestr(30) Nombre asigando por el usuario al dispositivotesting device
creation_dateTIMESTAMP Fecha en que se creó el dispositivo en la Base de Datos2024-04-03 08:30:15

Pasos a segir:

Esto hara una peticion a nuestro clúster de EKS donde se hara la inicialización (desde la parte backend)

Para comprobar que se ha ejecutado correctamente, miraremos la respuesta que nos devuelve la petición.

4. Realizando pruebas para comprobar el correcto funcionamiento

4.1 Comprobar que todos los servicios están levantados en EKS

Antes de nada verificaremos que de todos los servicios hay al menos un POD levantado. Para ello haremos la siguiente operativa:

kubectl get deployments
estado del clúster en eks

4.2 Realizando pruebas contra el clúster de EKS

Comprobaremos que el backend y el frontend esten funcionando correctamente ejecutando una llamada get desde Postman al path “/”. Tendria que devolvernos un Status 200 con el mensaje que aparece en la imagen inferior.

Una vez comprobado que esos dos componentes funcionan, vamos a inicializar la base de datos.

Para ello tendremos que hacer una llamada desde POSTMAN al path “/initilize” y esperar una respuesta como la que aparece en la imagen inferior.

Una vez comprobado, vamos a ejecutar varias acciones de enviar mensajes desde Node Red.

Entonces iremos nuestro navegador, introduciremos la misma url que tenemos en PostMan, pero esta vez llamaremos al path “/mqtt”

Nos aparecera una pantalla como en la imagen inferior, donde deberemos poner una mac, y pondremos “00:00:00:00:00:01” y le daremos a submit. Esto se hace porque así podemos desde el backend comprobar el input y se podrian hacer cosas a partir de ese input.

Una vez hecho esto, nos aprecera una pantalla tal que así. Donde se devuelve un json con el status de la respuesta, la información del dispositivo que hemos introducido en la pantalla anterior (recuperado de la base de datos), los mensajes que se han enviado desde Node Red, y la mac del dispositivo que hemos introducido anteriormente.

Aquí daremos por concluida nuestra prueba de concepto basada en el servicio de EKS.

5. Conclusión general

Hemos conseguido desplegar nuestro primer cluster funcional de EKS, donde hemos aprendido sobre:

Ademas, otros puntos que hemos tocado són:

6. Feedback

Esperamos que este articulo te haya ayudado a conocer un poco más el servicio de Amazon EKS. Nos gustaria que respondieras a unas preguntas y que nos dejaras un comentario. Esto nos ayudara a mejorar en futuros artículos así como mejorar la serie de artículos que has estado siguiendo. Muchas gracias!

¿Como de complicado has encontrado seguir el contenido?
0 votes · 0 answers
×

Djeanos tu comentario sobre que te ha parecido EKS y el mundo de kubernettes. Si en algún momento te has atascado o crees que podemos mejorar alguna parte de algún artículo, por favor indicanoslo para que podamos corregir el artículo.

Deja una respuesta

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


No hay comentarios que mostrar.

Deja una respuesta

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