ECS는 OS를 포함하지 않아 가볍고, 빠른 배포, 빠른 기동이 가능한 컨테이너 오케스트레이션 서비스이다.
AWS EC2 의 경우 컨테이너를 EC2 서버에 배치하고, 이를 클러스터로 묶어 관리하며
Fargate의 경우 서버 또는 클러스터를 관리할 필요 없이 컨테이너를 논리적으로 관리하는 형태이다.
아래 내용은 AWS ECS Cluster 생성 및 구성 방법에 대한 설명이다.
클러스터 생성
ECS에서 왼쪽 사이드메뉴에서 클러스터로 이동해 클러스터 생성을 선택한다.
ECS 클러스터 템플릿은 3가지로 제공된다.
- 네트워킹 전용 - AWS Fargate
- EC2 Linux + 네트워킹
- EC2 Window + 네트워킹
Cluster 주요 설정을 반영한다.
클러스터 이름 설정
인스턴스 구성
EC2 인스턴스 유형은 어떤 리소스를 할당할 것인가에 따라 사용할 인스턴스가 달라진다.
네트워킹
ECS에서 사용할 IAM역할을 선택해준다.
해당 IAM에는 AmazonEC2ContainerServiceforEC2Role 권한이 있다.
정상적으로 생성되면 ECS Cluster 에서 생성된 인스턴스를 확인할 수 있다.
ELB 설정하기
EndPoint에 트래픽을 분산하기 위해 로드밸런서를 생성한다.
ECS Task Definition 생성
ECS의 최소 실행 단위읜 테스크를 실행하기 위한 설정을 저장하는 곳이다.
ECS -> 작업 정의 -> 새 작업 정의 생성으로 이동한다.
Fargate 의 경우 별도의 인스턴스가 필요없으며 Serverless기반으로 사용한 만큼만 요금이 부과되며
EC2의 경우 리소스 사용량 기반의 요금이 부과된다.
테스크 이름을 정의하고
네트워크 모드는 브리지를 선택해준다.
작업 메모리는 1GB,CPU는 512MB 를 입력한다.
컨테이너 추가
Task Definition에서 사용할 컨테이너를 추가해준다.
이미지 경로의 경우 ECR Repository를 입력한다.
[Registry-url]/[Namespace]/[Image]:[Tag]
포트 매핑에서 호스트 포트는 0, 컨테이너 포트는 도커 이미지를 생성할 때 지정했던 포트를 사용한다.
나는 3000 포트를 사용해서 3000을 입력했다.
서비스 생성
시작 유형은 EC2로 선택하고
이전에 만들어 두었던 Task Definition과 클러스터를 선택해준다.
서비스 이름을 적고 서비스 유형은 REPLICA로 진행한다.
REPLICA : 클러스터 전체에 원하는 수의 태스크를 배치 및 유지
DAEMON : 서비스는 각 컨테이너 인스턴스에서 태스크의 복사본 하나를 저장 및 유지
블루/그린을 선택한 경우 CodeDeploy 서비스를 선택해 주어야 한다.
지금은 롤링 업데이트로 진행한다.
네트워크 구성
컨테이너를 선택하고
컨테이너를 로드 밸런싱에 추가한다.
대상 그룹을 선택하고
해당 컨테이너의 경로 패턴과 상태 확인 경로가 올바른 경로인지 확인한다.
서비스 검색 통합 활성화를 선택하면 아래 내용을 확인할 수 있다.
Auto Scaling 은 선택하지 않고 진행한다.
서비스 생성 완료
생성 확인하기
EC2에 들어가면 인스턴스가 생성된 것을 확인할 수 있고
해당 인스턴스에 ssh로 접속하면 docker 가 설치되어 있는것을 확인할 수 있다.
docker 말고 설치되어 있는 프로그램이 없어서
요한 프로그램은 설치해서 사용하면 된다.
참고 AWS: 프라이빗 리포지토리 생성
https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/repository-create.html