본문으로 건너뛰기

Service

1 Service​

  • 태스크 정의가 완료되면, 이를 기반으로 서비스(Service)를 생성합니다.
  • ECS 서비스는 정의된 태스크를 실행하고, 애플리케이션의 가용성을 관리합니다.
  • 서비스를 사용하면 지정된 수의 태스크 인스턴스가 항상 실행되도록 할 수 있으며, 애플리케이션을 업데이트하거나 확장할 때 태스크를 자동으로 시작하거나 종료할 수 있습니다.

1.1 태스크, 태스크 인스턴스, 서비스의 관계​

  • 태스크 정의 (Task Definition):
    • 애플리케이션을 구성하는 컨테이너들의 청사진입니다.
    • 컨테이너 이미지, 리소스 요구사항, 네트워크 설정 등을 정의합니다.
    • [[TaskDefinitions]] 참고
  • 태스크 인스턴스 (Task Instance):
    • 태스크 정의를 기반으로 실제로 실행되는 컨테이너 집합입니다.
    • 하나의 태스크 정의로 여러 개의 태스크 인스턴스를 실행할 수 있습니다.
  • 서비스 (Service):
    • 지정된 수의 태스크 인스턴스를 유지하고 관리합니다.
    • 태스크 인스턴스가 실패하면 자동으로 새로운 인스턴스를 시작합니다.
    • 로드 밸런서와 연동하여 트래픽을 분산시킬 수 있습니다.

2 환경 설정​

2.1 런치 타입​

  • 런치 타입: 서비스가 EC2 또는 Fargate 런치 타입 중 어떤 방식으로 실행될지를 지정합니다.
  • EC2: 직접 관리하는 인프라에서 서비스를 실행합니다.
  • Fargate: 서버리스 환경에서 서비스를 실행합니다.

2.2 애플리케이션 타입​

  • 서비스
    • 장기간 실행되는 애플리케이션 컴포넌트를 관리합니다.
    • 웹 서버나 데이터베이스와 같은 지속적으로 실행되는 작업에 적합합니다.
  • 태스크
    • 단기간 실행되는 애플리케이션 컴포넌트를 관리합니다.
    • 일회성 작업이나 배치 작업에 적합합니다.

2.3 태스크 정의(Task Definition)​

  • 태스크 정의: 서비스에서 사용할 태스크 정의를 지정합니다. 여기에는 컨테이너 이미지, CPU 및 메모리 할당, 네트워킹 설정, 로깅 구성 등이 포함됩니다.

2.4 서비스 이름​

  • 서비스 이름: 서비스를 식별할 수 있는 이름을 지정합니다.

2.5 Desired Tasks​

  • Desired Tasks: 항상 실행되어야 하는 태스크 인스턴스의 수를 지정합니다. 이 수에 따라 ECS는 필요한 만큼의 태스크 인스턴스를 실행 및 유지 관리합니다.

2.6 네트워크 설정​

  • 서브넷: 서비스가 실행될 서브넷을 지정합니다.
  • 보안 그룹: 서비스에 적용할 보안 그룹을 지정하여 네트워크 트래픽을 제어합니다.

2.7 로드 밸런싱​

  • 로드 밸런서: 서비스의 트래픽을 분산시키기 위한 로드 밸런서를 구성합니다.
    • Application Load Balancer: HTTP/HTTPS 트래픽을 처리하고 레이어 7 라우팅 기능을 제공합니다.
    • Network Load Balancer: 초당 수백만 요청을 처리할 수 있는 고성능의 레이어 4 로드 밸런서를 제공합니다.
  • 타겟 그룹(Target Group): 로드 밸런서가 트래픽을 분산시킬 대상 그룹을 정의합니다.
    • 설정: 타겟 그룹에 포함될 EC2 인스턴스, IP 주소, 또는 Lambda 함수를 지정합니다.
    • 포트 및 프로토콜: 타겟 그룹이 수신할 포트 및 프로토콜을 정의합니다.
    • 타겟 등록: 태스크 또는 서비스의 컨테이너를 타겟으로 등록하여 로드 밸런서가 트래픽을 해당 타겟으로 라우팅할 수 있도록 합니다.
  • 헬스 체크(Health Check): 로드 밸런서가 타겟 그룹의 상태를 확인하여 트래픽을 정상적인 타겟으로만 라우팅하도록 합니다.
    • 헬스 체크 설정: 헬스 체크 경로, 간격, 타임아웃, 재시도 횟수 등을 설정합니다.
    • 헬스 체크 타입: HTTP, HTTPS, TCP 등의 헬스 체크 타입을 지정합니다.
    • 헬스 체크 동작: 지정된 헬스 체크 경로를 통해 타겟의 상태를 주기적으로 확인합니다. 헬스 체크에 실패한 타겟은 비정상 상태로 표시되고, 로드 밸런서는 해당 타겟으로 트래픽을 보내지 않습니다.

2.8 서비스 오토 스케일링​

2.8.1 Auto Scaling 정책​

  • Auto Scaling 정책: 서비스의 수요에 따라 태스크 수를 자동으로 조정할 수 있도록 Auto Scaling 정책을 설정합니다.
  • 메트릭 기반 스케일링: CPU 사용률, 메모리 사용률 등의 메트릭을 기반으로 스케일링 정책을 구성합니다.
  • 예약된 스케일링: 특정 시간에 따라 태스크 수를 조정할 수 있는 예약된 스케일링을 설정합니다.

2.8.2 예시​

{
"TargetValue": 50.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ECSServiceAverageCPUUtilization"
},
"ScaleOutCooldown": 60,
"ScaleInCooldown": 60
}
  • TargetValue: 목표 지표 값. 여기서는 평균 CPU 사용률이 50%가 되도록 설정합니다.
  • PredefinedMetricSpecification: 미리 정의된 지표 사양. 여기서는 ECS 서비스 평균 CPU 사용률을 사용합니다.
  • ScaleOutCooldown: 스케일 아웃 후 추가 스케일링 작업을 수행하기 전에 대기할 시간(초)입니다.
  • ScaleInCooldown: 스케일 인 후 추가 스케일링 작업을 수행하기 전에 대기할 시간(초)입니다.