En este artículo vamos a ver:
1. Introducción
En este artículo vamos a explicar en que consiste el proyecto y que queremos “solucionar” con él. También detallaremos que programas/software vamos a usar durante el proyecto y como realizar una configuración básica para que se pueda usar durante la PoC (Proof of Concept o prueba de concepto).
Antes de nada, tendremos que tener un par de conocimientos básicos:
¿Qué es Amazon RDS?
AWS RDS (Amazon Web Services Relational Database Service) es un servicio que facilita la configuración, operación y escalado de bases de datos relacionales en la nube. Proporciona una interfaz para administrar y escalar infraestructuras de bases de datos, y automatiza tareas administrativas como la instalación y actualización de software, la gestión del almacenamiento, la replicación para alta disponibilidad y rendimiento de lectura, y las copias de seguridad para la recuperación de desastres.
RDS para PostgreSQL es una de las opciones de base de datos que ofrece AWS RDS y la escogeremos como nuestro engine de base de datos dado que PostgreSQL es un sistema de gestión de bases de datos relacional de código abierto muy popular entre los desarrolladores empresariales y las startups.
¿Qué es el protocolo MQTT y para qué se usa?
MQTT (Message Queue Telemetry Transport) es un protocolo de mensajería basado en estándares que se utiliza para la comunicación de un equipo a otro.
Se utiliza principalmente en el Internet de las Cosas (IoT), donde los sensores inteligentes, los dispositivos portátiles y otros dispositivos IoT tienen que transmitir y recibir datos a través de una red con recursos restringidos y un ancho de banda limitado. Estos dispositivos utilizan MQTT para la transmisión de datos, ya que es fácil de implementar y puede comunicar datos IoT de manera eficiente.
El protocolo MQTT ofrece varios beneficios:
- Ligero y eficiente: La implementación de MQTT en el dispositivo IoT requiere recursos mínimos, por lo que se puede usar incluso en pequeños microcontroladores.
- Escalable: El protocolo tiene funciones integradas para admitir la comunicación con una gran cantidad de dispositivos IoT.
- Fiable: MQTT tiene funciones integradas que reducen el tiempo que tarda el dispositivo IoT en volver a conectarse con la nube. A parte, ofrece funcionalidades para garantizar que los mensajes han llegado a destino con la funcionalidad QoS.
- Seguro: Facilita a los desarrolladores el cifrado de mensajes y la autenticación de dispositivos y usuarios mediante protocolos de autenticación modernos.
Por lo tanto, MQTT se está convirtiendo rápidamente en uno de los principales protocolos para despliegues de IOT (Internet de las cosas). Es especialmente útil en el campo de la domótica, donde se pueden comunicar de forma rápida y sin gran consumo dispositivos de forma remota.
Más información en este artículo de AWS.
¿Qué es Docker?
Docker es una plataforma de software que permite crear, probar e implementar aplicaciones de manera rápida.
Es un software de código abierto utilizado para desplegar aplicaciones dentro de contenedores virtuales. La contenerización (es decir, ejecutar las aplicaciones en contenedores virtuales) permite que varias aplicaciones funcionen en diferentes entornos complejos, como por ejemplo nos permitiria desplegar este WordPress en sistemas Windows, Linux y macOS sin ningún problema y le seria indiferente a la aplicación.
La principal diferencia entre Docker y las máquinas virtuales es que los contenedores Docker comparten el sistema operativo del anfitrión, mientras que las máquinas virtuales también tienen un sistema operativo invitado que se ejecuta sobre el sistema anfitrión. Esta diferencia hace que los requerimientos de hardware cambien significativamente dependiendo de si se ejecuta una misma aplicación en una VM (máquina virtual) o un contenedor, dado que en una VM tenemos que ejecutar, a parte de la aplicación, el sistmea operativo.
Por lo tanto, un despliegue de una aplicación con Docker tiene muchas ventajas, como el menor consumo de recursos por el motivo mencionado anteriormente, o el que se trata de un modelo basado en imagenes, que permiten compartir la aplicación o el conjunto de servicios con todas las dependencias en varios entornos.
Aquí tienes un artículo de AWS explicando más en detalle que és docker.
2. Objetivo del proyecto
Tenemos unos usuarios, que tienen X dispositivos, estos dispositivos nos mandan ciertos datos (a través del protocolo MQTT) y nosotros tenemos que almacenar estos datos en RDS. Pero de vez en cuando, los usuarios querrán consultar los datos que han mandado sus dispositivos.
Por lo que el diagrama quedaría tal que así:
Cabe destacar, que esto no es un montaje apto para Producción, sino que es una simple prueba, donde podrás tocar un poco de todo.
3. Antes de empezar (muy importante)
Primero de todo, hay que disponer de una cuenta AWS con un método de pago habilitado. Es crucial que tengas un método de pago validado, y que tengas en cuenta que realizar esta demo va a gastar unos pocos dólares (en AWS todo funciona en dólares). Con tal de no elevar mucho la factura, mantente en los parámetros que te indicamos, y una vez hayas acabado la prueba, elimina todos los recursos usados.
En AWS se paga por uso, es decir, que cada hora que tengas el ejemplo montado y funcionando, incurrirá en coste.
Si hay alguna cosa durante el proyecto que no te queda clara o tienes dudas, por favor, escribe un comentario. Tu feedback es muy importante.
4. ¿Qué tecnologías usaremos?
Usaremos lo siguiente:
- Servidor web
- Python 3.11
- Flask
- MQTT Broker
- Imágenes (contenedores) usadas por los pods
- Command-line’s para controlar/crear el cluster de Kubernetes
- Base de datos
- Kubernetes cluster
- Simulador de dispositivo MQTT
Si no conoces alguno o ninguno, no te preocupes, iremos explicando que es y para qué se usa cada cosa a medida que vayamos desarrollando el proyecto.
5. ¿Qué software vamos a necesitar?
Para poder desarrollar correctamente el proyecto, necesitaremos tener instalado los siguientes programas y CLI’s. A pesar de que nosotros lo hemos hecho en un equipo Windows, no deberías tener problemas en hacerlo en un Mac o distribución basada en linux.
5.1 Amazon CLI
Para instalar AWS CLI sigue los pasos siguientes:
- Entra en la web https://aws.amazon.com/es/cli/
- Descargar e instalar AWS CLI, tienes los links de descarga en la parte derecha.
- Comprobamos que AWS CLI funciona correctamente ejecutando “aws help”.
- Iremos a la consola de AWS y bucaremos IAM, entraremos dentro del apartado de users, y buscaremos nuestro usuario.
- Iremos dentro del apartado “security credentials”.
- Iremos al apartado de “Access keys” y crearemos una dandole clic a “Create access key”.
- Seleccionaremos CLI (1), le daremso a confirmar la recomendación en el punto 2, y le daremos a next (3).
- Pondremos una descipción de para que se van a usar esas credenciales y le daremos a crear credenciales.
- Obtendremos y nos grardaremos las credenciales EN UN SITIO SEGURO. OJO: Si un atacante obtiene esas credenciales seria como si tubiera tu usuario y contraseña de AWS sin necesidad de MFA, así que mucho ojo donde las guardas.
5.2 Docker Desktop
Docker es una plataforma que nos permite ejecutar, crear y gestionar contenedores. Docker Desktop nos permite gestionar los contenedores de una forma más sencilla y visual.
Si te encuentras en Windows y nunca has ejecutado ningún contenedor o docker, tendrás que tener instalado WSL (Windows Subsystem for Linux) o, en caso de que tengas una licencia PRO de windows, tener Hyper-V habilitado. Aquí solo explicaremos a instalar WSL, ya que es el que más recomendamos.
Como instalar WSL
- Para ello iremos al menú de Windows y buscaremos por la palabra características o “features”, y seleccionaremos “Activar/Desactivar características de Windows”.
- Iremos a la parte inferior y activaremos “Windows Subsystem for Linux”.
- Le daremos a OK, y en cuanto termine de instalar la característica te pedirá reiniciar el equipo.
Para instalar docker desktop, seguiremos los siguientes pasos:
- Nos descargaremos el ejecutable desde https://www.docker.com/products/docker-desktop/
- Dejaremos la instalación por defecto, a no ser que sepas lo que estás haciendo.
5.3 Kubectl
Kubectl es el command line de kubernetes que nos permite gestionar el clúster. Con él podemos indicar que se actualizen los pods, así como un sinfín de acciones.
Para instalar KUBECTL:
- Nos dirigiremos a https://kubernetes.io/docs/tasks/tools/#kubectl
- Seguimos los pasos según el sistema operativo que tengas.
- Comprobamos que se ha instalado correctamente ejecutando el comando “kubectl”
Si te falla el comando, es que no se encuentra en las variables de tu sistema operativo.
Añadir kubectl a las variables del sistema operativo (Windows)
- Ten a mano la ruta donde te has descargado el kubectl
- Iremos al menú de Windows y buscaremos “Editar variables del sistema operativo”
- Le daremos doble click o editar a la variable “Path”
- Le damos a “new” y añadimos el path DE LA CARPETA donde has descargado el ejecutable.
- Finalmente guardamos dando a OK
Reinicia windows para que tenga efecto.
5.4 Eksctl
EKSCTL es la herramienta oficial de AWS para crear y gestionar clúster de Kubernetes en su Cloud.
Para instalar la herramienta seguiremos los siguientes pasos:
- Nos dirigimos a https://eksctl.io/installation/ y seguimos los pasos según nuestro sistema operativo.
- Una vez instalado, comprobamos que nos funciona correctamente ejecutando “eksctl” EN CMD (en poweshell no se va a ejecutar). Si estás en linux o mac, debería funcionar con tu terminal por defecto.
Si no te funciona, es porque lo tienes que añadir a las variables de tu sistema operativo.
Añadir eksctl a las variables del sistema operativo (Windows)
- Ten a mano la ruta donde te has descargado el eksctl (si está en un zip, extráelo y guárdalo en un sitio donde no lo vayas a borrar)
- Iremos al menú de Windows y buscaremos “Editar variables del sistema operativo”
- Le daremos doble click o editar a la variable “Path”
- Le damos a “new” y añadimos el path DE LA CARPETA donde has descargado el ejecutable.
- Finalmente guardamos dando a OK
Reinicia windows para que tenga efecto.
Si no, puedes usar la ruta donde se encuentra el ejecutable.
5.5 Python 3.11
Para instalar Python 3.11, haremos lo siguiente:
- Vamos a https://www.python.org/downloads/ y nos descargaremos la última versión de python 3.11.
Esto al final lo usaremos para hacer pruebas en local y para Visual Studio Code. Puedes probar otras versiones de python, pero vete con cuidado si hay cambios significativos.
5.6 Visual Studio Code (opcional)
Si tienes otro IDE o ya lo tienes instalado puedes omitir este paso.
Si no, aquí tienes como descargarlo:
- Te diriges a https://code.visualstudio.com/ y te descargas el fichero que corresponda con tu sistema operativo.
- Sigue los pasos recomendados
- Una vez instalado iniciaremos el IDE para comprobar que funciona correctamente y que ha detectado nuestra instalación de Python.
- Crearemos una carpeta donde dentro crearemos un fichero “test.py”.
- Nos fijaremos si nos sale la barra inferior la versión de python que hemos instalado.
- Instala estas extensiones recomendadas.
Extensión | Publisher |
Pylint | Microsoft |
Python | Microsoft |
MagicPython | MagicStack Inc. |
IntelliCode | Microsoft |
5. Conclusiones
En este artículo hemos explicado el objetivo de esta PoC y que queremos lograr.
Aparte, hemos instalado todo el software que necesitaremos para realizar la PoC y lo hemos dejado todo preparado para empezar a crear nuestro primer clúster de kubernetes en el servicio autogestionado de EKS.
Artículo anterior: 1. Fundamentos
Siguiente artículo: 3. Vamos a crear un clúster