Search

ECS

대분류
DevOps/Tool
소분류
AWS
유형
관리형 컨테이너 오케스트레이션 서비스
주요 레퍼런스
https://velog.io/@hbjs97/AWS-ECS-%EC%9D%B8%ED%94%84%EB%9D%BC-%EA%B5%AC%EC%B6%95
속성
컨테이너 서비스
최종 편집 일시
2024/10/30 15:42
생성 일시
2024/08/14 07:36
13 more properties

ECS

완전 관리형 컨테이너 오케스트레이션 서비스
컨테이너화된 애플리케이션을 쉽게 배포, 관리, 확장할 수 있도록 돕는 서비스이다.
Docker와 같은 컨테이너 런타임 환경을 사용하여 컨테이너화된 애플리케이션을 쉽게 배포하고 실행할 수 있게 해준다.

구성요소

클러스터(Cluster)
컨테이너가 실행되는 리소스들의 집합
EC2 인스턴스나 Fargate 작업이 실행될 수 있다.
작업(Task)
ECS에서 하나의 단위로 실행되는 컨테이너 그룹
각 작업은 여러 개의 컨테이너를 포함할 수 있다.
서비스(Service)
ECS는 애플리케이션의 지속적인 가용성을 보장하기 위해, 일정 수의 작업을 유지하고 관리한다.
Task Definition
작업을 정의하는 청사진(블루프린트)
어떤 컨테이너 이미지를 사용할지, 리소스 할당, 네트워크 설정 등을 포함한다.

클러스터

ECS(Elastic Container Service)에서 클러스터는 컨테이너화된 애플리케이션을 배포하고 관리하는 기본적인 단위

클러스터의 주요 역할

1.
리소스 집합
ECS 클러스터는 컨테이너가 실행되는 인프라(EC2 인스턴스 또는 Fargate)를 포함한다.
클러스터 내의 모든 리소스는 컨테이너가 실행되는 환경을 제공하며, 이를 통해 CPU, 메모리, 네트워크 등의 리소스를 관리한다.
2.
작업 및 서비스 배포
클러스터는 작업(task)과 서비스(service)를 배포하고 관리한다.
작업: 특정 컨테이너의 실행 인스턴스를 의미
서비스: 지속적으로 실행되는 작업 집합을 관리하는 기능
3.
스케일링 및 관리
클러스터는 AWS의 자동 스케일링(Auto Scaling)과 통합되어, 애플리케이션의 부하에 따라 컨테이너 수를 동적으로 조정할 수 있다.
필요할 때 자동으로 더 많은 리소스를 할당하고, 사용량이 줄어들면 리소스를 줄여 비용 효율성을 유지한다.
4.
멀티테넌시 지원
멀티테넌시 하나의 시스템 또는 소프트웨어 인프라를 여러 사용자(테넌트)가 공유하는 아키텍처 각 테넌트는 시스템 내에서 독립적인 데이터와 애플리케이션 환경을 가지지만, 기본적인 하드웨어와 소프트웨어 인프라는 공유하게 된다.
하나의 클러스터에 여러 개의 애플리케이션을 배포할 수 있으며, 각 애플리케이션은 독립적으로 실행되고 관리된다.
이를 통해 여러 팀 또는 여러 애플리케이션이 같은 리소스를 공유하면서도 독립적으로 운영될 수 있다.
5.
보안 및 네트워킹 관리
클러스터 내의 작업은 각각 고유한 네트워크 설정을 가질 수 있으며, 보안 그룹과 VPC 내에서 네트워크 정책을 설정해 보안 및 접근 제어를 할 수 있다.

클러스터 생성

1. 클러스터 구성

2. 인프라(Fargate/EC2)

1.
AWS Fargate (서버리스)
Fargate는 서버를 관리할 필요 없이 컨테이너를 실행할 수 있는 서버리스 옵션이다.
즉, EC2 인스턴스를 직접 관리할 필요 없이 필요한 만큼의 리소스를 AWS가 자동으로 제공해준다.
주로 클러스터의 유지나 관리 오버헤드가 없는 경우 사용된다.
클러스터는 기본적으로 Fargate 및 Fargate 스팟 용량을 공급받아 사용된다.
사용자가 직접 서버를 프로비저닝할 필요가 없으므로, 관리에 소요되는 시간이 줄어든다.
2.
Amazon EC2 인스턴스
직접 서버를 구성하고 관리하고자 할 때 사용한다.
유연한 커스터마이징이 필요하거나, 서버 리소스에 대해 세부적인 제어가 필요할 경우 EC2 인스턴스가 적합하다.
이 경우, 사용자는 리소스의 스케일링과 관리에 대한 책임을 져야 한다.
ECS Anywhere:
이는 외부 인스턴스에서 클러스터를 생성하고 등록할 수 있는 옵션이다.
AWS 외부의 인프라를 AWS 클러스터에 통합할 수 있으며, 온프레미스 또는 다른 클라우드 제공자의 인프라를 AWS ECS 클러스터로 연결하여 사용 가능하다.

