클라우드 Cloud/아마존웹서비스 AWS

AWS ECS(Elastic Container Service)를 활용한 HTTP 서버 구축 실습 예시

Tap to restart 2024. 8. 31. 11:00

ECS란?

"Amazon Elastic Container Service(Amazon ECS)는 컨테이너 애플리케이션을 쉽게 배포, 관리 및 확대할 수 있도록 도와주는 완전 관리형 컨테이너 오케스트레이션 서비스"(출처: Amazon Elastic Container Service란 무엇입니까?)
쿠버네티스Kubernetes 같은 컨테이너 오케스트레이션을 제공해주되 AWS가 완전 관리해줘서 좀 더 쉽고 편하게 쓸 수 있습니다.
 
 

ECS 서비스 화면 들어가기

검색창에 ecs를 입력하면 Elastic Container Service가 맨 위에 나옵니다. 해당 서비스를 클릭합니다.

 
아래 같은 화면이 보입니다.

 

클러스터 생성

실습을 위한 것이니 고민하지 않고 클러스터 이름에 ecs-cluster 라고 입력합니다. 인프라는 기본값인 AWS Fargate 그대로 두고 생성을 누릅니다.

 
아래 같은 화면이 나타나고

 
새로 고침 버튼을 누르면 ecs-cluster가 추가된 것을 볼 수 있습니다.

 
ecs-cluster를 눌러서 들어가면 아래와 같은 화면이 나타납니다.

 
서비스 없음이라고 보이고 생성 버튼을 누르라고 나옵니다.
서비스 생성 전에 먼저 태스크 정의부터 해야 합니다. 
 

태스크 정의

왼쪽 편에 있는 메뉴에서 태스크 정의를 누릅니다.

 
태스크 정의를 누르면 아래와 같은 화면이 보입니다.

 
 
주황색 새 태스크 정의 생성 버튼을 누릅니다.
버튼을 누르면 새 태스크 정의 생성, JSON을 사용하여 새 태스크 정의 생성 두가지 버튼이 나옵니다.
새 태크스 정의 생성은 화면 UI를 바탕으로 생성하는 것이고 JSON을 사용하여는 말그대로 JSON으로 정의 생성하는 것입니다.
UI를 바탕으로 생성해도 결국 JSON으로 관리됩니다.

 
 
처음이니 UI를 바탕으로 생성하도록 새 태스크 정의 생성 버튼을 누릅니다.
 
아래와 같은 화면이 나타납니다. 
태스크 정의 구성에 태스크 정의 패밀리에는 http-task-def 라고 입력해봅니다.
인프라 요구 사항에는 AWS Fargate 그대로 두고 CPU와 메모리를 최소값으로 입력합니다. 메모리 먼저 .5 GB로 변경해야 CPU를 .25 vCPU로 변경할 수 있습니다.

 
 
컨테이너 - 1 정보에는 아래처럼 이름에는 httpd-container 이미지 URI는 httpd:latest라고 입력합니다. 
https://hub.docker.com/_/httpd 도커이미지 정보입니다. 리소스 할당 제한에도 .25, .5라고 위에 입력한 것과 맞춰서 입력합니다.
- 1이란 이름처럼 한 태스크에 컨테이너를 여러 개 추가할 수 있음을 알 수 있습니다.
예를 들면 보통 한 태스크에 하나의 컨테이너만 두는 것을 선호하지만, http 서버 컨테이너도 두고 Redis 컨테이너도 같이 둘 수도 있겠죠.

 
 
로깅 수집 사용은 기본값 그대로 둡니다.

 
 
맨 아래쪽 생성 버튼을 클릭합니다. 태스크 정의가 생성된 것을 볼 수 있습니다.

 
JSON을 누르면 태스크 정의가 JSON으로 구성된 것을 확인할 수 있습니다.

 
 
CloudWatch 서비스로 가서 로그 그룹을 보면 http-task-def가 생긴 것을 볼 수 있습니다.

 
 
이제 다시 ecs-cluster로 가서 서비스를 생성할 차례입니다.
 

서비스 생성

ecs-cluster에서 서비스 쪽에 주황색 생성 버튼을 클릭합니다.

 
 
환경은 기본값 그대로 두고 넘어갑니다.

 
 
배포 구성에서는 패밀리를 http-task-def를 선택하고 최신으로 둡니다. 서비스 이름은 http-service라고 입력합니다.

 
 
네트워킹으로 갑니다.

 
 
네크워킹에서 Create a new VPC 버튼을 누릅니다.
 

VPC 생성하기

 
아래와 같은 화면이 나타납니다.

 
 
