AWS에서 ECS(Elastic Container Service)의 서비스(ECS Service)를 통해 작업 정의(컨테이너)를 관리할 수 있습니다. 로드 밸런서와 연동하여 트랙픽을 다중 컨테이너에 분산할 수 있습니다. Auto Scailing을 사용하여 사용량에 기반하여 컨테이너 개수를 조절할 수 있습니다.

이 문서에서는 서비스(ECS Service)를 구성하는 방법을 알아보겠습니다.

사전 준비

ECS 서비스를 구성하기 위해서 EBL를 생성합니다.

  • EC2 Console에 접속 > 왼쪽 메뉴 > 로드 밸런싱 > 로드밸런서 선택

  • 메인 화면 > 로드 밸런서 생성 버튼 선택

  • 로드밸런서 유형 선택 > Application Load Balancer > 생성 버튼 선택

  • 기본 구성 > 이름 > cicd-demo 입력

  • 리스너 > 기본 값인 HTTP, 80 그대로 사용(애플리케이션 접속시 http를 사용하여 접속)

  • 가용 영역 > VPC, 가용 영역 및 Subnet(Public) 선택 > 다음 버튼 선택

  • 보안 설정은 변경 없이 다음 버튼 선택

  • 보안 그룹 구성

    • 보안 그룹 할당 > 새 보안 그룹 생성 선택
    • 보안 그룹 이름에 cicd-demo 입력
    • 설명에 Allow http 입력
    • 유형 HTTP 선택 > 다음 버튼 선택

  • 대상 그룹

    • 대상 그룹 > 새 대상 그룹 선택
    • 이름 cicd-demo-service 입력

  • 상태 검사

    • 고급 상태 검사 설정 확장
    • 포트 > 재정의 선택 > 8080 입력(작업 정의에서 컨테이너 포트를 8080으로 지정)

  • 대상 등록은 설정 변경 없이 다음 버튼 선택

  • 전체적으로 검토 > 생성 버튼 선택

서비스 생성하기

  • ECS Console에 접속 > 왼쪽 메뉴 > Amazon ECS > 클러스터 선택

  • 클러스터 리스트 > cicd-demo 선택

  • 서비스 탭 > 생성 버튼 선택

  • 서비스 구성

    • 시작 유형 > FARGATE 선택
    • 서비스 이름 > cicd-demo 입력
    • 작업 개수 > 2 입력

  • Deployments > Rolling Update 선택 > 다음 버튼 선택

    참고

    - Rolling Update는 기존 버전의 인스턴스를 순차적으로 새로운 버전으로 업데이트하는 방식입니다. 새로운 인스턴스를 생성하지 않기 때문에 비용 효율적입니다.
    - Blue/green deployment는 기존 버전의 인스턴스만큼 새로운 버전의 인스턴스를 배포합니다. 새로운 버전을 테스트하고 트래픽을 일시에 기존 버전에서 새로운 버전으로 이동할 수 있습니다. 새로운 인스턴스를 기존 버전만큼 생성해야하므로 비용면에서 상대적으로 비효율적입니다.

  • 네트워크 구성 > VPC 및 보안 그룹

    • 클러스터 VPC > 컨테이너가 위치할 VPC를 선택
    • 서브넷 > 컨테이너가 위치할 서브넷을 선택(이 문서에서는 Private 서브넷을 기준으로 작성함)
    • 보안 그룹 > 편집 선택 > 보안 그룹 구성
    • 자동 할당 퍼블릭 IP > DISABLED 선택

      경고

      - 자동 할당 퍼블릭 IP를 DISABLED로 선택할 경우 컨테이너에 퍼블릭 IP가 할당되지 않습니다. 컨테이너에서 외부와의 통신을 하려면 컨테이너가 위치한 Private 서브넷이 외부와 통신할 수 있는 NAT와 연결되어야 합니다.
      - 자동 할당 퍼블릭 IP를 ENABLED로 선택할 경우 컨테이너에 퍼블릭 IP가 할당됩니다. 컨테이너는 Public 서브넷에 위치하고 해당 서브넷은 IGW(Internet Gateway)와 연결되어 있어야 합니다.

    • 보안 그룹 구성

      • 할당된 보안 그룹 > 새 보안 그룹 생성 선택
      • 보안 그룹 이름 > cicd-demo-service 입력
      • 인바운드 규칙 > 유형에서 Custom TCP 선택 > 포트 범위 8080 입력(로드밸런서에서 컨테이너의 8080 포트로의 인바운드 트래픽)

  • Elastic Load Balancing

    • ELB 유형 > Application Load Balancer 선택
    • ELB 이름 > cicd-demo 선택(사전 준비에서 생성)

  • 로드를 밸런싱할 컨테이너

    • cicd-demo:8080:8080 선택(작업 정의에서 생성) > ELB에 추가 버튼 선택

    • 리스너 포트 > 80:HTTP 선택(사전 준비에서 생성)
    • 대상 그룹 이름 > cicd-demo-service 선택

  • 다른 설정은 기본 설정을 사용 > 다음 단계 버튼 선택

  • 서비스 Auto Scaling은 사용하지 않음 > 다음 단계 선택

  • 서비스 검토를 전반적으로 하고 생성하기 버튼 선택해서 서비스 생성 완료

