amazon-cloudformation – ECS和应用程序负载均衡器

我一直在寻找有关使用ECS和ELB(应用程序负载均衡器)创建堆栈的云形成的一些信息,但无法这样做.

我创建了两个Docker镜像,每个镜像都包含一个侦听端口3000和4000的Node.js微服务.如何使用ECS和ELB创建我的堆栈?我假设应用程序负载均衡器可以配置为侦听这两个端口?

示例Cloud Formation模板确实会有所帮助.

最佳答案
Application Load Balancer可用于在服务中的ECS任务中加载流量. Application Load Balancer有两个很酷的功能,你可以利用;动态端口映射(主机上的端口由ECS / Docker自动分配)允许您在单个EC2实例上运行同一服务的多个任务和基于路径的路由,允许您根据模式中的模式将传入请求路由到不同的服务网址路径.

要连接它,首先需要像这样定义一个TargetGroup

"TargetGroupService1" : {
  "Type" : "AWS::ElasticLoadBalancingV2::TargetGroup",
  "Properties" : {
    "Port": 10,
    "Protocol": "HTTP",
    "HealthCheckPath": "/service1",
    "VpcId": {"Ref" : "Vpc"}
  }
}

如果使用动态端口映射,则目标组中指定的端口无关紧要,因为它将被每个目标的动态分配端口覆盖.

接下来,定义一个ListenerRule,定义应路由到TargetGroup的路径:

"ListenerRuleService1": {
  "Type" : "AWS::ElasticLoadBalancingV2::ListenerRule",
  "Properties" : {
    "Actions" : [
      {
        "TargetGroupArn" : {"Ref": "TargetGroupService1"},
        "Type" : "forward"
      }
    ],
    "Conditions" : [
      {
        "Field" : "path-pattern",
        "Values" : [ "/service1" ]
      }
    ],
    "ListenerArn" : {"Ref": "Listener"},
    "Priority" : 1
  }
}

最后,您将ECS服务与TargetGroup相关联.这使ECS能够自动将任务容器注册为目标组中的目标(使用您在TaskDefinition中配置的主机端口)

"Service1": {
  "Type" : "AWS::ECS::Service",
  "DependsOn": [
    "ListenerRuleService1"
  ],
  "Properties" : {
    "Cluster" : { "Ref" : "ClusterName" },
    "DesiredCount" : 2,
    "Role" : "/ecsServiceRole",
    "TaskDefinition" : {"Ref":"Task1"},
    "LoadBalancers": [
      {
        "ContainerName": "Task1",
        "ContainerPort": "8080",
        "TargetGroupArn" : { "Ref" : "TargetGroupService1" }
      }
    ]
  }
}  

您可以在我撰写的博文中找到更多详细信息,请参阅Amazon ECS and Application Load Balancer

转载注明原文:amazon-cloudformation – ECS和应用程序负载均衡器 - 代码日志