Tengo la siguiente configuración de terraform para un balanceador de carga que se ejecuta en ECS AWS para mi contenedor de aplicaciones Django implementado en ECS:
resource "aws_lb" "api" {
name = "${local.prefix}-api"
load_balancer_type = "application"
subnets = [
aws_subnet.public_a.id,
aws_subnet.public_b.id
]
security_groups = [aws_security_group.lb_api.id]
tags = local.common_tags
}
resource "aws_lb_target_group" "api" {
name = "${local.prefix}-api"
protocol = "HTTP"
vpc_id = aws_vpc.main.id
target_type = "ip"
port = 8000
health_check {
path = "/admin/login/"
}
}
resource "aws_lb_listener" "api" {
load_balancer_arn = aws_lb.api.arn
port = 80
protocol = "HTTP"
default_action {
type = "redirect"
redirect {
port = "443"
protocol = "HTTPS"
status_code = "HTTP_301"
}
}
}
resource "aws_lb_listener" "api_https" {
load_balancer_arn = aws_lb.api.arn
port = 443
protocol = "HTTPS"
certificate_arn = aws_acm_certificate_validation.cert.certificate_arn
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.api.arn
}
}
resource "aws_security_group" "lb_api" {
description = "Allow access to Application Load Balancer"
name = "${local.prefix}-lb-api"
vpc_id = aws_vpc.main.id
ingress {
protocol = "tcp"
from_port = 80
to_port = 80
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
protocol = "tcp"
from_port = 443
to_port = 443
cidr_blocks = ["0.0.0.0/0"]
}
egress {
protocol = "tcp"
from_port = 8000
to_port = 8000
cidr_blocks = ["0.0.0.0/0"]
}
tags = local.common_tags
}
Tengo un archivo casi idéntico para el contenedor frontend de reacción. Las únicas diferencias son el reemplazo de la palabra "api" por "frontend", el puerto del grupo objetivo (que es 80 en el caso del balanceador de carga de frontend) y la ruta de verificación de estado (solo "/" para frontend)
Cuando implemento solo la API, normalmente puedo acceder a la aplicación en el navegador. Sin embargo, cuando agrego el balanceador de carga de la interfaz, no puedo acceder a la interfaz en el navegador (error "Servicio 503 no disponible temporalmente"). La aplicación Django siguió funcionando pero después de un tiempo también dejó de funcionar.
Miro la UI de ECS y noto que el cluster, la tarea y los contenedores se están ejecutando sin problemas. Pero sigo recibiendo errores en los controles de salud. Creo que este error probablemente esté relacionado con la asignación de puertos. Pero las asignaciones son consistentes con ladefiniciones de contenedoresarchivo.
¿Cuál es la posible razón de esto?