ECS에서 프런트엔드와 백엔드에 대해 분리된 로드 밸런서를 어떻게 사용합니까?

ECS에서 프런트엔드와 백엔드에 대해 분리된 로드 밸런서를 어떻게 사용합니까?

ECS에 배포된 django 앱 컨테이너에 대해 ECS AWS에서 실행되는 로드 밸런서에 대해 다음과 같은 terraform 구성이 있습니다.

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
}

반응 프론트엔드 컨테이너와 거의 동일한 파일이 있습니다. 유일한 차이점은 "프런트엔드"를 "api"로 대체한 것, 대상 그룹 포트(프런트엔드 로드 밸런서의 경우 80) 및 상태 확인 경로(프런트엔드의 경우 "/"만)입니다.

API만 배포하면 일반적으로 브라우저에서 애플리케이션에 액세스할 수 있습니다. 그러나 프런트엔드 로드 밸런서를 추가하면 브라우저에서 프런트엔드에 액세스할 수 없습니다(오류 "503 서비스를 일시적으로 사용할 수 없음"). django 애플리케이션은 계속 작동했지만 잠시 후 다운되었습니다.

ECS UI를 보면 클러스터, 작업, 컨테이너가 문제 없이 실행되고 있는 것을 알 수 있습니다. 그런데 상태 확인에서 계속 오류가 발생합니다. 이 오류는 아마도 포트 매핑과 관련이 있는 것 같습니다. 그러나 매핑은 다음과 일치합니다.컨테이너 정의파일.

이에 대한 가능한 이유는 무엇입니까?

관련 정보