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를 보면 클러스터, 작업, 컨테이너가 문제 없이 실행되고 있는 것을 알 수 있습니다. 그런데 상태 확인에서 계속 오류가 발생합니다. 이 오류는 아마도 포트 매핑과 관련이 있는 것 같습니다. 그러나 매핑은 다음과 일치합니다.컨테이너 정의파일.
이에 대한 가능한 이유는 무엇입니까?