AWS

[AWS 파헤치기] #8 ECS 서비스(Service) 생성하기

탕구리당 2020. 11. 28. 22:38
반응형

ECS 사용법에 대한 포스팅을 계속해서 이어가려고 합니다.

ECS에서는 Service와 Task라는 중요한 두개의 개념이 있으며, 지난번 포스팅에서는 Task가 무엇인지 ECS에서 사용하는 Task-Definition 방법에 대하여 알아보았습니다. Task에 대해 궁금하신 분은 지난 포스팅을 참조해주세요

 

우선, ECS 아키텍쳐를 살펴봅니다.

 

Service를 살펴보면 중간에서 Target Group과도 연결되어 있고 task-definition, 여러개의 task들 등.. 시스템 중앙에서 무언가를 관리하는 역할을 하는 것 처럼 보입니다. 실제로 Service는 우리가 등록한 테스크를 관리하며 배포된 시스템이 정상상태로 유지하도록 하는 역할을 하고 있습니다.

 

Service 설정 과정을 살펴보며 어떤 기능들을 포함하고 있는지 확인해보도록 하죠!

 

 

1. 서비스 확인하기

우선, 클러스터에 들어오면 서비스 탭에 생성 버튼을 볼 수 있습니다. 리스트에는 현재 실행 중인 서비스 목록과 서비스에서 실행중인 task revision, 개수 등 각종 정보를 확인할 수 있죠!

 

 

2. 서비스 구성하기

서비스 생성 버튼을 클릭하여 들어오면 첫째로 서비스 구성에 대한 설정을 진행 할 수 있습니다.

1. 서비스 실행시 어떤 유형(Fargate, EC2)을 통해 배포를 진행할지 선택 합니다.

2. 서비스에서 실행하고자 하는 task를 설정하고 revision을 선택할 수 있습니다.

3. 서비스가 실행 될 클러스터를 선택합니다.

4. Replica와 Deamon 중 서비스 유형을 선택합니다.

5. 실행시키고자 하는 task의 개수를 선택합니다.

6. 최소 정상 상태 백분율과 최대 백분율을 선택합니다.

 

** 서비스 유형 중 Replica는 이름 그대로 설정한 작업 개수만큼 테스크를 복제하여 실행합니다

=> 예를들어 작업 개수를 "3"으로 설정한경우 3개의 테스크를 실행합니다. 반면 Deamon 유형은 클러스터에 연결된 인스턴스 하나당 하나의 task만 실행합니다. intance의 내부에서 loab balancing을 위해 nginx를 Daemon 형태로 실행하는 경우 클러스터에 연결된 instance당 1개의 task만 실행됩니다.

 

** 최소 정상 상태 백분율

=> 배포 과정에서 최소로 유지해야하는 정상상태의 테스트 개수를 의미합니다. 기존 서비스에서 동작하던 컨테이너가 10개인 경우 최소 정상 상태 백분율을 50%로 유지한 경우 5개의 테스크만 정상적으로 구동하고 있어도 배포를 진행합니다.

 

**최대 백분율

테스크가 배포되는 과정에서 배포방식에 따라 늘어나는 테스크의 최대 개수를 제한합니다.

 

배포방식은 롤링 업데이트와 블루/그린 배포 두가지 방식을 제공합니다. 블루/그린 배포의 경우 aws code deploy 서비스를 통해 사용 가능합니다.

 

aws 제공하는 작업 배치 방식은 여러개가 존재합니다. 저는 AZ 균형 분산 방식에 대해서만 사용해보았기 때문에 간단한 추가설명만 드리겠습니다.

 

AZ 균형 분산을 선택하는 경우 편집에 들어가면 기본적으로 2개의 유형으로 설정되어 있습니다.

1. subnet에 따른 테스크 분산

2. instance에 따른 테스크 분산

 

저의 경우 인스턴스 3개를 클러스터에 연결하여 사용하였고 subnet group은 2개를 사용하였기 때문에 테스트를 10~20개 배포하는 경우 균형배포가 되지 않아 instanceId를 1순위로 두어 배포를 진행했습니다.

 

예를 들면 subnetA(instance1, instance2), subnetB(instane3)의 네트워크 구성 상태에서 40개의 테스크를 배포하는 경우

subnet group을 기준으로 테스크를 배포하는 경우 instance1 - 10개, instance2 - 10개, instance3- 20개 와 같은 형식으로 배포됩니다.

 

 

3. 네트워크 구성하기

저는 컨테이너 네트워크 모드를 bridge Mode로 설정하였기 때문에 "VPC 및 보안그룹"대한 설정은 진행할 필요가 없었기에 로드밸런싱에 대한 부분으로 바로 넘어가도록 하겠습니다.

 

로드 밸런서는 미사용이 가능하지만 컨테이너가 외부 트래픽을 받기 위해서는 로드 밸런서를 사용해야합니다.

Application의 경우 dynamic port mapping이 가능하기 때문에 ALB를 설정하였습니다.

 

ALB 사용을 선택한 경우 ALB에서 사용할 IAM에 대한 설정이 필요하고 현재 생성되어 있는 LB를 설정해주어야 합니다.

로드 밸런스에 컨테이너를 추가해주면 다음과 같은 화면이 추가로 노출 됩니다.

 

 

컨테이너를 추가한 경우 ALB에서 사용할 Listener와 Target group을 설정 할 수 있습니다.

dynamic port mapping을 사용하는 경우 target group에 설정되어 있는 포트는 무시되며 컨테이너의 네트워크 모드가 브릿지 모드인 경우 에페메럴 포트 범위(32768 - 61000)의 포트가 할당되어 컨테이너와 네트워크할 수 있습니다.


** 네트워크 모드가 awsvpc, hostmode인 경우 dynamic port mapping을 사용할 수 없습니다.

 

 

앱 매쉬의 경우 AWS route53을 통해 도메인을 통해 컨테이너를 찾아갈 수 있도록 지원하는 DNS 서비스인 것 같았습니다(?) 저도 자세하게 들여다보지는 않았고 간단하게 도큐먼트를 훑어 보기만 하여 잘 모르겠습니다ㅠㅠ 죄송합니다.

 

 

4. Auto Scaling 설정

마지막으로 Auto Sacling 설정입니다.

필수 사항이 아닌 선택사항이며 작업 모드가 Replica인 경우만 사용 가능합니다. 

 

서비스에서 사용할 AutoScaling 정책설정에 대하여 진행합니다. 작업의 개수는 몇개로 적용할지, 최대로 적용할 작업 개수 등을 설정 가능하며 어떤 경우에 AutoScaling 정책을 발동하여 작업을 진행할 지 설정할 수 있습니다.

 

위의 설정들을 진행한 후에는 Review 과정을 통해 설정한 내용에 대한 확인 후 서비스를 생성하게 됩니다.


이렇게 ECS 서비스 생성에 관련된 부분에 대하여 어떤 부분을 설정가능한지 알아보았습니다. 물론 AWS console을 통한 방법 말고도 aws cli를 통해 해당 좀 더 상세한 내용에 대하여 설정이 가능합니다. 제가 사용했던 cli 명령어들에 대해 정리해놓은게 있으니 시간이 좀 여유로울 때 추가적으로 포스팅을 진행해 놓도록 하겠습니다~!

 

긴 글 읽어주셔서 감사하며 조금이나마 글을 읽는 분에게 도움이 되었으면 합니다 :)

감사합니다. 탕빠이!

반응형