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
}
私は React フロントエンド コンテナ用にほぼ同一のファイルを持っています。唯一の違いは、単語「api」が「frontend」に置き換えられていること、ターゲット グループ ポート (フロントエンド ロード バランサの場合は 80)、ヘルス チェック パス (フロントエンドの場合は「/」のみ) です。
API のみをデプロイすると、ブラウザでアプリケーションに正常にアクセスできます。ただし、フロントエンド ロード バランサを追加すると、ブラウザでフロントエンドにアクセスできなくなります (エラー「503 サービスは一時的に利用できません」)。Django アプリケーションは動作し続けましたが、しばらくするとダウンしました。
ECS UIを見ると、クラスター、タスク、コンテナは問題なく動作していることがわかります。しかし、ヘルスチェックでエラーが発生し続けます。このエラーはおそらくポートマッピングに関連していると思います。しかし、マッピングはコンテナ定義ファイル。
考えられる理由は何でしょうか?