Как использовать отдельные балансировщики нагрузки для фронтенда и бэкенда в ECS?

Как использовать отдельные балансировщики нагрузки для фронтенда и бэкенда в ECS?

У меня есть следующая конфигурация terraform для балансировщика нагрузки, работающего в ECS AWS для моего контейнера приложения django, развернутого в 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
}

У меня есть почти идентичный файл для контейнера React Frontend. Единственные отличия — замена слова "api" на "frontend", порт целевой группы (который равен 80 в случае балансировщика нагрузки Frontend) и путь проверки работоспособности (просто "/" для Frontend)

Когда я развертываю только API, я могу нормально получить доступ к приложению в браузере. Однако, когда я добавляю frontend load balancer, я не могу получить доступ к frontend в браузере (ошибка "503 Service Temporarily Unavailable"). Приложение django продолжало работать, но через некоторое время оно также перестало работать.

Я смотрю на ECS UI и замечаю, что кластер, задача и контейнеры работают без проблем. Но я продолжаю получать ошибки при проверке работоспособности. Я думаю, что эта ошибка, вероятно, связана с отображением портов. Но отображения соответствуютопределения контейнеровфайл.

Какова возможная причина этого?

Связанный контент