본문 바로가기

개발-사용기/aws

AWS ECS 구성

서론

Codepipeline을 통해 자동배포를 구현하려면 먼저 ECS가 구성되어 있어야 한다.

여기선 ECS의 클러스터, 작업, 서비스 설정을 다뤄보려 한다.

 

사전작업

-- 키 페어 생성

EC2 인스턴스를 띄우고 인스턴스에 ssh접속할 경우 Key pair를 통해 접속 가능하게 설정할 것이기 때문에 Key pair를 발급해보자.

EC2 - 네트워크 및 보안 - 키 페어 항목으로 들어가보면 다음과 같은 화면을 볼 수 있다.

 

우상단의 키 페어 생성 버튼을 누르고 키 페어 생성 화면으로 이동하자.

 

 

키 페어 이름입력 후 키 페어 생성 버튼을 누르면 자동으로 파일이 다운로드 되며 키 페어 목록 화면으로 이동된다.

 

 

-- ACM 인증서 발급

Load Balancer를 생성할 때 ACM 인증서가 필요하기 때문에, 먼저 인증서를 발급받아놓자.

인증서 발급은 사전에 포스팅한 내용이 있으므로 링크 내용을 따라하면 된다.

https://mouuaw.tistory.com/12

 

AWS Certificate Manager (https 적용하기)

서론 서비스 운영을 위해 도메인을 구입하고 여기에 https 적용을 할 계획이다. 사전작업 --도메인 구입 https를 적용할 도메인을 구입해야 한다. 필자는 Route53에서 직접 구입했는데, 도메인 구입

mouuaw.tistory.com

 

 

-- ELB 생성

ECS를 구성하기 전에 Load Balancer를 사용할것이기 때문에 먼저 ELB를 생성해준다.

ELB는 EC2의 로드밸런싱 항목에서 생성할 수 있으므로 해당 페이지를 찾아서 들어가보면 다음 화면이 나온다.

 

 

Load Balancer 생성 버튼을 통해 화면을 이동하면 다음과 같은 화면이 나오는데, 여기서 우리는 http/https를 사용할 것이므로 Application Load Balancer를 생성하자.

 

 

Load Balancer 구성에서 이름을 지정해주고, 리스너에는 https를 추가해준다. 가용영역의 경우 vpc에서 2a,2c 부분을 선택해줬다.

 

 

다음으로 보안 설정 구성으로 넘어가서 인증서 선택을 해준다. 필자의 경우 ACM인증서를 미리 발급해놔서 그걸 사용했다. 

 

 

인증서 선택 후 다음 보안 그룹 구성으로 넘어가자.

 

 

새 보안 그룹 생성을 선택하고 각자 필요에 따라서 보안그룹을 생성해주면 된다. 필자는 80, 443 포트를 열어줬다.

 

 

다음으로 라우팅 구성을 보면 대상에 대한 포트번호와 상태검사 경로를 지정해줘야 하는데, 각자 서버에 구축해놓은 상태체크용 API 경로를 적용해주면 된다.(없으면 만들어야한다.) 나중에 서버 로그를 살펴보면 해당 경로로 주기적으로 요청보내는걸 확인할 수 있다.

 

나머지 대상등록검토는 이상이 없는지만 확인해보고 넘어가면 된다.

 

 

 

 

 

ECS 클러스터 구성하기

ECS를 검색해서 해당 서비스로 들어가면 ECS, EKS, ECR 항목이 있다. 여기서 우린 ECS-클러스터 항목으로 들어가보자.

 

 

클러스터 생성 버튼을 눌러보자.

 

 

필자는 ubuntu를 사용할것이기 때문에 EC2 Linux + 네트워킹을 선택했다. 다음으로 넘어가자.

 

클러스터 구성 화면은 다음과 같다.

 

 

클러스터 이름을 입력해주고 EC2 인스턴스 유형을 지정해주자. 그리고 위에서 생성한 키페어를 선택해준다.

 

VPC는 기존VPC를 선택했으며 서브넷은 2a, 2c만 할당했다.

보안그룹은 새로 생성했으며 인바운드 규칙은 80포트만 열어두었다.

 

그 밑의 설정들은 따로 건드린것이 없고 생성 버튼을 통해 클러스터를 생성했다.

 

완료가 되면 설정에 따라 구성이 완료되는걸 볼 수 있다. Auto Scaling 그룹도 자동생성된걸 볼 수 있다.

 

 

 

 

 

ECS 작업정의

 

클러스터 생성 후 작업 정의를 해줘야 한다. 새 작업 정의 생성 버튼을 눌러보자.

 

작업 정의 이름을 정해주고 조금 밑으로 내려가면...

 

