본문 바로가기
카테고리 없음

[AWS] Amazon Elastic Container Service(ECS) 서비스: 클러스터 생성과 서비스 배포

by sum_mit45 2024. 11. 18.
728x90
반응형
11월 18일(월) AWS 실습 내용 중

 

Amazon Elastic Container Service (ECS)는 AWS에서 제공하는 확장 가능한 컨테이너 관리 서비스로, 도커 컨테이너를 클라우드에서 손쉽게 실행하고 관리할 수 있도록 도와준다. ECS는 애플리케이션을 배포하고 확장하는 데 필요한 모든 인프라와 관리를 추상화할 때 사용한다. ECS를 사용하면 컨테이너화된 애플리케이션을 관리하는 데 필요한 많은 작업을 AWS가 대신 처리해주기 때문에, 효율적인 CI/CD 파이프라인 구축에 큰 도움이 된다. 이번 실습에서는 ECS의 주요 작업 흐름인 클러스터 생성, 태스크 정의 생성, 서비스 배포까지의 과정에 대해 진행했습니다. 

1. ECS 클러스터 생성

ECS에서 애플리케이션을 실행하려면 먼저 클러스터를 생성해야한다. 클러스터는 ECS에서 실행되는 컨테이너들을 관리하는 논리적인 그룹이다. 

클러스터 생성하기

(1) AWS Management Console에 로그인한 후, ECS 서비스로 이동

Elastic Container Service 검색

 

(2) 클러스터 메뉴를 선택하고 [클러스터 생성] 버튼 클릭

[클러스터 생성] 버튼

(3) 클러스터 구성하기 

클러스터 구성(1) - 이름 및 인프라 설정

 

클러스터 이름을 입력하고 필요한 인프라 설정을 진행한다.

  • 클러스터 이름: ECS 클러스터는 컨테이너와 태스크를 관리하는 논리적인 그룹을 정의, 클러스터 이름은 이 그룹을 식별하는 고유한 이름
  • 기본 네임스페이스: ECS에서 자원을 논리적으록 구분하는 역할. 주로 리소스 격리하고 조직하는 데 사용
  • 인프라
    • Fargate: 서버리스 방식으로, EC2 인스턴스를 직접 관리하지 않고 컨테이너를 실행.
    • EC2 Linux + Networking: EC2 인스턴스를 사용하여 컨테이너를 실행하는 방식.
  • 모니터링, 암호화 등 추가 설정을 해 줄 수 있다. 

클러스터가 생성되면, 해당 클러스터 내에서 컨테이너 작업을 실행할 수 있다.

2. ECS 태스크 정의 생성

태스크 정의(Task Definition)는 ECS에서 실행할 애플리케이션의 사양을 정의하는 중요한 요소이다. 태스크 정의는 컨테이너의 이미지, 리소스 요구 사항(CPU, 메모리 등), 네트워크 설정 등을 포함한다. 하나의 태스크 정의는 여러 컨테이너를 포함할 수 있으며, 컨테이너의 배포 방법을 결정한다.

태스크 정의 생성 절차

(1) ECS 대시보드에서 Task Definitions를 클릭하고, Create new Task Definition을 선택

[새 태스크 정의 생성] 버튼 클릭

(2) 태스크 정의 구성

태스크 정의 생성(1) - 구성 및 인프라
태스크 정의 생성(2) - 태스크 역할

  • 태스크 정의 패밀리: 여러 버전의 태스크 정의를 관리하는 그룹. 같은 애플리케이션의 여러 버전이 있을 때, 동일한 패밀리 내에서 태스크 정의를 관리하여 쉽게 버전을 업데이트하거나 롤백할 수 있다.
  • 태스크 정의 시작 유형 선택:
    • Fargate: 서버리스 방식으로, 사용자는 인프라를 관리할 필요 없이 컨테이너를 실행할 수 있다. 자동으로 리소스를 할당하고 확장해 준다.
    • EC2: EC2 인스턴스에서 컨테이너를 실행하는 방식으로, 인프라를 관리해야 하지만 더 세밀한 리소스 관리와 비용 절감 가능.

태스크 정의 생성(3) - 컨테이너 생성

  • 실행할 컨테이너의 설정 추가:
    • 컨테이너 이름: 각 컨테이너를 고유하게 식별할 수 있는 이름을 설정한다. 
    • 도커 이미지 URL: 실행할 컨테이너의 도커 이미지를 지정하는 URL로, ECR(AWS Elastic Container Registry)와 같은 레지스트리에서 이미지를 가져온다. => 나는 docker hub에서 Nginx를 가져오도록 설정했다. 
    • CPU와 메모리 할당: 컨테이너에 할당할 CPU 및 메모리 리소스를 지정합니다. Fargate의 경우 자동으로 리소스를 할당하지만, EC2의 경우 더 세밀한 리소스 관리를 할 수 있다.
    • 포트 매핑: 컨테이너가 사용할 포트를 호스트와 연결하여, 외부에서 해당 포트를 통해 컨테이너에 접근할 수 있도록 설정한다.
    • 환경 변수: 컨테이너 내부에서 사용할 환경 변수를 설정하여, 애플리케이션의 동작을 구성할 수 있습니다. 예를 들어, 데이터베이스 연결 정보나 API 키를 환경 변수로 설정할 수 있다.

 

설정을 완료하고 [Create]를 클릭하여 태스크 정의를 생성한다. 

 

