AWS ALB + Sticky Sessions Configuración y Casos de Uso
Tags: aws, awsespañol, stickysessions, tutorial
Published: 2024-01-16 21:28:29

En este post, exploraremos a fondo la configuración de AWS ALB con la función de Sticky Sessions habilitada y examinaremos escenarios prácticos donde esta configuración es esencial.

**¿Qué es un ALB o Application Load Balancer?**

Para comprender la importancia de la configuración de Sticky Sessions, es crucial repasar la función fundamental de un Application Load Balancer (ALB) en nuestra infraestructura. Este dispositivo desempeña un papel central al recibir las solicitudes de los usuarios destinadas a nuestra aplicación. Luego, de manera inteligente, distribuye estas peticiones entre las instancias disponibles que conforman nuestra aplicación, con el objetivo de optimizar el rendimiento. Este proceso se basa en la evaluación constante de la capacidad de cada instancia en tiempo real, asegurándose de dirigir el tráfico hacia instancias saludables y disponibles.

**Que es Sticky Session y para que sirve?**

Las Sticky Sessions, o sesiones persistentes, juegan un papel fundamental en la optimización del rendimiento de una aplicación. Esta funcionalidad permite que un usuario sea dirigido continuamente a la misma instancia de servidor durante un período de tiempo predefinido. La implementación de Sticky Sessions se logra mediante la asignación de una cookie específica que contiene información crucial sobre la instancia a la cual se debe dirigir el tráfico del usuario. Esta estrategia se traduce en una experiencia más coherente para el usuario, ya que mantiene la conexión con la misma instancia, facilitando la persistencia de datos y la continuidad en la interacción con la aplicación.


**¿Cuáles serían algunos casos de uso?**

La configuración de Sticky Sessions se torna imprescindible en escenarios específicos, como el comercio electrónico, donde la consistencia en la experiencia del usuario es crucial. Imaginemos un usuario que ha avanzado en su proceso de compra, llenando su carrito con productos. En una situación convencional, si el usuario actualiza la página o realiza una nueva petición, podría ser dirigido a una instancia diferente del servidor, perdiendo así la información del carrito de compras previamente configurado. No obstante, con la configuración de Sticky Sessions habilitada, durante el periodo definido, todas las peticiones del usuario se redirigirán a la misma instancia, asegurando que la información del carrito de compras se mantenga intacta. Este nivel de persistencia es fundamental para ofrecer una experiencia de compra fluida y sin interrupciones, incluso en situaciones donde el usuario realiza acciones adicionales o actualizaciones en la interfaz. En resumen, la funcionalidad de Sticky Sessions se convierte en un aliado estratégico para preservar la continuidad y consistencia en el proceso de compra en línea.

**Laboratorio de práctica: Configuración de Sticky Sessions en AWS ALB**

En este laboratorio, guiaremos paso a paso la creación de una pequeña infraestructura en AWS para poner a prueba la funcionalidad de Sticky Sessions en un Application Load Balancer (ALB).

Inicia sesion en la consola de AWS yo eligire la region de Virginia para este taller,ubicate en el servicio EC2 desde alli podras desarrollar todo lo necesario.

**Tarea 1** Comenzaremos creando un grupo de seguridad SG que permita tráfico de entrada HTTP, ubícate en la columna izquierda en la sección de redes y seguridad y veras la opción grupos de seguridad.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3uasfdth9i0vhaivy00c.png)


- Asigna el nombre SG-ALB-MyApp al grupo de seguridad. Agrega una descripción opcional para mayor claridad.

- En la opción "VPC", puedes dejar la VPC predeterminada para efectos de esta práctica.

- Selecciona "Agregar regla de entrada". En la sección "Tipo", elige HTTP. En "Origen o Fuente", selecciona Anywhere IPv4 para permitir el tráfico de entrada desde cualquier lugar.

- Haz clic en "Crear grupo de seguridad" para finalizar la creación del grupo.


