Eu tenho a seguinte configuração do terraform para um balanceador de carga em execução no ECS AWS para meu contêiner de aplicativo Django implantado no 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
}
Eu tenho um arquivo quase idêntico para o contêiner de frontend react. As únicas diferenças são a substituição da palavra "api" por "frontend", a porta do grupo de destino (que é 80 no caso do balanceador de carga frontend) e o caminho da verificação de integridade (apenas "/" para frontend)
Quando implanto apenas a API, normalmente consigo acessar o aplicativo no navegador. No entanto, quando adiciono o balanceador de carga do frontend, não consigo acessar o frontend no navegador (erro "503 Serviço temporariamente indisponível"). O aplicativo Django continuou funcionando, mas depois de um tempo também caiu.
Olho para a UI do ECS e noto que o cluster, a tarefa e os contêineres estão funcionando sem problemas. Mas continuo recebendo erros nas verificações de saúde. Acho que esse erro provavelmente está relacionado ao mapeamento de portas. Mas os mapeamentos são consistentes com odefinições de contêinerarquivo.
Qual é a possível razão para isso?