向服务注册多个目标组 - Amazon Elastic Container Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

向服务注册多个目标组

当您在服务定义中指定多个目标组时,Amazon ECS 服务可以为来自多个负载平衡器的流量提供服务并公开多个负载平衡端口。

要创建指定多个目标群体的服务,您必须使用 Amazon ECS API AWS CLI、软件开发工具包或 AWS CloudFormation 模板创建该服务。在创建服务后,您可以使用 AWS 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 参数或 AWS 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 } ]