Saltar a contenido

Monitorización y Escalado

Monitorización

Al operar en la nube, es importante llevar un seguimiento de las actividades, porque probablemente haya un coste asociado a cada una de ellas. AWS ayuda a monitorizar, registrar e informar sobre el uso de sus servicios proporcionando herramientas para hacerlo.

Así pues, AWS ofrece los siguientes servicios relacionados con la monitorización:

  • Amazon CloudTrail: Servicio que registra cada acción que se lleva a cabo en la cuenta de AWS por motivos de seguridad. Esto significa que CloudTrail registra cada vez que alguien carga datos, ejecuta un código, crea una instancia de EC2 o realiza cualquier otra acción.
  • Amazon Cloudwatch: Servicio de monitorización en tiempo real de los recursos de AWS y las aplicaciones que ejecutamos en AWS. CloudTrail registra actividades, mientras que CloudWatch las monitoriza. Así pues, CloudWatch vigila que los servicios cloud se ejecutan sin problema y ayuda a no utilizar ni más ni menos recursos de lo esperado, lo que es importante para el seguimiento del presupuesto. Permite:
    • Recopilar y hacer un seguimiento de las métricas estándar y personalizadas
    • Establecer alarmas para enviar notificaciones automáticas a SNS o efectuar acciones de AutoScaling EC2 en función del valor de las métricas obtenidas.
  • AWS Config: Servicio que permite analizar, auditar y evaluar las configuraciones de los recursos de AWS. Monitoriza y registra de manera continua las configuraciones de recursos de AWS y permite automatizar la evaluación de las configuraciones registradas respecto a las deseadas.
  • Amazon SNS (Amazon Simple Notification Service): herramienta que permite enviar textos, correos electrónicos y mensajes a otros servicios en la nube y enviar notificaciones al cliente de varias formas desde la nube.

Hola Cloudwatch

En el siguiente ejemplo vamos a crear una alarma de Cloudwatch para enviar una notificación cuando nuestra cuenta haya gastado una cierta cantidad de dinero. La alarma envía un mensaje a Amazon SNS para posteriormente enviar un correo electrónico.

El primer paso es crear y subscribirse a un tema (topic) SNS. Un tema actúa como un canal de comunicación donde se recibes los mensajes de las alertas y eventos.

Así pues, entramos al servicio SNS (Simple Notification Service) y creamos un tema al que llamaremos AlertaSaldo.

Cloudwatch - Creación del tema

A continuación, vamos a crear una suscripción a ese tema para que cuando se recibe una mensaje, lo redirijamos a nuestro teléfono o correo electrónico.

Para ello, dentro de la sección de suscripciones, crearemos una suscripción. En el ARN pondremos el tema AlertaSaldo que acabamos de crear, y en el protocolo, vamos a seleccionar Correo electrónico. Finalmente, en el punto de enlace, definimos el email que recibirá la alerta. En este momento, Amazon enviará un email a la cuenta que hayamos indicado para confirmar los datos.

Cloudwatch - Creación de la subscripción

El siguiente paso es crear la alarma en Cloudwatch. Para ello, una vez dentro de Cloudwatch, dentro de la opción de Alarmas, al crear una nueva, tendremos que elegir la métrica, que en nuestro caso seleccionaremos Facturación -> Cargo total estimado. En la siguiente pantalla, en la sección de Condiciones, elegimos el tipo de límite estático, e indicamos la condición que queremos que se active cuando es superior a 100.

Cloudwatch - Condiciones de la alarma

En la sección de Notificación, tras elegir en modo alarma seleccionamos el tema SNS existente (en nuestro caso AlertaSaldo).

Cloudwatch - Notificaciones de la alarma

Finalmente, le asignamos el nombre de AlertaSaldoAlarma y tras ver un resumen de todo los configurado, creamos la alarma.

De esta manera, cuando se supere el gasto de 100$, automáticamente nos enviará un email a la dirección que le hemos configurado.

Escalado y Balanceo de carga

Elastic Load Balancing (ELB) distribuye automáticamente el tráfico entrante de las aplicaciones entre varias instancias de Amazon EC2. Además, mejora la tolerancia a errores en las aplicaciones, ya que proporciona de forma constante la capacidad de balanceo de carga necesaria para dirigir el tráfico de estas.

Admite tres tipos de balanceadores de carga:

  • balanceador de carga de aplicaciones: balanceo basado en aplicaciones con tráfico HTTP y HTTPS, ofreciendo enrutamiento avanzado. Opera en la capa de aplicación.
  • balanceador de carga de red: para rendimiento ultra (millones de peticiones por segundo), opera a nivel de la capa de conexión (protocolos TCP, UDP, TLS)
  • balanceador de carga gateway, para aplicaciones de terceros que soportan el protocolo Geneve. Opera a nivel de capa de red.