컨테이너 정의 항목이 보인다. 컨테이너 추가 작업을 해주자.

 

 

컨테이너 설정 작업은 생각보다 까다로운 부분이 많다.

 

 

우선 컨테이너 이름도커 이미지 이름과 일치해야 한다. 위 사진에서 주황색 박스로 되어있는 부분의 이름이 같아야 한다고 보면 된다.(ECR기준)

 

그리고 포트매핑의 경우 호스트 포트를 0으로 설정해줬는데, 이렇게 해야 동적포트매핑이 된다. 컨테이너 포트는 도커에서 외부로 연결시킬 포트를 지정해주면 된다. 도커 내부에서도 포트를 설정해줘야 한다.(예를들면 nginx 설정을 통해 3000 포트를 열어줘야한다.) 

 

메모리 제한의 경우 기본값을 사용했다.

 

 

 

 

 

서비스 생성

 

클러스터와 작업정의를 완료했으면 이제 서비스 생성을 통해 클러스터에서 작업이 돌아갈 수 있도록 설정해준다.

 

 

클러스터 서비스탭의 생성 버튼을 통해 서비스 생성 화면으로 이동하자.

 

 

시작유형으로 EC2를 선택해주고 작업 정의클러스터는 위에서 만든것들을 선택해준다. 작업 개수는 1개로 입력했고 최소 정상 상태 백분율, 최대 백분율은 100, 200 으로 기본값을 사용했다.

 

배포 유형은 롤링 업데이트를 선택했다. 실 서비스 환경에서는 블루/그린 배포가 권장되지만 여기선 하지않는다. 설정 완료 후 다음단계로 넘어가보자.

네트워크 구성 화면에선 로드 밸런싱에서 우리가 미리 만들어둔 ELB를 사용할 것이기 때문에 Application Load Balancer를 선택해주고 

 

미리 만들어둔 로드 밸런서를 선택, 그리고 컨테이너 선택 후 로드 밸런서에 추가 버튼을 눌러주면 밑으로 설정할 항목이 더 생긴다.

 

 

 

추가된 설정 항목에서 프로덕션 리스너 포트를 443으로 설정해주고 대상 그룹 이름에서 로드밸런서 그룹을 선택해주면 나머지 항목들이 그룹에 맞춰서 자동 설정이 된다.

 

다음으로 넘어가자.

 

 

Auto Scaling 설정 화면인데 여기에선 지정하지 않는다. 다음 화면은 검토 화면이 나오는데 설정이 제대로 되어있는지 확인 후 서비스 생성을 누르면 몇몇 진행과정이 보이고 문제가 없으면 서비스 생성이 완료된다.

 

사실상 여기까지가 ECS의 설정이 완료된것이지만 아까 동적포트매핑을 설정한 경우 보안그룹설정을 추가적으로 해야한다.

우리가 ECS에 연결한 ELB는 주기적으로 Health checks를 해주는데 지금 상황에선 이 Health checks가 우리가 배포한 서버까지 도달하지 않는다. 그래서 추가적으로 보안그룹 설정을 해주도록 하자.

 

EC2 인스턴스 목록을 보면 ECS에서 클러스터 목적으로 사용중인 EC2 인스턴스가 있다.

이런식으로 이름이 EC2ContainerService 라고 되어있는 인스턴스가 있을것이다. 

해당 인스턴스로 들어가 보안탭의 보안 그룹을 들어가보자.

후......

빨간색으로 표시된 부분을 클릭하면 보안그룹 화면으로 이동하는데, 여기서 인바운드 규칙 편집을 누르면 다음과 같은 화면이 나온다.

규칙 추가 를 누르고 포트 범위를 32768 - 65535 로 지정해주자. 서비스에서 새로운 작업으로 넘어갈 때 포트가 32768 ~ 65535 사이의 포트로 자동배정되기 때문에 이렇게 범위를 지정했다. 다음으로 돋보기 아이콘이 있는 인풋을 누르고 목록에서 ELB에서 사용중인 Security group을 지정해주면 된다.

 

이렇게 완료 후 ECS - 클러스터 - 서비스 - 배포 탭에서 롤아웃 상태가 완료됨으로 뜨면 제대로 배포가 완료된것이며, 배포과정은 서비스의 이벤트 항목을 통해 간접적으로 현재 상태를 알 수 있다.

 

 

'개발-사용기 > aws' 카테고리의 다른 글

AWS Certificate Manager (https 적용하기)  (0) 2021.05.20
AWS Codebuild  (0) 2021.05.18
AWS ECR 사용기  (0) 2021.05.13
AWS credential, configure, cli, profile  (0) 2021.05.04