3. 모니터링 선택 사항

Container Insights 사용
기본적으로 이 기능은 꺼져 있다. 그러나 사용자가 활성화할 경우 AWS CloudWatch Container Insights를 통해 컨테이너에서 수집한 지표를 모니터링할 수 있다.
모니터링 가능한 지표에는 CPU, 메모리, 디스크, 네트워크와 같은 리소스 사용량이 포함된다.
또한 컨테이너 재시작 실패와 같은 문제를 진단하여 빠르게 해결할 수 있도록 도와준다.
수집된 데이터는 CloudWatch 대시보드에서 시각화되어 실시간으로 모니터링 가능하며, 특정 이상 징후를 감지하면 자동으로 경고를 설정할 수 있다.

4. 암호화 - 선택 사항

관련된 스토리지 암호화
클러스터에서 생성되는 태스크와 데이터 스토리지를 암호화할 수 있는 KMS(Key Management Service) 키를 선택하는 옵션이다.
KMS(Key Management Service) AWS에서 제공하는 키 관리 서비스 데이터를 안전하게 보호하는 데 매우 유용하다.
이 서비스는 비용이 발생할 수 있으며, 키를 잘못 관리하면 데이터에 접근할 수 없는 상황이 발생할 수 있으므로 주의가 필요하다.
필요 시 새로 키를 생성할 수 있으며, 이미 생성된 KMS 키를 ARN(식별번호) 형태로 입력할 수 있다.
Fargate 임시 스토리지 암호화는 중요한 데이터를 처리할 때 매우 유용하며, 특히 규제 산업에서는 필수적일 수 있다.
Fargate 임시 스토리지 암호화
Fargate에서 임시로 사용되는 스토리지를 암호화할 수 있다. 이 경우에도 KMS 키를 사용해 암호화 설정이 가능하다.
Fargate에서 처리 중인 데이터의 보안 강화를 목적으로 사용된다.

Task Definition

1.
Create New Task Definition
2.
태스크 정의
3.
인프라설정
4.
컨테이너 설정
a.
ECR URI 가져오기
b.
컨테이너 이미지 URI 넣기
5.
테스트 확인

Service

컨테이너화된 애플리케이션을 지속적으로 실행하고 관리
특정 수의 작업(Task)을 유지하며, 필요에 따라 컨테이너를 자동으로 재배포하거나 스케일링을 관리하는 역할
애플리케이션의 가용성 및 확장성을 보장

구성 요소

작업(Task) 관리
Service는 항상 특정 수의 작업을 실행하도록 보장
사용자는 서비스 생성 시 실행할 작업 수를 설정할 수 있으며, ECS는 설정된 작업 수를 지속적으로 모니터링하고 유지한다.
서비스 디스커버리(Service Discovery)
ECS 서비스는 AWS Cloud Map을 사용하여 서비스 디스커버리를 지원
AWS Cloud Map 서비스 디스커버리 및 리소스 레지스트리 서비스 서비스와 애플리케이션의 리소스 상태를 자동으로 추적하고 관리하며, 이를 바탕으로 동적으로 리소스를 찾아 연결하는 작업을 돕는다.
이를 통해 서비스 간에 DNS 이름을 기반으로 서로를 쉽게 찾고 통신할 수 있다.
Service와 Task Definition의 연결
Service는 Task Definition을 기반으로 작업을 생성한다.
Task Definition 어떤 컨테이너 이미지가 실행될지, 리소스 제한, 환경 변수를 정의한 설계도(청사진)이며, Service는 이 설계를 기반으로 컨테이너를 배포하고 실행한다.
헬스 체크(Health Check)
Service는 컨테이너 상태를 지속적으로 모니터링한다.
헬스 체크를 통해 작업이 정상적으로 실행되고 있는지 확인하며, 장애가 발생한 작업은 자동으로 종료하고 새로운 작업을 생성해 대체한다.

유형

Replicated Service (복제 서비스)
이 유형의 서비스는 여러 개의 동일한 작업을 실행하여 애플리케이션을 복제한다.
예를 들어, 웹 서버처럼 다수의 트래픽을 처리해야 하는 애플리케이션에 적합하다.
사용자는 실행할 작업의 수를 지정하고, ECS는 해당 작업 수가 항상 유지되도록 한다.
Daemon Service (데몬 서비스)
데몬 서비스는 클러스터의 모든 인스턴스에서 하나씩 작업을 실행한다.
즉, 클러스터에 새로운 인스턴스가 추가되면, 해당 인스턴스에서도 자동으로 작업이 실행된다.
주로 로그 수집기, 모니터링 에이전트와 같은 작업에 사용된다.