Un servicio complementario es AWS Auto Scaling, el cual permite mantener la disponibilidad de las aplicaciones y aumentar o reducir automáticamente la capacidad de Amazon EC2 según las condiciones que se definan. Podemos utilizar Auto Scaling para asegurarnos que se ejecutan la cantidad deseada de instancias EC2, agregando o eliminando instancias de forma automática según las cargas de trabajo.

Mediante Auto Scaling, también se puede aumentar automáticamente la cantidad de instancias de Amazon EC2 durante los picos de demanda para mantener el rendimiento y reducir la capacidad durante los períodos de baja demanda con el objeto de minimizar los costes. Otro caso de uso es en las aplicaciones con patrones de demanda estables (escalado predictivo) o para aquellas cuyo uso varía cada hora, día o semana.

Para ello, se crea un grupo Auto Scaling, el cual es una colección de instancias EC2, indicando la cantidad mínima y máxima de instancias a desplegar.

Si queremos tener un escalado dinámico podemos usar conjuntamente EC2 AutoScaling, Amazon CloudWatch y Elastic Load Balancing.

Hola Balanceador

Para este ejemplo, vamos a crear dos instancias EC2 que estén en la misma VPC, y vamos a utilizar un balanceador de carga para que tras cada petición, responda una instancia diferente.

El primer paso será crear un grupo de seguridad que van a compartir nuestras instancias. En nuestro caso, lo hemos llamado Servidor Web y la única regla de entrada que tiene permite todo el tráfico HTTP desde cualquier IP. Otra posibilidad es utilizar el grupo de seguridad iabd-front que creamos en sesiones anteriores.

A continuación, vamos a crear y lanzar la primera instancia. Para ello, en EC2 creamos una instancia del tipo que queramos, con el AMI de Amazon y en el campo de Datos de usuario, vamos a indicarle la siguiente información para que inicie un servidor web con una página estática:

#!/bin/bash 
yum update -y
yum -y install httpd 
systemctl enable httpd 
systemctl start httpd
echo '<html><h1>Hola Severo! Este es el servidor 1.</h1></html>' > /var/www/html/index.html

A continuación le añadimos una etiqueta Nombre con el valor Servidor Web 1 y seleccionamos el grupo de seguridad que habíamos creado previamente. Finalmente, la lanzamos (ya sea con nuestro par de claves o sin indicar ninguno).

Ahora deberíamos poder acceder tanto a la IP pública como al DNS con la información que tengamos de la instancia. Ten en cuenta que al pegar la dirección en el navegador, estás accediendo por el protocolo HTTP y no HTTPS.

El siguiente paso es repetir los mismos pasos, creando una nueva instancia pero cambiando tanto la etiqueta como el script de Datos de usuario para que muestre el número 2.

Antes de crear el balanceador, debemos comprobar las zonas de disponibilidad de nuestras instancias. En mi caso, ambas están en us-east-1d. Así pues, el siguiente paso es crear el balanceador de carga. Para ello, desde el panel lateral, seleccionamos la opción de Balanceadores de carga y pulsamos sobre Crear balanceador de carga de tipo aplicación, y tras introducir el nombre indicamos las zonas de disponibilidad de nuestras instancias y configuraremos el mismo grupo de seguridad que hemos definido antes para tener abiertas las conexiones HTTP.

Más abajo, en la sección de Listener and routing, vamos a crear un grupo de destino, pulsando sobre el enlace de create target group del listener del protocolo HTTP del puerto 80.

Se nos abrirá una nueva pestaña, donde tras indicarle el tipo (en nuestro caso básico) y asignarle un nombre al grupo de destino nuevo, en el check de salud, indicaremos el recurso /index.html. En la siguiente pantalla seleccionamos las dos instancias de servidor web:

Elastic Load Balancing - Grupos de destino

Una vez creado, volvemos a la pestaña anterior, y ya podemos configurar en el listener el grupo de destino recién creado:

Elastic Load Balancing - Listener

Solo nos queda finalizar la creación, y tras un par de minutos, cuando en estado aparezca Activo, podemos copiar el DNS en otra pestaña del navegador, y acceder varias veces para comprobar como cada vez responde un servidor web diferente.

Actividades

  1. Realizar el módulo 10 (Monitoreo y escalado automático) del curso ACF de AWS.
  2. Realiza el ejemplo de Cloudwatch que tienes más arriba pero con una alerta al superar uno o dos euros (depende de tu saldo actual) y adjunta una captura de pantalla tanto de la alarma creada, como del email recibido por parte de AWS.