【发布时间】:2020-11-23 07:48:21
【问题描述】:
我正在尝试在我的 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”,以便区分。
执行GET / 时,我的API 服务(在ECS 中运行)返回Forbidden。因此,如果侦听器规则有效,我预计访问*.elb.amazonaws.com/api 将返回Forbidden。但是,这些是我得到的结果:
*.elb.amazonaws.com/ -> Hello World(正确)
*.elb.amazonaws.com/api -> Hello World(期待“Forbidden”,即我的API服务根路径的响应)
*.elb.amazonaws.com/api/health -> Not Found(期待“OK”,/health 路径存在于我的 API ECS 服务上并返回 200)
我已通过不使用监听器规则并让监听器默认操作直接转到我的目标组,成功测试了我的 ECS API 服务正常工作。
如何使用我的侦听器规则将任何 /api 请求成功转发到我的目标组?
【问题讨论】:
标签: amazon-web-services terraform aws-application-load-balancer