AWS ECS 구성 및 활용하기 #3 - 서비스(ECS Service) 구성하기
AWS에서 ECS(Elastic Container Service)의 서비스(ECS Service)를 통해 작업 정의(컨테이너)를 관리할 수 있습니다. 로드 밸런서와 연동하여 트랙픽을 다중 컨테이너에 분산할 수 있습니다. Auto Scailing을 사용하여 사용량에 기반하여 컨테이너 개수를 조절할 수 있습니다.
이 문서에서는 서비스(ECS Service)를 구성하는 방법을 알아보겠습니다.
사전 준비
ECS 서비스를 구성하기 위해서 EBL를 생성합니다.
-
EC2 Console에 접속 > 왼쪽 메뉴 > 로드 밸런싱 > 로드밸런서 선택
-
메인 화면 >
로드 밸런서 생성
버튼 선택 -
로드밸런서 유형 선택 > Application Load Balancer >
생성
버튼 선택 -
기본 구성 > 이름 >
cicd-demo
입력 -
리스너 > 기본 값인
HTTP, 80
그대로 사용(애플리케이션 접속시 http를 사용하여 접속) -
가용 영역 > VPC, 가용 영역 및 Subnet(Public) 선택 >
다음
버튼 선택 -
보안 설정은 변경 없이
다음
버튼 선택 -
보안 그룹 구성
- 보안 그룹 할당 > 새 보안 그룹 생성 선택
- 보안 그룹 이름에
cicd-demo
입력 - 설명에
Allow http
입력 -
유형
HTTP
선택 >다음
버튼 선택
-
대상 그룹
- 대상 그룹 > 새 대상 그룹 선택
-
이름
cicd-demo-service
입력
-
상태 검사
- 고급 상태 검사 설정 확장
-
포트 > 재정의 선택 >
8080
입력(작업 정의에서 컨테이너 포트를 8080으로 지정)
-
대상 등록은 설정 변경 없이
다음
버튼 선택 -
전체적으로 검토 >
생성
버튼 선택
서비스 생성하기
-
ECS Console에 접속 > 왼쪽 메뉴 > Amazon ECS > 클러스터 선택
-
클러스터 리스트 >
cicd-demo
선택 -
서비스 탭 >
생성
버튼 선택 -
서비스 구성
-
Deployments > Rolling Update 선택 >
다음
버튼 선택참고
- Rolling Update는 기존 버전의 인스턴스를 순차적으로 새로운 버전으로 업데이트하는 방식입니다. 새로운 인스턴스를 생성하지 않기 때문에 비용 효율적입니다.
- Blue/green deployment는 기존 버전의 인스턴스만큼 새로운 버전의 인스턴스를 배포합니다. 새로운 버전을 테스트하고 트래픽을 일시에 기존 버전에서 새로운 버전으로 이동할 수 있습니다. 새로운 인스턴스를 기존 버전만큼 생성해야하므로 비용면에서 상대적으로 비효율적입니다. -
네트워크 구성 > VPC 및 보안 그룹
- 클러스터 VPC > 컨테이너가 위치할 VPC를 선택
- 서브넷 > 컨테이너가 위치할 서브넷을 선택(이 문서에서는 Private 서브넷을 기준으로 작성함)
- 보안 그룹 > 편집 선택 > 보안 그룹 구성
-
자동 할당 퍼블릭 IP > DISABLED 선택
경고
- 자동 할당 퍼블릭 IP를 DISABLED로 선택할 경우 컨테이너에 퍼블릭 IP가 할당되지 않습니다. 컨테이너에서 외부와의 통신을 하려면 컨테이너가 위치한 Private 서브넷이 외부와 통신할 수 있는 NAT와 연결되어야 합니다.
- 자동 할당 퍼블릭 IP를 ENABLED로 선택할 경우 컨테이너에 퍼블릭 IP가 할당됩니다. 컨테이너는 Public 서브넷에 위치하고 해당 서브넷은 IGW(Internet Gateway)와 연결되어 있어야 합니다. -
보안 그룹 구성
- 할당된 보안 그룹 > 새 보안 그룹 생성 선택
- 보안 그룹 이름 > cicd-demo-service 입력
-
인바운드 규칙 > 유형에서 Custom TCP 선택 > 포트 범위 8080 입력(로드밸런서에서 컨테이너의 8080 포트로의 인바운드 트래픽)
-
Elastic Load Balancing
- ELB 유형 > Application Load Balancer 선택
-
ELB 이름 > cicd-demo 선택(사전 준비에서 생성)
-
로드를 밸런싱할 컨테이너
-
cicd-demo:8080:8080 선택(작업 정의에서 생성) > ELB에 추가 버튼 선택
- 리스너 포트 > 80:HTTP 선택(사전 준비에서 생성)
-
대상 그룹 이름 > cicd-demo-service 선택
-
-
다른 설정은 기본 설정을 사용 > 다음 단계 버튼 선택
-
서비스 Auto Scaling은 사용하지 않음 > 다음 단계 선택
-
서비스 검토를 전반적으로 하고 생성하기 버튼 선택해서 서비스 생성 완료
서비스 확인
이제 서비스가 정상적으로 구성되었는지 확인해보겠습니다.
-
ECS Console에 접속 > 왼쪽 메뉴 > Amazon ECS > 클러스터 선택
-
클러스터 리스트 >
cicd-demo
선택 -
서비스 탭 선택 > 상태가 Active인지 확인
-
작업 탭 선택 > 마지막/원하는 상태가 Running인지 확인
-
EC2 Console에 접속 > 왼쪽 메뉴 > 로드 밸런싱 > 로드밸런서 선택
-
로드밸런서 리스트 >
cicd-demo
선택 -
대상 탭 선택 > 등록된 대상 > 상태가 healthy인지 확인
-
설명 탭 선택 > DNS 이름 복사
-
웹 브라우저 > 복사한 DNS 이름 붙여넣고 접속 > 서비스 정상 접속 확인
Blue/green deployment(선택)
위 과정에서는 서비스 생성 시 deployment 방식을 Rolling Update로 선택했습니다.
Blue/green deployment를 활용하는 방법을 살펴보겠습니다.
사전 준비
Blue/green deployment 방식으로 서비스를 생성하는 경우 CodeDeploy에 애플리케이션 및 배포 그룹이 자동 생성됩니다.
이를 위해 CodeDeploy 서비스 권한이 있는 IAM 역할 생성이 필요합니다.
-
IAM Console에 접속 > 왼쪽 메뉴 > AWS Account > 역할 선택
-
메인 화면 >
역할 만들기
버튼 선택 -
신뢰할 수 있는 유형의 개체 선택 > AWS 서비스 선택
-
이 역할을 사용할 서비스 선택 > CodeDeploy 선택 > CodeDeploy - ECS 선택 > 다음 버튼 선택
-
설정 변경 없이 다음 버튼 선택
-
설정 변경 없이 다음 버튼 선택
-
역할 이름 > codedeploy-cicd-demo-role 입력 > 역할 만들기 선택
서비스 생성
Blue/green deployment 방식으로 서비스를 생성하는 경우 Rolling Update 방식과 아래 과정만 다릅니다.
- Deployments
- Deployment type > Blue/green deployment 선택
- Service role for CodeDeploy >
다음
버튼 선택
- Additional configuration
- Target group 1 name > cicd-demo-service 선택
- Target group 2 name > 새로 생성 선택 > cicd-demo-service-green 입력
- Target group 2 protocol > HTTP 선택
서비스 확인
서비스 확인 방법도 Rolling Update와 동일합니다.
다른 점은 Blue/green deployment 방식으로 서비스를 생성하는 경우 CodeDeploy에 애플리케이션 및 배포 그룹이 자동 생성됩니다.
-
CodeDeploy console 접속 > 왼쪽 메뉴의 애플리케이션 선택
-
애플리케이션 리스트 > AppECS-cicd-demo-cicd-demo 선택
-
배포 그룹 리스트 > DgpECS-cicd-demo-cicd-demo 선택
-
배포 그룹 확인