서비스 확인

이제 서비스가 정상적으로 구성되었는지 확인해보겠습니다.

  • ECS Console에 접속 > 왼쪽 메뉴 > Amazon ECS > 클러스터 선택

  • 클러스터 리스트 > cicd-demo 선택

  • 서비스 탭 선택 > 상태가 Active인지 확인

  • 작업 탭 선택 > 마지막/원하는 상태가 Running인지 확인

  • EC2 Console에 접속 > 왼쪽 메뉴 > 로드 밸런싱 > 로드밸런서 선택

  • 로드밸런서 리스트 > cicd-demo 선택

  • 대상 탭 선택 > 등록된 대상 > 상태가 healthy인지 확인

  • 설명 탭 선택 > DNS 이름 복사

  • 웹 브라우저 > 복사한 DNS 이름 붙여넣고 접속 > 서비스 정상 접속 확인

Blue/green deployment(선택)

위 과정에서는 서비스 생성 시 deployment 방식을 Rolling Update로 선택했습니다.

Blue/green deployment를 활용하는 방법을 살펴보겠습니다.

사전 준비

Blue/green deployment 방식으로 서비스를 생성하는 경우 CodeDeploy에 애플리케이션 및 배포 그룹이 자동 생성됩니다.

이를 위해 CodeDeploy 서비스 권한이 있는 IAM 역할 생성이 필요합니다.

  • IAM Console에 접속 > 왼쪽 메뉴 > AWS Account > 역할 선택

  • 메인 화면 > 역할 만들기 버튼 선택

  • 신뢰할 수 있는 유형의 개체 선택 > AWS 서비스 선택

  • 이 역할을 사용할 서비스 선택 > CodeDeploy 선택 > CodeDeploy - ECS 선택 > 다음 버튼 선택

  • 설정 변경 없이 다음 버튼 선택

  • 설정 변경 없이 다음 버튼 선택

  • 역할 이름 > codedeploy-cicd-demo-role 입력 > 역할 만들기 선택

서비스 생성

Blue/green deployment 방식으로 서비스를 생성하는 경우 Rolling Update 방식과 아래 과정만 다릅니다.

  • Deployments
    • Deployment type > Blue/green deployment 선택
    • Service role for CodeDeploy > 다음 버튼 선택
  • Additional configuration
    • Target group 1 name > cicd-demo-service 선택
    • Target group 2 name > 새로 생성 선택 > cicd-demo-service-green 입력
    • Target group 2 protocol > HTTP 선택

서비스 확인

서비스 확인 방법도 Rolling Update와 동일합니다.

다른 점은 Blue/green deployment 방식으로 서비스를 생성하는 경우 CodeDeploy에 애플리케이션 및 배포 그룹이 자동 생성됩니다.

  • CodeDeploy console 접속 > 왼쪽 메뉴의 애플리케이션 선택

  • 애플리케이션 리스트 > AppECS-cicd-demo-cicd-demo 선택

  • 배포 그룹 리스트 > DgpECS-cicd-demo-cicd-demo 선택

  • 배포 그룹 확인