0Pricing
AWS Solutions Architect · Lección

Reglas de listener y enrutamiento basado en rutas

Escriba reglas de listener en el ALB para enrutar solicitudes a distintos grupos de destino según las cabeceras de host, los patrones de ruta o las cadenas de consulta.

Reglas de listener y enrutamiento basado en rutas es una lección gratuita de AWS Solutions Architect en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AWS Solutions Architect, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AWS Solutions Architect incluye 4 lecciones en total.

Explicación de los listeners de ALB

Un listener de ALB es un proceso que comprueba las solicitudes de conexión mediante el protocolo y el puerto que especifique (por ejemplo, HTTP en el puerto 80 o HTTPS en el puerto 443). Cada listener tiene una o más reglas que determinan adónde reenviar las solicitudes según su contenido.

Un listener debe tener una regla predeterminada (la acción general que se aplica cuando no coincide ninguna otra regla) y puede tener hasta 100 reglas adicionales. Las reglas se evalúan según el orden de prioridad (el número más bajo tiene la prioridad más alta). Cuando una solicitud coincide con la condición de una regla, se aplica la acción correspondiente y no se evalúan más reglas.

# Create an HTTP listener on port 80
aws elbv2 create-listener \
  --load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc123 \
  --protocol HTTP \
  --port 80 \
  --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/default-tg/def456

Condiciones de las reglas

