【发布时间】:2016-11-07 11:05:06
【问题描述】:
我正在构建一个 CloudFormation 堆栈。我有
- ECS 容器中的 Web 应用程序,其中
PortMappings用于ContainerPorts 9000 和 9002,映射到HostPorts 80 和 443,并且 - 一个应用程序负载平衡器 (
AWS::ElasticLoadBalancingV2::LoadBalancer),带有Listeners 和TargetGroups,用于端口 80 上的 HTTP 和端口 443 上的 HTTPS
当我定义Service 时,我只能指定一个负载均衡器元素;尽管LoadBalancers 是复数形式,但文档说只允许使用一个负载均衡器,并且指定两个负载均衡器元素不起作用。那么,如何映射两个端口呢?
这是我的 CloudFormation JSON 的服务部分,只有 HTTPS 部分,它可以工作。它可以扩展为将 HTTP 路由到同一个容器吗?如果没有,最好的解决方案是什么?
"Service": {
"Type": "AWS::ECS::Service",
"DependsOn": ["AutoScalingGroup", "HTTPSListener"],
"Properties": {
"Cluster": { "Ref": "Cluster" },
"DesiredCount": { "Ref": "InstanceCount" },
"LoadBalancers": [
{
"TargetGroupArn": { "Ref": "HTTPSTargetGroup" },
"ContainerName": "nginx",
"ContainerPort": "9002"
}
],
"Role": { "Ref": "ServiceRole" },
"TaskDefinition": { "Ref": "TaskDefinition" }
}
}
CloudFormation 解决方案是理想的,但 API 解决方案也很重要。
我可以为 HTTP 创建第二个 Service,带有单独的负载平衡器和容器实例,但这既不简单也不经济。
【问题讨论】:
-
您是否仅将端口 80 用于重定向到 HTTPS?
-
到目前为止,是的,所以在 CloudFormation 或 AWS API 中进行重定向的方法会很有趣。不过,最好将重定向保留在容器中,因为容器在其他上下文中使用。
标签: amazon-web-services amazon-cloudformation elastic-load-balancer amazon-ecs