티스토리 뷰

728x90
SMALL

 포스팅에서는 AWS ECS를 구성해 보는 세션입니다.


Amazon ECS는 Cloud 환경에 적용 가능한 Container Service로 OS를 포함하지 않아 가볍고, 빠른 배포, 빠른 기동이 가능한 컨테이너 오케스트레이션 서비스입니다.

컨테이너 오케스트레이션 도구에는 Docker에서 만든 Docker Swarm, 구글의 Kubernetes, 하시코프의 Nomad등 다양한 오케스트레이션 도구가 있습니다.


본 세션에서는 ECS의 Instance 형태인 Serverless기반의 Fargate와 VM기반의 EC2에 대해 각각 다뤄볼 예정입니다.

AWS EC2의 경우 컨테이너를 EC2 서버에 배치하고 이를 클러스터로 묶어서 관리하며, Fargate의 경우 서버 또는 클러스터를 관리할 필요없이 컨테이너를 논리적으로 관리하는 형태입니다.


본 실습은 총 세번에 걸쳐 진행될 예정입니다.

 AWS ECS의 기본 개념 및 VPC & IAM 구성

㉡ Docker Image 생성 및 ECR Private Registry 반영

㉢ ECS Cluster 생성 및 구성

이번 포스팅에서는 그 마지막 시간으로 AWS ECS Cluster 생성 및 구성방법에 대해 살펴보겠습니다.


포스팅에 앞서 AWS ECS의 기본 구성요소 및 VPC, IAM에 관련된 포스팅은 아래를 참고하시기 바랍니다.

[AWS ECS 구성하기] Part 1. VPC & IAM 구성하기

[AWS ECS 구성하기] Part 2. ECR & Docker Image 생성하기



ECS Cluster 설정

단계 1 : ECS Cluster 생성

컨테이너 인스턴스를 호스팅 할 ECS 클러스터를 생성하고, Public Subnet에 Instance를 생성합니다.

AWS WebConsole -> ECS -> 클러스터

클러스터 생성 버튼을 클릭합니다.

클러스터 템플릿은 크게 3가지로 제공됩니다.

① 네트워킹 전용 - AWS Fargate 제공

② EC2 Linux + 네트워킹

③ EC2 Windows + 네트워킹

실습에 사용할 템플릿은 EC2 Linux + 네트워킹입니다.

단계 2 : ECS Cluster 구성

주요 설정을 반영합니다.

① 클러스터 이름 : NrsonCluster

② EC2 인스턴스 유형 : T3.micro (본 유형은 인스턴스의 리소스 할당을 어떻게 할 것인가에 따라 달라집니다.)

③ 인스턴스 개수 : 2

④ EBS 스토리지 : 22

⑤ VPC : NrsSingleVPC

⑥ 서브넷 : NrsonPublicSubnet 2개 모두 선택

⑦ Secutiry Group : NrsonPublicCluster

⑧ 컨테이너 인스턴스 IAM 역할 : NrsonEC2Instance

단계 3 : ECS Cluster 생성확인

정상적으로 생성되었을 경우 아래와 같이 ECS Cluster와 ECS Container Instance를 확인할 수 있습니다.

728x90


ELB 설정

ELB의 ALB, NLB, CLB 중 ALB를 구성해보도록 하겠습니다.

EndPoint들에 트래픽을 분산하기 위한 ALB를 생성합니다. 앞서 생성한 이미지를 활용한 테스트를 진행하도록 하겠습니다.

/web, /api 두가지의 다른 Endpoint를 사용합니다.


EC2 대시보드 -> 로드밸런싱

먼저 로드 밸런서 생성을 진행합니다.

ELB는 ALB, NLB, CLB가 있으며 각 LB 별로 특징을 갖고 있습니다.

ALB의 경우 HTTP, HTTPS Protocol만 지원한는 L7 LoadBalancer로 Application의 유연한 기능에 초점이 맞추어져 있습니다.

NLB의 경우 초고성능, 대규모 TLS 연결 및 종료, 중앙 집중화된 인증서 배포 및 고정 IP 주소가 필요한 경우 사용합니다. NLB의 경우 Layer5 네트워크 계층을 사용하여 모든 TCP Protocol을 지원합니다.

CLB의 경우 이전 세대에 사용하던 LB 방식으로 대부분의 기능을 지원하지만 성능 이슈로 인해 사용을 권고하지는 않습니다.

본 실습에서는 ALB를 사용합니다.

ALB 로드 밸런싱의 상세 구성 설정입니다.

구분하기 위한 로드 밸런서 이름과 Availability Zone(이하 AZ)을 지정합니다.

본 테스트에서는 Public Subnet을 통한 구성을 테스트합니다.

보안그룹으로는 ALB를 통해 받을 80Port에 대한 Inbount 보안 그룹을 등록합니다.

Routing 정보는 80포트로 들어온 Request에 대해 /로 바인딩합니다.

추가한 NrsonALB에 대한 정보를 확인합니다.

728x90


ECS Task Definition 생성

Task Definition은 ECS의 최소 실행 단위인 태스크를 실행하기 위한 설정을 저장하는 리소스입니다. 애플리케이션이 Amazon ECS에서 실행되도록 준비하려면 태스크 디피니션을 생성합니다.


ECS 대시보드 -> Amazon ECS -> 작업 정의(Task Definition) 선택 -> 새 작업 정의 생성을 클릭합니다.

