Ich habe die folgende Terraform-Konfiguration für einen in ECS AWS ausgeführten Load Balancer für meinen in ECS bereitgestellten Django-App-Container:
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
}
Ich habe eine fast identische Datei für den React-Frontend-Container. Die einzigen Unterschiede sind der Ersatz des Wortes „API“ durch „Frontend“, der Zielgruppenport (der im Fall des Frontend-Load Balancers 80 ist) und der Integritätsprüfpfad (nur „/“ für Frontend).
Wenn ich nur die API bereitstelle, kann ich normalerweise im Browser auf die Anwendung zugreifen. Wenn ich jedoch den Frontend-Load Balancer hinzufüge, kann ich im Browser nicht auf das Frontend zugreifen (Fehler „503 Service Temporarily Unavailable“). Die Django-Anwendung funktionierte zwar weiterhin, fiel aber nach einer Weile ebenfalls aus.
Ich schaue mir die ECS-Benutzeroberfläche an und stelle fest, dass der Cluster, die Aufgabe und die Container ohne Probleme laufen. Aber ich erhalte immer wieder Fehler bei den Integritätsprüfungen. Ich denke, dieser Fehler hängt wahrscheinlich mit der Portzuordnung zusammen. Aber die Zuordnungen stimmen mit denContainerdefinitionenDatei.
Was ist der mögliche Grund dafür?