Las reglas de listener hacen coincidir las solicitudes según condiciones. Puede combinar varias condiciones en una regla (todas deben coincidir para que se aplique la regla). Tipos de condición disponibles:

  • host-header: coincide con el encabezado HTTP Host (por ejemplo, api.example.com)
  • path-pattern: coincide con la ruta URL (por ejemplo, /api/*, /images/*.jpg)
  • http-header: coincide con cualquier nombre de encabezado HTTP y patrón de valor
  • http-request-method: coincide con métodos HTTP (GET, POST, DELETE, etc.)
  • query-string: coincide con pares clave-valor de la cadena de consulta
  • source-ip: coincide con rangos CIDR de IP de cliente

Enrutamiento basado en rutas

El enrutamiento basado en rutas dirige las solicitudes a distintos grupos de destinos según la ruta URL. Este es el patrón de enrutamiento más común para microservicios detrás de un único ALB. Ejemplo de reglas en un ALB:

  • La ruta es /api/* → Grupo de destinos: api-service
  • La ruta es /images/* → Grupo de destinos: image-processor
  • La ruta es /admin/* → Grupo de destinos: admin-app
  • Predeterminado → Grupo de destinos: frontend-app

Esto permite que un único ALB sirva de frontend para varios servicios independientes sin necesidad de varios balanceadores de carga, lo que reduce los costes y la complejidad del DNS.

# Create a path-based routing rule
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
  --priority 10 \
  --conditions Field=path-pattern,Values='/api/*' \
  --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789

Enrutamiento basado en hosts

El enrutamiento basado en hosts dirige las solicitudes según el encabezado HTTP Host, lo que permite servir varios nombres de dominio (hosts virtuales) desde un único ALB. Ejemplo:

  • El host es api.example.com → grupo de destinos api-service
  • El host es admin.example.com → grupo de destinos admin-app
  • El host es www.example.com → grupo de destinos frontend

Cada nombre de dominio tiene un registro CNAME o ALIAS que apunta al mismo nombre DNS del ALB, pero el ALB dirige cada solicitud al backend adecuado según el encabezado de host. El enrutamiento basado en hosts es ideal para SaaS multiinquilino o para aplicaciones monolíticas que se están dividiendo en microservicios.

# Create a host-based routing rule
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
  --priority 5 \
  --conditions '[{"Field":"host-header","HostHeaderConfig":{"Values":["api.example.com"]}}]' \
  --actions '[{"Type":"forward","TargetGroupArn":"arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789"}]'

Acciones de las reglas

Cuando coinciden las condiciones de una regla, el ALB ejecuta una de estas acciones:

  • forward: reenvía la solicitud a uno o más grupos de destinos (con pesos opcionales)
  • redirect: devuelve una redirección HTTP (301 o 302) a una URL nueva; es útil para redirigir de HTTP a HTTPS
  • fixed-response: devuelve una respuesta HTTP estática con un código de estado, un tipo de contenido y un cuerpo especificados; es útil para páginas de mantenimiento o respuestas sencillas de comprobación de estado
  • authenticate-cognito: autentica a los usuarios mediante un User Pool de Cognito antes de reenviar la solicitud
  • authenticate-oidc: autentica a los usuarios mediante cualquier proveedor de identidad compatible con OIDC
# Create a redirect rule: HTTP to HTTPS
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/http80 \
  --priority 1 \
  --conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/*"]}}]' \
  --actions '[{"Type":"redirect","RedirectConfig":{"Protocol":"HTTPS","Port":"443","StatusCode":"HTTP_301"}}]'

Patrón de redirección de HTTP a HTTPS

El patrón de regla de listener más común consiste en redirigir HTTP a HTTPS:

  1. Cree un listener HTTP en el puerto 80 con una regla: redirigir todo el tráfico (/*) a HTTPS con un código de estado 301
  2. Cree un listener HTTPS en el puerto 443 con las reglas de enrutamiento reales que apunten a los grupos de destinos

Esto garantiza que los usuarios que escriban http:// o sigan enlaces HTTP antiguos sean redirigidos de forma transparente a HTTPS sin cambios en el nivel de la aplicación. La redirección se gestiona por completo en la capa del balanceador de carga.

Acción de respuesta fija

La acción de respuesta fija devuelve una respuesta HTTP estática desde el ALB sin reenviar la solicitud a ningún destino. Utilícela para:

  • Devolver una página de mantenimiento 503 para rutas específicas durante el mantenimiento
  • Proporcionar un endpoint ligero de comprobación de estado directamente desde el ALB (devuelve 200 OK al instante sin sobrecarga del backend)
  • Bloquear rutas específicas con una respuesta 403 Forbidden

Las respuestas fijas son útiles para retirar temporalmente rutas del servicio sin modificar el código de la aplicación ni volver a implementarla, mediante el ajuste dinámico de las reglas del listener.

# Return 503 maintenance page for a specific path
aws elbv2 create-rule \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
  --priority 20 \
  --conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/checkout/*"]}}]' \
  --actions '[{"Type":"fixed-response","FixedResponseConfig":{"StatusCode":"503","ContentType":"text/html","MessageBody":"<h1>Maintenance</h1>"}}]'

Autenticación de ALB con Cognito

La acción authenticate-cognito del ALB se integra con Amazon Cognito User Pools para gestionar la autenticación de usuarios antes de reenviar las solicitudes a su aplicación. Cuando un usuario no autenticado llega a una regla de listener protegida, el ALB lo redirige a la interfaz de usuario alojada en Cognito para iniciar sesión. Después de autenticarse correctamente, el ALB establece una cookie cifrada y reenvía la solicitud con encabezados de identidad del usuario.

Esto descarga por completo la lógica de autenticación de su aplicación. Su backend recibe los encabezados X-Amzn-Oidc-Identity, X-Amzn-Oidc-Data y X-Amzn-Oidc-Access-Token con las claims del usuario autenticado.

Enrutamiento basado en cadenas de consulta y encabezados

Las reglas del listener de ALB pueden enrutar según parámetros de la cadena de consulta y encabezados HTTP, lo que permite un enrutamiento detallado de las solicitudes:

  • Enrute los clientes móviles detectando el encabezado User-Agent: *Mobile* para dirigirlos a un backend optimizado para móviles
  • Enrute las solicitudes de API premium comprobando el encabezado personalizado X-API-Tier: premium para dirigirlas a un grupo de destino más rápido
  • Enrute las variantes de una prueba A/B leyendo el parámetro de la cadena de consulta ?variant=beta

El enrutamiento basado en encabezados permite implementar indicadores de funciones y dividir el tráfico en la capa de infraestructura sin modificar el código de la aplicación.

Prioridad de las reglas y orden de evaluación

Las reglas se evalúan en orden ascendente de prioridad. Primero se evalúan los números de prioridad más bajos. Se aplica la acción de la primera regla coincidente y no se evalúan más reglas. La regla predeterminada no tiene número de prioridad y siempre se evalúa al final como regla general.

Práctica recomendada: asigne números de prioridad en incrementos de 10 (10, 20, 30...), en lugar de usar enteros consecutivos. Así deja espacio para insertar nuevas reglas entre las existentes sin tener que renumerarlas. Las reglas más específicas (por ejemplo, las que combinan ruta y encabezado de host) deben tener números más bajos (mayor prioridad) que las reglas genéricas.

# List rules for a listener (shows priorities)
aws elbv2 describe-rules \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
  --query 'Rules[*].{Priority:Priority,Conditions:Conditions[0].Field,Actions:Actions[0].Type}' \
  --output table

Reglas del listener para microservicios

Un solo ALB puede situarse delante de toda una plataforma de microservicios mediante reglas del listener. Este es un ejemplo real que combina los tres tipos de condiciones:

  • Prioridad 10: Host=api.example.com + Path=/v2/* → grupo de destino api-v2
  • Prioridad 20: Host=api.example.com + Path=/v1/* → grupo de destino api-v1
  • Prioridad 30: Host=auth.example.com → grupo de destino auth-service
  • Prioridad 40: Host=www.example.com + Path=/static/* → redirección a CloudFront
  • Predeterminada: Host=www.example.com → grupo de destino frontend

Este diseño reduce los costes al eliminar la necesidad de usar load balancers independientes para cada servicio.

Comprobación rápida

Compruebe su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) tratados en esta lección.

Resumen de la lección

En esta lección ha aprendido que: las reglas del listener enrutan las solicitudes según el host, la ruta, los encabezados, los métodos y las cadenas de consulta; las reglas se evalúan por orden de prioridad y prevalece la primera coincidencia; y las acciones incluyen el reenvío, la redirección, la respuesta fija y la autenticación de Cognito. El enrutamiento basado en rutas y hosts permite que un solo ALB se sitúe delante de varios microservicios. A continuación, exploraremos la terminación de SSL y las sesiones persistentes.

Preguntas frecuentes

¿La lección «Reglas de listener y enrutamiento basado en rutas» es gratis?

Sí — el texto completo de «Reglas de listener y enrutamiento basado en rutas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AWS Solutions Architect, actualiza a CoddyKit PRO. El curso de AWS Solutions Architect incluye 4 lecciones en total.

¿Qué aprenderé en «Reglas de listener y enrutamiento basado en rutas»?

Escriba reglas de listener en el ALB para enrutar solicitudes a distintos grupos de destino según las cabeceras de host, los patrones de ruta o las cadenas de consulta. Practicas AWS Solutions Architect con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AWS Solutions Architect?

No se requiere experiencia previa. AWS Solutions Architect en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Reglas de listener y enrutamiento basado en rutas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AWS Solutions Architect?

Sí. Cada lección de AWS Solutions Architect incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. ALB frente a NLB y GLB: cuándo utilizar cada uno
  2. Grupos de destino y comprobaciones de estado
  3. Reglas de listener y enrutamiento basado en rutas
  4. Terminación SSL y sesiones persistentes
← Volver a AWS Solutions Architect