У меня есть приложение, которое я развертываю на AWS на ECS, используя Terraform. Я хотел бы настроить его так, чтобы он мог выполнять проверку работоспособности через HTTP, но требовать аутентификации и выполнять все другие действия через HTTPS. Тем не менее, я понятия не имею, как это настроить, и все, что я пытаюсь, работает. В идеале, порт HTTPS должен быть 8080 (не уверен, если это возможно, если это не так, пожалуйста, сообщите; это не имеет большого значения использовать другой порт). Порт HTTP в идеале также должен быть 8080, но также может отличаться (я ничего не знаю о сети и не уверен, смогу ли я подключиться к одному и тому же порту с двумя разными протоколами для доступа к двум различным наборам конечных точек).
Вот самая последняя итерация того, что я пробовал (сокращенно, чтобы показать только те части, которые я считаю важными); Я пробовал и другие вещи, но это самое последнее:
resource "aws_ecs_service" "service" {
name = "${var.app_name}-service"
cluster = aws_ecs_cluster.main.id
task_definition = aws_ecs_task_definition.app.arn
desired_count = var.app_count
launch_type = "FARGATE"
health_check_grace_period_seconds = 240
network_configuration {
security_groups = [var.security_group_id]
subnets = var.private_subnet_ids
assign_public_ip = true
}
load_balancer {
target_group_arn = aws_alb_target_group.app.id
container_name = var.app_name
container_port = var.app_port
}
depends_on = [aws_alb_listener.listener]
}
resource "aws_alb_target_group" "app" {
name = "${var.app_name}-target-group"
port = 443
protocol = "HTTPS"
vpc_id = var.vpc_id
target_type = "ip"
health_check {
interval = "30"
protocol = "HTTPS"
matcher = "200-299"
timeout = "3"
path = var.app_health_check_path
unhealthy_threshold = "3"
}
}
resource "aws_alb_listener" "listener" {
load_balancer_arn = var.alb_arn
port = var.alb_listener_port
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-2016-08"
certificate_arn = var.ssl_cert
default_action {
type = "fixed-response"
fixed_response {
content_type = "text/plain"
message_body = "contact admin for ${var.app_name} access"
status_code = 403
}
}
}
resource "aws_lb_listener_rule" "cf_auth_listener_rule" {
listener_arn = aws_alb_listener.listener.arn
priority = 101
action {
type = "forward"
target_group_arn = aws_alb_target_group.app.arn
}
condition {
http_header {
http_header_name = <HEADER_NAME>
values = [<HEADER_VALUE>]
}
}
}
resource "aws_lb_listener_rule" "health_check_listener_rule" {
listener_arn = aws_alb_listener.listener.arn
priority = 1
action {
type = "forward"
target_group_arn = aws_alb_target_group.app.arn
}
condition {
path_pattern {
values = [var.app_health_check_path]
}
}
}
Проблема, с которой я столкнулся, заключается в том, что моя служба запускается, но затем сразу же закрывается из-за неудачной проверки работоспособности. Похоже, ALB не может связаться с конечной точкой проверки работоспособности для проверки работоспособности.