У меня есть следующая конфигурация 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 и замечаю, что кластер, задача и контейнеры работают без проблем. Но я продолжаю получать ошибки при проверке работоспособности. Я думаю, что эта ошибка, вероятно, связана с отображением портов. Но отображения соответствуютопределения контейнеровфайл.
Какова возможная причина этого?