Amazon web services Terraform AWS ALB侦听器规则路径
我正在尝试在我的ALB上设置一个侦听器规则,该规则应该将Amazon web services Terraform AWS ALB侦听器规则路径,amazon-web-services,terraform,aws-application-load-balancer,Amazon Web Services,Terraform,Aws Application Load Balancer,我正在尝试在我的ALB上设置一个侦听器规则,该规则应该将/api路径路由到指定的目标组,但由于某种原因,我似乎无法实现这一点 这是我的设置: resource "aws_lb" "main" { name = "${var.name}-alb-internal-${var.environment}" internal = false load_balancer_type = &
/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中运行)返回禁止的
。因此,如果侦听器规则起作用,我希望访问*.elb.amazonaws.com/api
将返回禁止的
。然而,我得到的结果如下:
*.elb.amazonaws.com/
->你好世界
(正确)
*.elb.amazonaws.com/api
->Hello World
(应为“禁止”,即我的api服务的根路径响应)
*.elb.amazonaws.com/api/health
->未找到
(我的api ECS服务上存在/health
路径,应为“OK”,并返回200
)
我已经成功地测试了我的ECS API服务是否可以通过不使用侦听器规则正常工作,并将侦听器默认操作直接转到我的目标组
如何使用侦听器规则成功地将任何
/api
请求转发到目标组?我看不出您的设置有任何问题。我认为所有的工作都如预期的那样:
- “/”按预期工作。这里没什么不寻常的
将默认为/api
,因此您将在观察时看到“Hello World”/
将需要您的ecs服务/api/health
,而不是/api/health
。因此,如果您的ECS没有/health
,您将得到/api/health
未找到