Fargate Service 생성

1. 환경 설정

a.
컴퓨팅 옵션 (컴퓨팅 구성 - 고급)
용량 공급자 전략
하나 이상의 용량 공급자(Capacity Provider)를 설정하여 작업을 여러 공급자에 분산해 배포할 수 있다.
이는 작업이 여러 인스턴스에서 실행되도록 설정하는 전략으로, 클러스터의 유연성과 확장성을 보장한다.
유연성과 비용 최적화를 고려하여 향후 EC2 인스턴스를 추가하거나 리소스 관리를 세분화할 계획이 있다면 해당 전략을 사용한다.
시작 유형
용량 공급자 전략을 사용하지 않고, 특정 작업을 개별적으로 시작할 수도 있다.
용량 공급자를 설정하지 않고 작업을 직접 지정된 리소스에서 실행하는 옵션
단일 Fargate를 사용하고, 간단한 설정으로 서버리스 환경에서 관리 부담을 줄이려면 해당 전략을 사용한다.
b.
용량 공급자 전략 설정
기본 전략 사용: 클러스터에 이미 설정된 기본 용량 공급자 전략을 따른다.
사용자 지정 전략 사용: 사용자가 직접 용량 공급자를 선택해 설정하는 방식으로, 이 경우 고급 설정이 필요하다.
기본 수(0)
이 필드는 작업을 배포할 기본 용량을 설정하는 것.
기본값 0은 작업을 배포하지 않겠다는 의미
가중치(1)
가중치 필드는 작업을 배포할 때 특정 용량 공급자에 더 많은 작업을 배포할 수 있도록 비율을 설정하는 역할
해당 공급자에 기본 가중치 1이 설정되면 작업이 기본적으로 Fargate에 배포될 가능성이 크다.

2. 배포 구성

a.
애플리케이션 유형
서비스
지속적으로 실행되고 재시작 가능한 장기 실행 작업을 배포한다.
주로 웹 애플리케이션이나 API 서버 같은 지속적인 서비스에 사용된다.
작업
단발성 작업을 실행하는 것
실행 후 종료되는 일회성 작업에 적합하다.
배치 작업 같은 일시적인 작업을 수행할 때 사용된다.
b.
태스크 정의 (Task Definition)
태스크 정의(Task Definition)
컨테이너의 실행 환경을 정의하는 템플릿
여기에서 기존의 태스크 정의를 선택할 수 있다.
수동으로 개정 지정하기
선택된 태스크 정의의 개정 번호를 선택하여 특정 개정 버전을 실행할 수 있다.
최신 개정이 아닌, 특정 버전으로 작업을 배포하고 싶은 경우에 유용하다.
패밀리(Task Family)
여러 개의 태스크 정의를 그룹화하는 개념
동일한 애플리케이션의 여러 버전을 관리할 때, 이를 패밀리로 묶어 관리 가능
개정에서 Task Definition을 선택할 수 있다.
c.
서비스 유형
복제본(Replicated): 원하는 수의 태스크를 클러스터에 배포하고 유지 관리한다.
d.
원하는 태스크 수
이 필드는 배포할 태스크의 수를 지정하는 곳
복제본 서비스의 경우, 이 숫자가 클러스터 내에서 실행될 태스크의 수를 결정한다.

2-1. 배포 옵션

