Amazon Elastic Container Service (ECS)
AWS에서 제공하는 관리형 컨테이너 오케스트레이션 서비스, 컨테이너화된 애플리케이션의 배포, 관리 및 확장을 간편하게 할 수 있도록 돕는다. ECS는 Docker와 같은 컨테이너 런타임을 지원하며, AWS 클라우드에서 애플리케이션을 손쉽게 실행하고 관리할 수 있게 인프라를 제공한다.
특징
- 관리형 클러스터
ECS는 컨테이너를 실행할 EC2 인스턴스를 클러스터로 묶어 관리한다.
클러스터는 여러 EC2 인스턴스를 포함할 수 있다. - Service
ECS에서 서비스는 여러 개의 Task로 구성되어, 주로 애플리케이션의 지속적인 실행을 보장하는데 사용된다.
서비스는 EC2 인스턴스 또는 **Fargate와 함꼐 사용할 수 있다. - Task
태스크는 하나 이상의 컨테이너로 구성되며, ECS에서는 이 단위로 애플리케이션을 관리한다. - Fargate
서버리스 컨테이너 실행 모델을 제공하며, 사용자가 직접 EC2 인스턴스를 관리할 필요 없이 컨테이너만 실행할 수 있게 돕는다. - 컨테이너 오케스트레이션
ECS는 컨테이너의 배치, 로드 밸런싱, 자동 확장(Auto scaling) 등 컨테이너 운영에 필요한 모든 기능을 지원한다.
아키텍처
- ECS on EC2
EC2 인스턴스를 사용하여 클러스터를 구성하고, 그 인스턴스에서 컨테이너를 실행하는 방식.
사용자가 직접 EC2 인스턴스를 관리하는 방식이다. - ECS on Fargate
서버리스 방식으로 ECS를 사용하는 방식. Fargate는 ECS가 컨테이너를 실행하는 데 필요한 컴퓨팅 리소스를 자동으로 제공하며 사용자는 컨테이너 정의만 하면 된다.
클러스터 생성 (ECS on EC2)
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/create-ec2-cluster-console-v2.html
- 클러스터 이름 설정
- 인프라에서 EC2 인스턴스를 선택
- Auto Scaling 그룹 설정
Ec2 인스턴스의 수를 자동으로 관리하고 조정할 수 있도록 도와주는 AWS의 기능이다. ECS 클러스터를 EC2 인스턴스로 실행할 때, Auto Scaling 그룹을 사용하면 클러스터의 가용성과 확장성을 크게 향상시킬 수 있다고 한다.
- 자동 확장 : EC2 인스턴스의 부하에 따라 자동으로 인스턴스를 추가하거나 제거한다.
- 가용성 유지: 지정한 최소 인스턴스 수를 항상 유지한다. (중단, 장애가 발생하면 자동으로 새로운 인스턴스를 시작해서 유지)
- 유연한 배포: 특정 시간대에 트래픽이 많거나 적을 것을 예상하면 스케줄링 기반으로 확장/축소가 가능
- 지리적 확장: Auto Scaling 그룹은 여러 가용 영역에 걸쳐 인스턴스를 분산하여 고가용성을 보장 할 수 있다.
- 옵션
- Auto Scaling 그룹
- ECS 클러스터에서 사용할 EC2 인스턴스의 수를 관리하는 그룹
장애가 발생하면 인스턴스를 자동으로 교체하거나 기준에 따라 확장하고 축소한다.
이미 인스턴스가 존재한다면 그룹을 생성하지 않고 기존 인스턴스를 클러스터에 추가하면 됌.
- ECS 클러스터에서 사용할 EC2 인스턴스의 수를 관리하는 그룹
- 프로비저닝 모델
- 온디맨드: 필요할 떄마다 EC2 인스턴스를 실행하고 표준 요금으로 결제
- 스팟: 사용하지 않는 EC2 용량을 저렴한 가격으로 제공
- 이미 존재하는 EC2 인스턴스를 사용할 경우 모델을 선택하지 않고 기존 인스턴스를 클러스터에 연결하면 됌.
- Auto Scaling 그룹
- SSH 키페어 등록
- 클러스터 생성이 되면 ECR, 태스크, 그리고 서비스를 생성해야한다.
- ECR
Amazon Elastic Container Registry
AWS에서 제공하는 완전 관리형 컨테이너 이미지 레지스트리
도커와 같은 컨테이너 환경에서 사용할 이미지를 저장하고 관리하며 ECS와 원활하게 통합된다.
최초에 이미지를 하나 올려주는데, 이 때 명령어 실행과정에서 최초로 aws cli를 설치하고 aws configure을 통해 aws 계정 설정을 해야한다.- aws cli 설치 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html
- aws cli를 설치하고 aws configure을 통해 aws 계정을 설정해줘야 한다.
- 설정이 끝나면 ECR내에 푸시명령보기를 보고 이미지를 빌드하고 푸시해주면 된다.
- Task
컨테이너 실행의 단위를 의미한다.
Task Definition에 따라 실행되며, Task Definition에서 지정한 도커 컨테이너와 그 실행 환경을 기반으로 실행된다.
이미지는 위에서 생성한 ECR에서 가져오도록 설정한다.- 네트워크 모드는 bridge로 해주도록 하자.
- bridge : 기본 도커 네트워크 모드, 컨테이너 들이 도커 엔진의 가상 네트워크를 공유한다.
즉, ECS 태스크 내의 모든 컨테이너가 동일한 가상 네트워크를 사용해서, 동일한 EC2 인스턴스 내에서 여러 컨테이너들이 서로 네트워크를 공유하는 방식이다.
- bridge : 기본 도커 네트워크 모드, 컨테이너 들이 도커 엔진의 가상 네트워크를 공유한다.
- 네트워크 모드는 bridge로 해주도록 하자.
- Service
ECS에서 서비스는 Task를 실행하고 관리하는 역할을 한다.
Task는 정의된 대로 배포된 Container Set을 말한다. 이 Task들의 라이프 사이클을 관리하는것이 서비스인 것이다.
서비스를 등록하면 ECS가 지정된 수의 Task를 클러스터에서 항상 실행하도록 보장한다.
- ECR
'BackEnd' 카테고리의 다른 글
| [bcrypt] 비밀번호가 관리되는 방식 (0) | 2024.12.27 |
|---|---|
| 파일 송수신[1] (feat. S3, ws) (2) | 2024.12.19 |
| nestJS 실시간 채팅 앱 - [9] logging (winston) (0) | 2024.12.09 |
| 서버 모니터링 (feat. prometheus, grafana) (0) | 2024.12.08 |
| 웹소켓 연결 관리 (NestJS) (3) | 2024.11.28 |