단계 1 : 시작 유형 호환성 선택

-> EC2 유형을 선택합니다.

Fargate의 경우 작업 크기 기반의 요금이 부과되며, 별도의 인스턴스가 필요 없는 Serverless 기반의 Instance입니다.

EC2의 경우 리소스 사용량 기반의 요금이 부과되며, Amazon EC2 인스턴스를 사용합니다.

본 실습에서는 EC2를 선택하여 진행합니다.

단계 2 : 작업 및 컨테이너 정의 구성

① Task Definition의 이름을 정의합니다.

② Task Role의 경우 없음을 선택합니다.

③ 네트워크 모드는 브리지 방식을 선택합니다.

④ 작업 메모리는 1GB, 작업 CPU는 512MB를 입력합니다.

단계 3 : Task Definition에서 사용할 Container 추가

① 컨테이너 이름을 지정합니다.

② 이미지 경로로 앞서 추가한 ECR Repository를 입력합니다. [Registry-url]/[Namespace]/[Image]:[Tag] 형식으로 이루어져 있습니다.

③ 포트매핑의 호스트 포트는 0, 컨테이너 포트는 도커 이미지를 생성할 때 지정했던 3000을 입력합니다.

추가된 컨테이너를 확인하고 생성버튼을 클릭합니다.

이와 동일한 과정으로 nrson-api Task Definition을 추가로 생성합니다.

728x90


Service 생성

Service는 태스크를 지속적으로 관리하는 단위입니다. 서비스는 클러스터 내에 태스크가 지정된 수 만큼, 지속적으로 실행될 수 있도록 관리합니다. 또한 AWS ELB에 자동으로 등록, 제거하는 역할을 담당합니다.


ECS 대시보드 -> 클러스터 -> 기존에 생성했던 NrsonCluster를 선택 후 서비스 생성을 클릭합니다.

단계 1 :  서비스 구성

① 시작유형 : ECS

② 작업정의 : nrson-web

③ 클러스터 : NrsonCluster

④ 서비스이름 : nrson-web-service

⑤ 서비스유형 : Replica

⑥ 작업개수 : 1

단계 2 : 네트워크 구성

① ELB 유형 : Application Load Balancer

② ELB 이름 : NrsonAlb

③ 로드밸런싱할 컨테이너 추가 : nrson-web-container:0:3000

# 추가할 컨테이너 정보

① 리스터 포트 : 80:HTTP

② 대상그룹 이름 : 새로생성

③ 대상 그룹 프로토콜 : HTTP

④ 경로패턴 : /web*

⑤ 평가순위 : 1

⑥ 상태확인경로 : /web

단계 3 : Auto Scaling(선택사항)

Auto Scaling은 꺼둔 상태로 진행합니다.

단계 4 : 서비스 검토

생성 정보를 확인하고 서비스 생성 버튼을 클릭합니다.

동일한 방식으로 nrson-api-service를 생성합니다.

728x90


ALB를 이용한 배포 테스트

ECS 콘솔을 통해서 Service Level Events, 배포 이벤트를 확인할 수 있습니다.

ECS 대시보드 -> 클러스터 -> NrsonCluster -> 서비스의 이벤트 항목에서 확인할 수 있습니다.

ALB의 DNS 레코드를 이용하여 직접 접속 테스트를 수행할 수 있습니다.

ALB의 DNS 정보는 이전에 생성한 ALB에서 확인할 수 있습니다.

해당 DNS를 기반으로 호출하면 아래와 같은 페이지를 확인할 수 있습니다.

WEB Application

http://nrsonalb-121496883.ap-northeast-2.elb.amazonaws.com/web

API Application

http://nrsonalb-121496883.ap-northeast-2.elb.amazonaws.com/api


실습을 진행하며 생성한 리소스들은 Charge가 발생됩니다.

따라서 실습을 종료한 이후에는 사용한 Resource를 삭제해야 합니다.

① CloudFormation 콘솔에서 EC2ContainerService-NrsonCluster 제거

② ECR에서 생성한 Repository

③ ECS콘솔 - 작업정의

④ ECS콘솔 클러스터에서 NrsonCluster

⑤ EC2콘솔에서 DockerInstance

⑥ LoadBalancer와 대상그룹

⑦ 보안그룹 삭제

⑧ VPC 삭제

⑨ IAM Role 삭제


지금까지 세번에 걸친 실습을 정리해 보자면 다음과 같습니다.

㉠ VPC 대시보드를 통한 네트워크를 구성

㉡ IAM 대시보드를 통한 Role 구성

㉢ Docker Image 생성

㉣ ECR Private Registry에 이미지 Push

ECS Cluster 생성


차근히 따라해보면서 실습을 진행해 보시면 될것 같습니다.

그럼 이상으로 ECS 클러스터링에 대한 실습 세션을 마치도록 하겠습니다.

728x90
LIST
댓글
  • 프로필사진 노랭이 많은 도움이 되었습니다 2020.02.17 06:09
  • 프로필사진 ian Alb 구성에서 대상등록을 스킵하셨는데 클러스터와 함께 구성된 인스턴스2개 등록하신건가요?
    또한 컨테이너 호스트0으로 주시는 이유는 무엇인가요??
    2020.03.14 00:37
댓글쓰기 폼