ECS Fargate /单个ALB /多个Docker容器

时间:2019-08-27 14:59:24

标签: docker terraform terraform-provider-aws aws-fargate

有没有人举过一个例子,说明如何使用单个应用程序负载平衡器将主机头请求转发到两个不同的Docker容器来构建ECS集群。

我希望有一个ALB用于运行我的角度站点以及a.net Web服务的单个ESC群集。最终,我的目标是使用terraform编写脚本。

1 个答案:

答案 0 :(得分:1)

在不了解所有信息的情况下,我认为您正在寻找基于路径的路由,或者甚至更好的基于主机的路由。

Terraform

每个主机/路径都需要一个 aws_lb_listener_rule (负载均衡器侦听器规则)。 每个ECS服务都需要一个 aws_alb_target_group ,并在资源aws_lb_listener_rule中引用正确的目标组。

常规

侦听器规则
  

在开始使用Application Load Balancer之前,必须添加一个或多个侦听器。侦听器是使用您配置的协议和端口检查连接请求的过程。您为侦听器定义的规则决定了负载均衡器如何将请求路由到一个或多个目标组中的目标。 docs

在您的应用程序负载均衡器中使用基于路径的路由

https://docs.aws.amazon.com/en_us/elasticloadbalancing/latest/application/tutorial-load-balancer-routing.html

示例

基于主机的侦听器规则

resource "aws_lb_listener_rule" "host_based_routing" {
  listener_arn = aws_lb_listener.front_end.arn
  priority     = 99

  action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.static.arn
  }

  condition {
    field  = "host-header"
    values = ["my-service.*.terraform.io"]
  }
}

在条件块中定义必须发送请求的主机或模式(以下示例)。

基于路径的侦听器规则

resource "aws_lb_listener_rule" "static" {
  listener_arn = aws_lb_listener.front_end.arn
  priority     = 100

  action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.static.arn
  }

  condition {
    field  = "path-pattern"
    values = ["/static/*"]
  }
}

目标群体

resource "aws_alb_target_group" "alb_target_group" {
  name                 = "example-target-group"
  protocol             = "HTTP"
  port                 = var.exposed_port
  vpc_id               = var.vpc_id
  deregistration_delay = 30
  health_check {
    path    = var.service_health_check_path
    matcher = "200-399"
  }
}

https://www.terraform.io/docs/providers/aws/r/lb_listener_rule.html https://www.terraform.io/docs/providers/aws/r/lb_target_group.html