Terraform AWS Путь правила прослушивателя ALB - PullRequest
1 голос
/ 03 августа 2020

Я пытаюсь настроить правило прослушивателя на моем ALB, которое должно направлять путь /api в указанную целевую группу, но по какой-то причине я не могу заставить это работать.

Это моя настройка:

resource "aws_lb" "main" {
  name               = "${var.name}-alb-internal-${var.environment}"
  internal           = false
  load_balancer_type = "application"
  security_groups    = var.alb_security_groups
  subnets            = var.subnets.*.id

  tags = {
    Name        = "${var.name}-alb-${var.environment}"
    Environment = var.environment
  }
}

resource "aws_alb_target_group" "api" {
  name        = "${var.name}-tg-api-${var.environment}"
  port        = 8080
  protocol    = "HTTP"
  vpc_id      = var.vpc_id
  target_type = "ip"

  health_check {
    healthy_threshold   = "3"
    interval            = "30"
    protocol            = "HTTP"
    matcher             = "200"
    timeout             = "3"
    path                = var.health_check_path
    unhealthy_threshold = "2"
  }

  depends_on = [
    aws_lb.main,
  ]

  tags = {
    Name        = "${var.name}-tg-api-${var.environment}"
    Environment = var.environment
  }
}

resource "aws_alb_listener" "api" {
  load_balancer_arn = aws_lb.main.id
  port              = 80
  protocol          = "HTTP"

  default_action {
    type            = "fixed-response"

    fixed_response {
      status_code   = "404"
      content_type  = "text/plain"
      message_body  = "Hello world"
    }
  }
}

resource "aws_alb_listener_rule" "api_rule" {
  listener_arn = aws_alb_listener.api.arn
  priority     = 100

  action {
    type             = "forward"
    target_group_arn = aws_alb_target_group.api.arn
  }

  condition {
    path_pattern {
      values = ["/api/*"]
    }
  }
}

В этой настройке я пытаюсь перенаправить все запросы, начинающиеся с /api, в мою целевую группу API. Я установил фиксированный ответ в качестве действия по умолчанию для моего слушателя, и я специально сделал тело ответа «Hello world», чтобы различать.

Моя служба API (работающая в ECS) возвращает Forbidden, когда GET / выполняется. Итак, если правило слушателя работает, я ожидаю, что посещение *.elb.amazonaws.com/api вернет Forbidden. Однако я получаю следующие результаты:

*.elb.amazonaws.com/ -> Hello World (правильно)

*.elb.amazonaws.com/api -> Hello World (ожидается «Запрещено», т. Е. ответ пути root моей службы API)

*.elb.amazonaws.com/api/health -> Not Found (ожидая «ОК», путь /health существует в моей службе API ECS и возвращает 200)

Я успешно проверил, что моя служба API ECS работает правильно, не используя правило прослушивателя и использую действие прослушивателя по умолчанию go непосредственно для моей целевой группы.

Как я могу успешно перенаправить любые /api запросов с моим правилом слушателя к моей целевой группе?

1 Ответ

1 голос
/ 03 августа 2020

Я не вижу ничего плохого в вашей настройке. Я думаю, что все работает, как ожидалось:

  • '/' работает должным образом. Здесь нет ничего необычного.
  • /api по умолчанию будет /, так что вы увидите «Hello World», когда вы наблюдаете.
  • /api/health потребуется на вашем сервисе ecs /api/health, а не /health. Так что, если в вашем ECS нет /api/health, вы получите Not Found.
...