태스크 정의가 준비되면, 이제 [서비스]를 생성하여 태스크를 클러스터에서 실행할 수 있다.

클러스터 생성 완료

클러스터 생성

이렇게 클러스터가 생성된 것을 확인할 수 있다. nginxtesttask:1 여기서 숫자 값은 revision number 이다. 

3. ECS 서비스 만들기

서비스(Service)는 ECS에서 태스크 정의를 실행하는 단위다. 서비스를 사용하면 애플리케이션을 지속적으로 실행하고, 필요에 따라 자동으로 확장하거나 축소할 수 있다. 서비스는 여러 개의 태스크(Task) 인스턴스를 생성하여 고가용성 및 확장성을 제공한다.

서비스 생성 절차

(1) ECS 대시보드에서 Clusters를 클릭, 클러스터 내에서 [생성] 버튼을 클릭

(2) 서비스 생성 구성

서비스 생성(1) - 환경

  • 용량 공급자 전략 (Capacity Provider Strategy): ECS에서 태스크를 실행할 리소스를 관리하는 방식으로, EC2 인스턴스 또는 Fargate와 같은 다른 리소스 제공자를 선택한다. 
  • 시작 유형 (Launch Type): ECS에서 태스크를 실행할 환경을 정의하는 옵션으로, EC2 인스턴스 또는 Fargate를 선택할 수 있다.
  • 시작 유형은 FARGATE로 플랫폼 버전은 LATEST로 선택했다. 

서비스 생성(2) - 배포 구성

  • 서비스 (Service): ECS에서 실행되는 태스크의 수를 지속적으로 유지하도록 관리하는 구성으로, 트래픽을 처리할 수 있도록 로드 밸런싱 및 자동 스케일링을 설정할 수 있다. 서비스는 고정된 수의 태스크를 유지하며, 장애 발생 시 태스크를 자동으로 교체한다.
  • 태스크 (Task): ECS에서 실제로 실행되는 단일 컨테이너의 인스턴스를 의미하며, 서비스와 달리 지속적으로 관리되지 않는다. 태스크는 하나의 실행 단위로, 서비스 없이 독립적으로 실행될 수 있다.
  • 원하는 태스크: 3으로 설정하였다. 
  • 나는 [서비스]로 만들었고, 서비스 이름을 작성해준다. 
 

서비스 생성(3) - 네트워킹

  • VPC (Virtual Private Cloud): AWS에서 가상 네트워크를 생성할 수 있게 해주는 서비스로, 사용자 정의 IP 주소 범위, 서브넷, 라우팅 테이블, 인터넷 게이트웨이 등을 설정하여 AWS 리소스를 안전하게 분리하고 관리할 수 있다.
  • 서브넷 (Subnet): VPC 내에서 IP 주소 범위를 분리하여 작은 네트워크 세그먼트를 만들 수 있게 해주는 구성 요소. 서브넷은 리전 내에서 생성할 수 있으며, 퍼블릭 서브넷(인터넷과 연결된)과 프라이빗 서브넷(인터넷과 연결되지 않은)으로 구분된다. 나는 [서울] 리전 내에서 서브넷이 생성되었다. 
  • 퍼블릭 IP (Public IP): 인터넷과 연결된 리소스를 식별할 수 있도록 할당되는 IP 주소. 서비스에 퍼블릭 IP가 생성된다.

서비스 생성(4) - 로드밸런싱

 

 

  • 로드밸런서 유형
    • Application Load Balancer (ALB): HTTP/HTTPS 요청을 처리하는 로드밸런서로, 계층 7(Application Layer)에서 작동. 주로 웹 애플리케이션에 사용되며, URL 경로, 호스트 헤더, 쿠키 등의 요청 정보를 기반으로 트래픽을 라우팅할 수 있다.
    • Network Load Balancer (NLB): TCP 및 UDP 트래픽을 처리하는 로드밸런서로, 계층 4(Network Layer)에서 작동. 높은 성능과 저지연성을 제공하며, 주로 실시간 애플리케이션에 적합.
    • Classic Load Balancer (CLB): HTTP, HTTPS, TCP 요청을 처리하는 이전 버전의 로드밸런서로, ALB와 NLB의 특성을 결합하여 제공하며, 기존의 EC2 인스턴스와 함께 사용될 수 있다.

서비스 실행 화면

 

 

서비스 생성을 클릭하여 ECS 클러스터 내에서 태스크를 실행하는 서비스를 배포한다. 서비스가 생성되면, ECS는 지정된 수의 태스크를 실행하고, 상태를 모니터링한다. 로드 밸런서가 설정된 경우, 트래픽은 자동으로 각 태스크에 분배된다.

4. 서비스 확인

[서비스] > [로드 밸런서 보기]

 

해당 서비스 안에서 [로드 밸런서 보기] 안으로 들어가면 DNS 이름이 나온다. 

해당 URL로 접속하고, 위에서 설정한 80포트로 들어가면 아래와 같은 화면을 볼 수 있다.

nginx 서버 접속

🧐 혹시 사이트에 보안 연결할 수 없음 오류가 발생한다면

사이트 보안 연결할 수 없음

 

해당 서비스의 보안 그룹의 인바운드 규칙에 80포트가 열려 있는지 확인하고, HTTPS가 아닌 HTTP로 들어가면 된다. 

728x90
반응형