Amazon ECS 서비스에 여러 대상 그룹 등록
Amazon ECS 서비스에 여러 대상 그룹 등록
서비스 정의에 여러 대상 그룹을 지정하면 Amazon ECS 서비스가 여러 로드 밸런서의 트래픽을 제공하고 여러 로드 밸런싱된 포트를 노출할 수 있어요. 여러 대상 그룹을 지정하는 서비스를 만들려면 Amazon ECS API, SDK, AWS CLI 또는 CloudFormation 템플릿으로 서비스를 만들어야 해요. 서비스가 생성된 후에는 AWS Management Console로 서비스와 서비스에 등록된 대상 그룹을 볼 수 있어요. 기존 서비스의 로드 밸런서 구성을 수정하려면 UpdateService를 사용해야 해요.
출처: 문서
본문
서비스 정의에서 다음 형식을 사용해 여러 대상 그룹을 지정할 수 있어요. 서비스 정의의 전체 구문은 Service definition template을 참고하세요.
"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
}
]
고려 사항 (Considerations)
서비스 정의에 여러 대상 그룹을 지정할 때 다음 사항을 고려해야 해요.
- Application Load Balancer 또는 Network Load Balancer를 사용하는 서비스의 경우 서비스에 5개 이상의 대상 그룹을 연결할 수 없어요.
- 서비스 정의에 여러 대상 그룹을 지정하는 것은 다음 조건에서만 지원돼요.
- 서비스가 Application Load Balancer 또는 Network Load Balancer를 사용해야 해요.
- 서비스가 (ECS) 배포 컨트롤러 유형을 사용해야 해요. 이는 Amazon ECS 네이티브/블루 그린 배포 또는 롤링 업데이트 배포일 수 있어요.
- Fargate와 EC2 실행 유형 모두의 태스크를 포함하는 서비스에서 여러 대상 그룹 지정이 지원돼요.
- 여러 대상 그룹을 지정하는 서비스를 만들 때 Amazon ECS 서비스 연결 역할(service-linked role)을 만들어야 해요. 이 역할은 API 요청에서
role파라미터를 생략하거나 CloudFormation에서Role속성을 생략하면 만들어져요. 자세한 내용은Using service-linked roles for Amazon ECS를 참고하세요.
예제 서비스 정의 (Example service definitions)
서비스 정의에 여러 대상 그룹을 지정하는 몇 가지 예제 사용 사례는 다음과 같아요. 서비스 정의의 전체 구문은 Service definition template을 참고하세요.
내부 및 외부 트래픽용 별도 로드 밸런서
다음 사용 사례에서 서비스는 같은 컨테이너와 포트에 대해 두 개의 별도 로드 밸런서, 하나는 내부 트래픽용이고 다른 하나는 인터넷 연결 트래픽용을 사용해요.
"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 웹 인터페이스용 포트 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
}
]