본문 바로가기
Cloud

[AWS] ECS Service에 복수 TargatGroup 설정하기

by C곰군 2025. 2. 13.

안녕하세요?

곰군 입니다.


본 글에서는 AWS [AWS] ECS Service에 복수 TargatGroup 설정하는 방법에 대해서 소개하는 시간을 가져보겠습니다.

AWS ECS와 TargatGroup이 뭔가요?

ECS는 AWS에서 관리형 컨테이너 서비스로, Docker 컨테이너를 손쉽게 실행하고 관리할 수 있습니다. ECS는 애플리케이션을 여러 컨테이너로 나누어 실행할 수 있도록 도와주며, AWS 고유의 컨테이너 관리 시스템을 사용합니다. 본 블로그에서도 사전에 여러 번 소개된 서비스 입니다.

Target Group은 AWS Elastic Load Balancing (ELB)의 대상으로, 로드 밸런서가 트래픽을 전달할 대상(타겟)들을 그룹화한 것입니다. 한국어로는 대상그룹이라고 칭하며 앞으로 혼용하겠습니다.

ECS를 Fargate 방식으로 사용할 경우 컨테이너가 새로 올라올 때마다 ip가 변경되기 때문에 ELB와 ECS Service를 연동하지 않으면 TASK가 스케일 아웃되거나 재시작되었을때 EBL에서 대상(타겟)을 찾지 못하는 현상이 발생합니다. 그래서 ECS Service에 ALB의 타겟그룹을 매핑하여 새로 올라온 TASK들이 ALB의 TargetGroup에 자동으로 연동되게 설정하는 기능을 제공합니다.

ECS Service에 TargatGroup 설정하는 방법_콘솔

ECS Sevrvice에 대상그룹을 설정하는 방법은 간단합니다.
서비스 생성을 진행할 시 선택사항으로 표시되어있는 로드밸런스 창을 활성화해서 기존에 생성되어 있는 ALB와 매핑해주면 됩니다. 리스너와 대상그룹등은 서비스를 생성하면서 신규로 생성 가능하고 사전에 미리 생성해 놔도 무방합니다.

위 내용으로 생성을 진행하면 하기와 같이 서비스에서 alb가 연동이 된 것을 확인할 수 있습니다.

하지만 해당 방법은 2025년 2월 기준으로 하나의 대상그룹만을 매핑할 수 있습니다.

그말은 하나의 서비스를 여러 개의 alb와 연동을 하는 것이 콘솔로는 불가능하다는 뜻입니다.
그럼 어떻게 해야 가능할까요?
그 방법은 아래에서 소개 드리겠습니다.

ECS Service에 복수 TargatGroup 설정하는 방법

결론부터 말씀드리면 cli를 활용해야 합니다.
ECS 서비스를 콘소로 만들었다는 가정 하에서 ecs update-service를 통해 복수 개의 대상그룹을 연동할 수 있습니다.

aws ecs update-service \
    --cluster my-ecs-cluster \
    --service my-service \
    --load-balancers "targetGroupArn=arn:aws:elasticloadbalancing:region:account-id:targetgroup/my-target-group1/123456abc,containerName=my-container,containerPort=80" \
                    "targetGroupArn=arn:aws:elasticloadbalancing:region:account-id:targetgroup/my-target-group2/abcdef12345,containerName=my-container,containerPort=8080"

--cluster: 업데이트할 ECS 클러스터의 이름을 지정합니다.
--service: 타겟 그룹을 업데이트할 ECS 서비스의 이름을 지정합니다.
--load-balancers: 새롭게 설정할 복수의 타겟 그룹 정보가 포함됩니다.
첫 번째 타겟 그룹은 my-target-group1으로, 컨테이너의 80 포트에 트래픽을 전달합니다.
두 번째 타겟 그룹은 my-target-group2로, 같은 컨테이너의 8080 포트에 트래픽을 전달합니다.
targetGroupArn: 각 타겟 그룹의 Amazon 리소스 이름(ARN)을 지정합니다.
containerName: 트래픽을 전달할 ECS 서비스 내의 특정 컨테이터 이름을 지정합니다.
containerPort: 트래픽을 전달할 컨테이너의 포트를 지정합니다.