**Tarea 2** Crearemos un par de instancias que luego incluiremos en el grupo destino al cual apuntara nuestro ALB, así que estando en el servicio  EC2 en la consola ubícate en la columna izquierda en la opción instancia y luego selecciona lanzar instancia.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqgeztzgiji6yzdnlwul.png)

- Comencemos con la configuración de nuestra instancia, esta instancia la llamare **instance-01** y utilizare la AMI de Amazon Linux que será el S.O de la instancia.

- En tipo de instancia eligiremos la t2.micro que es más que suficiente para completar esta actividad.

- En par de claves, elegiremos la opción proceder sin par de claves, ya que para efectos de este taller no es necesario.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hkyfrc780xz1pt7jo1c3.png)

- Nos detendremos en **Configuración de redes** y le daremos a la opción editar, donde seguiremos usando la VPC por default de AWS, en subnet elegiremos la zona de disponibilidad us-east-1a que será la ubicación donde estará nuestra instancia, la asignación de dirección ip publica también la dejaremos habilitada y en grupos de seguridad seleccionaremos uno existente que sera el grupo de seguridad que creamos en el inicio y llamamos SG-ALB-MyApp.

- Ahora iremos hasta detalles avanzados donde colocaremos estas pequeñas lineas de codigo que sera una configuracion inicial con la que se lanzara la instancia justamente en el apartado **User Data**

```
#!/bin/bash
sudo su
yum update -y
yum install httpd -y
echo "<h1>Hola mundo desde instance-01 $(hostname -f)</h1>" > /var/www/html/index.html
systemctl start httpd
systemctl enable http
```
Y procedemos a lanzar nuestra primera instancia.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tfdy4aw9e9ob2180kl0d.png)

- Lanza la segunda instancia siguiendo los mismos pasos asignandole  el nombre instance-02 y en el script de user data recuerda tambien colocarle ese nombre que nos servira para diferencia cuando nuestra peticion se dirigida a una instancia u otra por el ALB

```
#!/bin/bash
sudo su
yum update -y
yum install httpd -y
echo "<h1>Hola mundo desde instance-02 $(hostname -f)</h1>" > /var/www/html/index.html
systemctl start httpd
systemctl enable http
```

**Tarea 3** Crearemos nuestro grupo destino el cual estara compuesto por las instancias creadas anteriormente:

- Desde la seccion de EC2 en la columna izquierda nos ubicamos en el apartado de balanceadores de carga y eligiremos Grupos de destino y le damos crear.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d408nbqn9kw5mmglzt27.png)

- En la primera sección, no es mucho lo que haremos. El tipo de grupo objetivo será de tipo instancia. Asignaremos un nombre a nuestro grupo objetivo; podría ser TG-MyApp. El resto de esta sección puede quedar con los valores predeterminados, y pulsamos "Siguiente".

- Para registrar objetivos en nuestro grupo, veremos un listado donde aparecerán nuestras instancias, las cuales debemos seleccionar y darle al botón de "Incluir como pendiente".


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1lt3tmvo2ul30bpw0ytg.png)

- En este punto ya veremos el listado de las instancias que hacen parte de nuestro grupo objetivo y procedemos a darle "Crear grupo objetivo".


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uanaud2wc5z3s3bt1tt4.png)

**Tarea 4** Llego el momento de crear y configurar nuestro Application Load Balancer ALB.

- Seguimos dentro del servicio EC2 en nuestra consola, columna izquierda, seccion Balanceadores de carga y **Create Load Balancer**

- En el siguiente paso deberemos elegir el tipo de Balanceador de carga ya que en este momento hay 3 tipos, como lo hemos mencionado en todo el tutorial crearemos un ALB asi que esa es la opcion a elegir, dale al boton "Crear".

