将多个目标组注册到 Amazon ECS 服务
当您在服务定义中指定多个目标组时,Amazon ECS 服务可以为来自多个负载平衡器的流量提供服务并公开多个负载平衡端口。
要创建一个指定多个目标组的服务,您必须使用 Amazon ECS API、开发工具包、Amazon CLI 或 Amazon CloudFormation 模板创建该服务。在创建服务后,您可以使用 Amazon Web Services Management Console查看服务以及注册到服务的目标组。您必须使用 UpdateService
修改现有服务的负载均衡器配置。
可以使用以下格式在服务定义中指定多个目标组。有关服务定义的完整语法,请参阅服务定义模板。
"loadBalancers":[ { "targetGroupArn":"arn:aws:elasticloadbalancing:
region
:123456789012
:targetgroup/target_group_name_1/1234567890123456
", "containerName":"container_name
", "containerPort":container_port
}, { "targetGroupArn":"arn:aws:elasticloadbalancing:region
:123456789012
:targetgroup/target_group_name_2/6543210987654321
", "containerName":"container_name
", "containerPort":container_port
} ]
注意事项
在服务定义中指定多个目标组时,应注意以下事项:
-
对于使用 Application Load Balancer 或 Network Load Balancer 的服务,附加到一个服务的目标组不能超过五个。
-
仅在以下条件下,才支持在服务定义中指定多个目标组:
-
服务必须使用 Application Load Balancer 或 Network Load Balancer。
-
该服务必须使用滚动更新 (
ECS
) 部署控制器类型。
-
-
包含使用 Fargate 和 EC2 启动类型的任务的服务支持多个目标组。
-
当您创建一个指定多个目标组的服务时,必须创建 Amazon ECS 服务相关角色。通过省略 API 请求中的
role
参数或 Amazon CloudFormation 中的Role
属性来创建角色。有关更多信息,请参阅 对 Amazon ECS 使用服务相关角色。
示例服务定义
下面是一些在服务定义中指定多个目标组的示例使用案例。有关服务定义的完整语法,请参阅服务定义模板。
为内部和外部流量使用独立的负载均衡器
在以下使用案例中,服务对相同的容器和端口使用两个独立的负载均衡器,一个用于内部流量,另一个用于面向互联网的流量。
"loadBalancers":[ //Internal ELB { "targetGroupArn":"arn:aws:elasticloadbalancing:
region
:123456789012
:targetgroup/target_group_name_1/1234567890123456
", "containerName":"nginx", "containerPort":8080 }, //Internet-facing ELB { "targetGroupArn":"arn:aws:elasticloadbalancing:region
:123456789012
:targetgroup/target_group_name_2/6543210987654321
", "containerName":"nginx", "containerPort":8080 } ]
从同一容器公开多个端口
在以下使用案例中,服务使用一个负载均衡器,但从同一容器公开多个端口。例如,Jenkins 容器可能会为 Jenkins Web 接口公开端口 8080,为 API 公开端口 50000。
"loadBalancers":[ { "targetGroupArn":"arn:aws:elasticloadbalancing:
region
:123456789012
:targetgroup/target_group_name_1/1234567890123456
", "containerName":"jenkins", "containerPort":8080 }, { "targetGroupArn":"arn:aws:elasticloadbalancing:region
:123456789012
:targetgroup/target_group_name_2/6543210987654321
", "containerName":"jenkins", "containerPort":50000 } ]
从多个容器公开端口
在以下使用案例中,服务使用一个负载均衡器和两个目标组从单独的容器公开端口。
"loadBalancers":[ { "targetGroupArn":"arn:aws:elasticloadbalancing:
region
:123456789012
:targetgroup/target_group_name_1/1234567890123456
", "containerName":"webserver", "containerPort":80 }, { "targetGroupArn":"arn:aws:elasticloadbalancing:region
:123456789012
:targetgroup/target_group_name_2/6543210987654321
", "containerName":"database", "containerPort":3306 } ]