위 내용처럼 ECS service의 컨테이너 포트와 ELB의 대상그룹을 매핑시켜서 업데이트 해주면 하나의 서비스의 복수개의 ALB와 연동이 가능합니다.
하기 이미지는 실제로 2개의 LB에 4개의 대상그룹과 ECS서비스를 연동해 놓은 예시입니다.

위와 같이 설정해두면 TASK가 올라올 때 모든 대상그룹에 자동적으로 새로운 task의 ip가 매핑됩니다.

고려할 사항

Amazon ECS와 함께 Application Load Balancer를 사용할 때 다음 사항을 고려하세요.

  • Amazon ECS에는 작업이 생성되고 중지될 때 로드 밸런서에 대상을 등록하고 등록 해제하는 데 필요한 권한을 제공하는 서비스 연결 IAM 역할이 필요합니다. 자세한 내용은 Amazon ECS에 서비스 연결 역할 사용을 참조하세요 .
  • 대상 그룹의 IP 주소 유형은 IPv4로 설정되어 있어야 합니다.
  • 네트워크 모드를 사용하는 작업이 있는 서비스의 경우 awsvpc, 서비스에 대한 대상 그룹을 만들 때 ip대상 유형으로 를 선택해야 합니다 instance. 네트워크 모드를 사용하는 작업은 Amazon EC2 인스턴스가 아닌 탄력적 네트워크 인터페이스와 연관되기 때문입니다 .awsvpc
  • 서비스가 HTTP/HTTPS 서비스의 포트 80 및 포트 443과 같은 여러 로드 밸런싱 포트에 액세스해야 하는 경우 두 개의 리스너를 구성할 수 있습니다. 한 리스너는 요청을 서비스로 전달하는 HTTPS를 담당하고, 다른 리스너는 HTTP 요청을 적절한 HTTPS 포트로 리디렉션하는 것을 담당합니다. 자세한 내용은 Application Load Balancers 사용자 가이드 에서 Application Load Balancer에 대한 리스너 만들기를 참조하세요 .
  • 로드 밸런서 서브넷 구성에는 컨테이너 인스턴스가 있는 모든 가용성 영역이 포함되어야 합니다.
  • 서비스를 만든 후에는 AWS Management Console에서 로드 밸런서 구성을 변경할 수 없습니다. AWS Copilot, AWS CloudFormation, AWS CLI 또는 SDK를 사용하여 ECS롤링 배포 컨트롤러에 대한 로드 밸런서 구성만 수정할 수 있으며 AWS CodeDeploy blue/green 또는 external은 수정할 수 없습니다. 로드 밸런서 구성을 추가, 업데이트 또는 제거하면 Amazon ECS가 업데이트된 Elastic Load Balancing 구성으로 새 배포를 시작합니다. 그러면 작업이 로드 밸런서에 등록되고 로드 밸런서에서 등록 해제됩니다. Elastic Load Balancing 구성을 업데이트하기 전에 테스트 환경에서 이를 확인하는 것이 좋습니다. 구성을 수정하는 방법에 대한 자세한 내용은 Amazon Elastic Container Service API Reference 의 UpdateService를 참조하세요 .
  • 서비스 작업이 로드 밸런서 상태 검사 기준에 실패하면 작업이 중지되고 다시 시작됩니다. 이 프로세스는 서비스가 원하는 실행 작업 수에 도달할 때까지 계속됩니다.
  • 로드 밸런서 지원 서비스에 문제가 발생하는 경우 Amazon ECS에서 서비스 로드 밸런서 문제 해결을 참조하세요 .
  • 작업과 로드 밸런서는 동일한 VPC에 있어야 합니다.
  • 각 서비스마다 고유한 타겟 그룹을 사용하세요.여러 서비스에 동일한 대상 그룹을 사용하면 서비스 배포 중에 문제가 발생할 수 있습니다.

레퍼런스
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html

댓글