- Asignamos un nombre a nuestro balanceador de carga, ALB-MyApp, lo cual es apropiado para este ejemplo. En el esquema, seleccionamos "Internet-facing", lo que significa que está expuesto a Internet y puede recibir solicitudes a través de Internet y en direcciones IP, Elegimos "IPv4"


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/07uwhjqbcro4xyq8x8iu.png)


- En el apartado de redes, dejamos la VPC por defecto, ya que es la que estamos utilizando. Debemos elegir al menos dos zonas de disponibilidad a las cuales nuestro ALB podrá redirigir tráfico. Esto brinda alta disponibilidad en infraestructuras, en caso de que deseemos tener nuestra aplicación en varias zonas de disponibilidad. En este caso, seleccioné us-east-1a y us-east-1b. Recuerda que nuestras instancias las creamos en us-east-1a, es decir, que esta debe ser una de las zonas de disponibilidad a las cuales debe apuntar nuestro ALB.

- En Grupos de seguridad elegiremos nuestro grupo de seguridad SG-ALB-MyApp

- En el apartado de Listeners, vamos a seleccionar nuestro grupo objetivo TG-MyApp. Recordemos que este grupo objetivo es el que recibirá el tráfico distribuido por nuestro ALB, y dicho grupo objetivo está compuesto por nuestras dos instancias.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g4z2w8zevho1s2apoalq.png)

- Al final de la seccion podremos ver un resumen y crear nuestro ALB.


**Llego el momento de hacer pruebas...**
Con todos nuestros recursos en pleno funcionamiento, es hora de iniciar las pruebas y observar el rendimiento de nuestra infraestructura.

- Seleccionemos nuestro ALB previamente creado y, en la sección de detalles, copiemos su DNS name y peguémoslo en el navegador.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qn9b4yz0cl3xfdb94qti.png)

- En este punto, ya visualizaremos nuestra aplicación web. Si enviamos peticiones en reiteradas oportunidades mediante el botón de "Refresh" en el navegador, observaremos cómo nuestro balanceador de carga direcciona tráfico a ambas instancias, las cuales identificamos en el script que colocamos en user data al momento de lanzarlas.

**Habilitar la funcionalidad de Sticky Session**
En esta tarea, habilitaremos la funcionalidad de Sticky Session editando los atributos de nuestro grupo de destino. Esto asegura que las solicitudes futuras del mismo cliente siempre se redirijan a la misma instancia dentro de una ventana de tiempo específica, manteniendo la consistencia de datos y proporcionando una experiencia de usuario óptima.

- Para comenzar nos ubicamos en la seccion balanceadores de carga de la columna izquierda, seleccionamos grupo de destino, seleccionamos nuestro TG-MyApp, en la parte inferior seleccionamos la pestaña atributos y le damos al boton "Editar".

- Ahora, nos dirigimos a la parte inferior y activamos la funcionalidad de Sticky Sessions colocándola en modo ON. En el tipo, seleccionamos que las cookies sean generadas por el ALB. Para esta práctica, estableceremos una ventana de tiempo de 2 minutos, como se muestra en la siguiente imagen.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bsjtijhm5cwhmg5xkrgu.png)

Realizado esto, puedes utilizar nuevamente el DNS name del ALB para enviar peticiones. Al hacerlo en varias ocasiones, notarás que serás redirigido siempre a la misma instancia. Esto se debe a que el sistema detecta que eres el mismo usuario y que aún estás dentro de la ventana de tiempo establecida. Solo dirigirá el tráfico a la otra instancia después de que haya transcurrido el periodo de dos minutos que hemos establecido en este caso. Puedes ajustar la duración de estas ventanas de tiempo según tus preferencias, ya sea optando por ventanas más cortas o más largas


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ux11vqohbf3bvvhtag8.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2rwtf1q2lpmh7rc5bn4r.png)

Espero que te hayas animado a realizar este laboratorio. Recuerda que la práctica y la enseñanza consolidan el conocimiento. No olvides dejar cualquier comentario; también aprendo de ustedes. Comparte este post, a alguien le puede ser útil. Hasta la próxima.