Proyecto AWS: Desplegar Bot de WhatsApp con Kubernetes y EKS

Proyecto AWS: Desplegar Bot de WhatsApp con Kubernetes y EKS

En este nuevo proyecto de AWS, vamos a desplegar un ChatBot de WhatsApp desarrollado en nodejs, además de un pequeño frontend con Angular para administrar el contenido de las opciones y las alertas.

Adicionalmente, vamos a disponer de una base de datos en PostgreSQL para almacenar el texto de cada mensaje y las alertas que el sistema va a generar. Está la deberemos crear de forma externa, y nos conectaremos de forma remota posteriormente (en este proyecto no se contempla añadir la BD dentro del cluster, sin embargo puede ser perfectamente adaptada).

Repositorio

En el siguiente link se encuentra disponible el código completo de la aplicación. Este será usado para el despliegue en AWS.

Repositorio en GitHub: https://github.com/brunodangelo/aws-eks-bot-whatsapp-kubernetes

Descripción de cada carpeta

  • back-node: Backend desarrollado en nodejs, con el framework express
  • bot-node: Proceso del chatbot de WhatsApp desarrollado en nodejs, con la libreria open-source BuilderBot
  • front-prod: Frontend de autogestión desarrolado en Angular (se utiliza como base la plantilla free “nice-admin-angular-lite”)
  • k8s: manifiestos .yaml para el despliegue utilizando kubernetes
  • scripts bash: archivos para automatizar la creacion de las imagenes y los contenedores para el despliegue local con Docker

Arquitectura

Diseño y los servicios de AWS a emplear:

Disponemos de 3 pods en los que se encuentran el proceso del Bot (bot-node), el Backend (back-node) y el Frontend (bot-front). Estos se encuentran dentro del mismo cluster y el servicio asociado que poseen es Load Balancer.

Subir imágenes a ECR

Debemos subir las imágenes creadas a partir de cada Dockerfile a ECR:

IMPORTANTE: Al momento de crear las imágenes, pasar por variables de entorno las credenciales de acceso a la BD remota.

Pruebas en local con Docker

Si se quiere probar localmente, utilizando contenedores docker se pueden correr los scripts de Bash:

  • Ejecutar script en Bash llamado “1-creacion-imagenes.sh” para crear las imagenes de Docker a partir del codigo de cada modulo
  • Ejecutar script en Bash llamado “2-creacion-contenedores-despliegue-local.sh” para crear los contenedores y la red que los agrupa

Pruebas en local con Minikube

Ejecutar el siguiente comando en la consola local (crea un secret para obtener las imagenes desde ECR):

kubectl create secret docker-registry ecr-secret \
 --docker-server=<id_cuenta>.dkr.ecr.us-east-1.amazonaws.com \
 --docker-username=AWS \
 --docker-password=$(aws ecr get-login-password --region us-east-1) \
 --namespace default

Reemplazar en “image”, dentro de cada deployment.yaml localizados en la carpeta “k8s”, el valor por la URI de la imagen en ECR.

Ejecutar los siguientes comandos para la creación de los deployments y los servicios (posicionarse en k8s):

minikube start

kubectl apply -f back-node/deployment-back-node.yaml
kubectl apply -f back-node/service-back-node.yaml

kubectl apply -f bot-node/deployment-bot-node.yaml
kubectl apply -f bot-node/service-bot-node.yaml

kubectl apply -f bot-front/deployment-bot-front.yaml
kubectl apply -f bot-front/service-bot-front.yaml

Una vez finalizado, asegurate que todos los deployments esten con el estado READY:

Finalmente, para eliminar todo luego de realizar las pruebas, ejecuta los siguientes comandos:

minikube stop

minikube delete

Despliegue en EKS

Primeramente, debes tener ya instalado AWS-CLI con su respectiva configuración de credenciales.

En este proyecto, vamos a utilizar eksctl para el despliegue a través de la terminal, por lo que debes también instalarlo en tu computadora. Sin embargo, si quieres también puedes hacer los pasos desde la interfaz grafica de AWS o con alguna herramienta de IaC como Terraform.

Paso 1: Creación del Cluster

eksctl create cluster --name bot-cluster --region us-east-1 --without-nodegroup

Paso 2: Creación del node-group

eksctl create nodegroup --cluster bot-cluster --nodes-min 1 --nodes-max 5 --nodes 2 --name autoscaling-nodegroup --node-type t3.medium --region us-east-1

Debemos aguardar unos minutos hasta que todo quede correctamente creado y configurado.

Luego, podremos lo siguiente desde la interfaz de AWS:

Ahora lo que debemos hacer es crear los deployments y servicios ya dentro de los recursos de AWS.

Paso 3: Cambiar de entorno en la consola

aws eks update-kubeconfig --region us-east-1 --name bot-cluster

Paso 4: Crear los pods y servicios de kubernetes en los recursos creados en EKS (para BACK-NODE y BOT-NODE) IMPORTANTE: UBICARSE EN /k8s

kubectl apply -f back-node/deployment-back-node.yaml
kubectl apply -f back-node/service-back-node.yaml
  
kubectl apply -f bot-node/deployment-bot-node.yaml
kubectl apply -f bot-node/service-bot-node.yaml

Paso 5: Dentro de deployment-bot-front.yaml, cambiar las variables de entorno API_BACK y API_BOT por las direcciones dns de los Load Balancer que ha creado AWS en el paso anterior

Paso 6: Crear los pods y servicios de kubernetes para BOT-FRONT

kubectl apply -f bot-front/deployment-bot-front.yaml
kubectl apply -f bot-front/service-bot-front.yaml

Paso 7: Acceder a la url del Frontend (bot-front):

Veremos la siguiente web:

Final

Una vez desplegada la aplicación completa, solamente debemos escanear el codigo QR desde la interfaz grafica del frontend y el proceso del bot comenzará:

Una vez cumplido este paso, ya el bot comienza a responder al usuario:

Última actualización el 01-04-2025 por Bruno D’Angelo

Deja un comentario

Tu email no será publicado.