a.
롤링 업데이트(Rolling Update)
서비스에 새로운 태스크를 배포할 때 기존 태스크를 종료하지 않고, 단계적으로 새로운 태스크를 배포하는 방식
이를 통해 서비스의 중단 없이 업데이트가 가능하다.
기존 태스크가 새로운 태스크로 대체될 때까지 모두 실행된다.
i.
최소 실행 작업 비율(%)
서비스 배포 중 실행되어야 하는 최소 태스크의 비율
기본값 100%로 설정되면 모든 태스크가 유지되는 동안 새로운 태스크가 배포되며, 기존 태스크는 중단되지 않는다.
배포 중에 어느 정도의 태스크가 계속 실행될지를 결정하는 중요한 설정이다.
ii.
최대 실행 작업 비율(%)
서비스 배포 중 실행되는 태스크의 최대 비율을 설정하는 값
기본값 200%로 설정되면 기존 태스크와 함께 새로운 태스크가 동시에 실행되어 클러스터에 더 많은 리소스를 사용할 수 있다.
이 옵션을 통해 배포 중 서비스의 리소스 사용을 최적화할 수 있다.
iii.
배포 실패 감지
Amazon ECS 배포 회로 차단기 사용
배포 중 문제가 발생하여 서비스가 정상 상태에 도달하지 못하면 ECS가 해당 배포를 자동으로 실패 처리한다. 회로 차단기 기능은 문제가 있는 배포를 자동으로 중단함으로써 서비스 가용성을 보호한다.
서비스 롤백
배포 실패 시, ECS가 자동으로 마지막으로 성공한 배포 상태로 롤백하는 기능이다. 이를 통해 배포 중 문제가 발생해도 빠르게 이전 상태로 복원할 수 있다.
b.
블루/그린 배포(Blue/Green Deployment)
AWS CodeDeploy를 기반으로 하는 방식
두 개의 독립적인 배포 환경(블루와 그린)을 사용하여 새로운 배포가 안정적으로 완료되었는지 확인한 후, 트래픽을 새 환경(그린)으로 전환한다.
실패 시에는 원래의 블루 환경으로 트래픽을 되돌릴 수 있어 안전한 배포가 가능하다.
배포 구성 종류
한 번에 모두 배포
CodeDeployDefault.ECSAllAtOnce
이는 배포 전략 중 하나로, 새로운 배포를 한 번에 적용하는 설정
모든 태스크를 동시에 배포하고 트래픽을 한 번에 전환한다.
일반적으로 빠른 배포가 필요하지만, 리소스 소모가 큰 배포에 사용된다.
Canary 배포
CodeDeployDefault.ECSCanary{N}Percent{m}Minutes
첫 번째 단계에서 전체 태스크의 N%를 m분 동안 배포한 후, 문제없이 실행되면 나머지 90%를 배포하는 방식
첫 10%의 배포로 문제가 발생하면 빠르게 감지하여 전체 서비스에 영향을 주지 않고 대응할 수 있다.
배포 시간이 다소 길어질 수 있다.
Linear 배포
CodeDeployDefault.ECSLinear{N}PercentEvery{m}Minutes
m분마다 전체 태스크의 N%씩 배포하는 방식
배포 중에 발생할 수 있는 위험 분산 → 안정적 배포
배포 시간이 다소 길어질 수 있다.
CodeDeploy의 서비스 역할 (IAM 역할)
AWS IAM 역할을 선택하거나 ARN 입력: 여기서 IAM 역할을 직접 선택하거나 ARN(Amazon Resource Name)을 입력하여 권한을 지정할 수 있다.
ARN (Amazon Resource Name) 리소스를 고유하게 식별하기 위한 표준 형식의 이름 AWS 서비스는 각각 고유한 ARN을 가지고 있으며, 이 ARN을 통해 해당 리소스를 참조하거나 접근할 수 있다.
IAM 역할을 통해 CodeDeploy가 ECS 서비스와 통신할 수 있는 권한을 부여해야 한다. 이 역할은 CodeDeploy가 배포 작업을 수행할 수 있도록 API 요청을 승인하는 권한을 제공한다.
사용자는 IAM 콘솔에서 적절한 권한을 가진 IAM 역할을 생성하고, 이 화면에서 그 역할을 선택해야 한다.

3. 네트워킹

a.
VPC (Virtual Private Cloud)
Amazon ECS 리소스가 실행될 VPC를 선택하는 항목
VPC는 AWS에서 제공하는 가상 네트워크로, 사용자가 직접 네트워크 구성을 정의할 수 있다. 모든 ECS 태스크는 특정 VPC 내에서 실행되며, 네트워크 상의 격리를 보장한다.
b.
서브넷 (Subnet)
서브넷 선택 : VPC 내에서 태스크를 배포할 서브넷을 선택하는 항목
c.
보안 그룹 (Security Group)
보안 그룹 : 네트워크 트래픽에 대한 방화벽 역할
VPC 내에서 태스크에 적용할 보안 그룹을 선택하는 항목
EC2의 보안 그룹에서 설정이 가능하다.
인바운드 및 아웃바운드 트래픽을 제어한다.
d.
퍼블릭 IP
퍼블릭 IP 제공 여부: 태스크가 실행될 때 퍼블릭 IP를 자동으로 할당할지 선택하는 항목이다. 퍼블릭 IP는 인터넷과 직접 연결되는 IP 주소로, 외부에서 이 태스크에 접근할 수 있도록 한다.
켜짐: 퍼블릭 IP를 자동으로 할당하여 외부에서 접근할 수 있도록 한다.
인터넷을 통해 외부 사용자에게 서비스를 제공해야 하는 경우에 필요.
웹 서버, API 서버와 같이 외부에서 직접 접근해야 하는 서비스는 퍼블릭 IP가 있어야 한다.
꺼짐: 퍼블릭 IP를 할당하지 않고, 내부 네트워크에서만 접근 가능하도록 한다. 주로 프라이빗 서브넷에서 실행되는 태스크에 사용된다.
내부 데이터베이스에 접근하거나 백엔드 서비스로만 동작하는 경우에는 퍼블릭 IP가 필요 없다.