VPC 등을 선택합니다.
그리고 ecs라고 이름 태그를 입력합니다.

 
 
아래처럼 가용 영역 2 퍼블릭 서브넷 수 2 프라이빗 서브넷 수 2로 해서 VPC 생성 버튼을 클릭합니다.

 
 
생성이 완료되었습니다.
 
 
다시 네트워킹으로 돌아가서 Create a new VPC 옆에 새로 고침 버튼을 누릅니다.

 
방금 만든 ecs-vpc를 클릭합니다. 여기서 우선 subnet을 private만 둡니다. subnet 밑에 잘보면 private public이라고 작게 적혀 있습니다. 이렇게 해야 나중에 생성될 태스크들이 private subnet에 생깁니다.
 

 

보안 그룹 생성

EC2 서비스 화면으로 갑니다.
왼쪽 메뉴 아래쪽에 네트워크 및 보안에 보안 그룹이 있습니다. 보안 그룹을 클릭합니다.

 
 
보안 그룹 생성을 클릭합니다.

 
 
아래처럼 보안 그룹 이름에 ecs-sg라고 입력하고 VPC는 ecs-vpc 선택하고 인바운드 규칙에는 HTTP, 소스는 Anywhere를 선택해서 생성합니다.

 
 
서비스 생성으로 돌아와서 보안 그룹을 ecs-sg를 선택하고 퍼블릭 IP는 꺼짐으로 합니다.

 

로드 밸런서 생성

EC2 서비스 화면으로 갑니다.
왼쪽 메뉴 아래쪽에 로드 밸런싱이 있습니다. 로드밸런서를 클릭합니다.

 
 
로드 밸런서 화면이 나타납니다. 로드 밸런서 생성 버튼을 누릅니다.

 
 
유형 중에 Application Load Balancer 밑에 생성 버튼을 클릭합니다.

 
 
로드 밸런서 이름에 ecs-alb라고 입력합니다. 체계는 인터넷 경계 그대로 둡니다.

 
 
네트워크 매핑에서 ecs-vpc로 선택하고 가용 영역에서 public 서브넷을 선택합니다.

 
 
보안 그룹에서는 앞에서 만들어둔 ecs-sg를 선택합니다.

 
 
다음은 리스너 및 라우팅입니다.
대상 그룹을 만들어야 합니다. 대상 그룹 생성 버튼을 클릭합니다.

 

대상 그룹 생성

 
IP 주소로 하고 대상 그룹 이름을 ecs-http-tg 라고 입력합니다.

 
HTTP 80 그대로 하고 VPC를 ecs-vpc로 합니다.

 
 
상태 검사는 기본 설정 그대로 하고 다음을 클릭합니다.

 
10.0.0.0/16이라고 입력하고

 
대상 그룹 생성 버튼을 클릭합니다. 
대상 그룹이 만들어졌습니다.
 
다시 로드 밸런서로 돌아갑니다. 
리스너 및 라우팅에서 방금 만든 ecs-http-tg를 선택합니다.

 
아래로 내려가서 로드 밸런서 생성 버튼을 클릭합니다.

 
로드 밸런서가 만들어졌습니다.
 
다시 서비스 생성으로 돌아갑니다.
로드 밸런싱에서 방금 만든 로드 밸런서를 활용해서 아래와 같이 설정합니다.

 

 
이제 맨 아래 쪽으로 가서 서비스 생성을 클릭합니다. 
http-service 배포가 진행되며 서비스 목록에 http-service가 추가된 것을 확인할 수 있습니다.

 

 
조금 기다렸다가 배포가 완료된 뒤에 http-service를 눌러보면 아래처럼 나타납니다.

 

 

서버 작동 확인하기!

 
로드 밸런서 보기 버튼이 있습니다. 클릭합니다.
 
로드 밸런서로 가면 DNS 이름이 있습니다. 
ecs-alb-919583371.ap-northeast-2.elb.amazonaws.com 입니다.

 
이 주소를 브라우저에 입력합니다.
ecs-alb-919583371.ap-northeast-2.elb.amazonaws.com 
 
It works! 작동하는 것을 확인할 수 있습니다.
 

 

ecs-alb-919583371.ap-northeast-2.elb.amazonaws.com 주소를 route53에서 도메인과 연결하면 해당 도메인으로 http 서버에 접속할 수 있게 됩니다. 실습이 끝났으면 VPC 등 모두 삭제하는 게 좋습니다. 과금될 수 있습니다.
 
위 예시를 응용하면 한 클러스터에 여러 서비스를 추가하는 것도 쉽게 할 수 있습니다.