본문 바로가기

AWS

[AWS] ECS 롤링 배포 서비스 가용성 향상 방법

반응형

AWS Elastic Container Service(ECS)에서 롤링 업데이트 중 서비스 가용성을 향상시키는 설정 방법과 실제 동작을 기준으로 설명합니다.
이 글은 기본 배포 전략인 롤링 배포(Rolling Update)를 사용하는 ECS 서비스에 대해 어떻게 하면 배포 중에도 서비스가 안정적으로 유지될 수 있는지 설정 관점에서 설명합니다.


롤링 배포란?

ECS에서 롤링 배포는 기존 태스크를 점진적으로 신규 버전 태스크로 교체하는 방식입니다.
새 버전의 태스크만 일괄적으로 교체하는 것이 아니라, 설정한 비율(maximumPercent, minimumHealthyPercent)에 따라 기존 태스크와 신규 태스크가 섞여 배포됩니다.

사전 필수 설정: 서비스 배포 구성

롤링 배포의 동작은 Service의 deployment configuration으로 제어합니다. 핵심 파라미터는 아래와 같습니다:

파라미터 설명
minimumHealthyPercent 배포 중 유지해야 할 최소 정상 태스크 비율
maximumPercent 배포 중 최대로 실행 가능한 태스크 비율

예를 들어 desiredCount=4인 서비스에서:

  • minimumHealthyPercent=75 → 최소 3개 태스크는 항상 정상 유지
  • maximumPercent=200 → 동시에 최대 8개 태스크 실행 가능

이 값들을 기반으로 서비스는 점진적으로 신규 태스크를 시작/종료하면서 가용성을 보장합니다.

가용성 향상 기능

2025년 11월 기준, ECS는 롤링 배포 중 서비스 가용성 향상 기능을 기본 활성화했습니다.

  1. 기존 버전 실패 시 서비스 제공 유지
    • 기존 버전의 태스크가 unhealthy이더라도 동일 버전으로 먼저 교체를 시도합니다.
    • 새 버전이 정상 동작하지 않더라도 서비스 가용성을 유지합니다.
  2. 스케일 아웃이 배포 중 발생할 때 가용성 보장
    • Auto Scaling이 트리거되면 기존/신규 버전 모두 확장합니다.
    • 이로 인해 새 버전 시작 실패가 있더라도 처리량이 보존됩니다.
  3. 설정 파라미터 그대로 준수
    • minimumHealthyPercent, maximumPercent 설정을 변경 없이 그대로 적용합니다.
  4. 모든 리전 기본 활성화
    • 별도 설정 필요 없이, ECS 서비스가 존재하는 모든 리전에서 활성화됩니다.

배포 안정성 확보 설정

1) ECS 서비스 생성 시 배포 구성

ECS 서비스 생성/수정 시 deployment configuration을 명시합니다. 예시 AWS CLI:

aws ecs create-service \
  --cluster myCluster \
  --service-name myService \
  --task-definition myTaskDef \
  --desired-count 4 \
  --deployment-configuration minimumHealthyPercent=75,maximumPercent=200 \
  --deployment-controller type=ECS

 

 

  • 최대 200%까지 태스크를 띄울 수 있고(신규+기존)
  • 최소 75%의 정상 태스크 유지 → 배포 중 서비스 용량 감소 최소화

2) 헬스 체크(Health Check) 중요

롤링 배포에서는 태스크의 헬스 체크 설정이 배포 흐름을 결정합니다.
잘못된 헬스 체크 설정은 신규 태스크가 정상으로 판정되지 않아 배포가 장시간 지연되거나 실패할 수 있습니다.

Fargate/EC2 모두 Target Group의 HealthCheck 설정 확인

  • IntervalSeconds: 10~30
  • HealthyThresholdCount: 2~3
  • UnhealthyThresholdCount: 2~3
  • TimeoutSeconds: 요청 타임아웃 값

이 값을 과도하게 높게 설정 시 배포 지연 가능 → 운영환경에 맞게 조정 필요

3) Auto Scaling 연동 시 고려점

Auto Scaling을 연동(Application Auto Scaling) 시 배포 중 Scale-out이 발생하면 ECS는 다음 순서로 작업합니다:

  1. 현재 버전과 신규 버전 모두 태스크 수 증가
  2. 신규 버전 태스크 실패하더라도 기존 버전으로 처리량 유지

즉, 배포 중 트래픽 증가로 인한 용량 부족 상황에서도 서비스 가용성이 저하되지 않습니다.

4) 배포 Circuit Breaker

롤링 배포 중 배포 실패 조기 감지를 위해 Deployment Circuit Breaker를 사용할 수 있습니다.
이 옵션을 활성화하면 ECS는 오류 발생 시 자동으로 롤백을 시도합니다.

aws ecs update-service \
  --cluster myCluster \
  --service myService \
  --deployment-configuration deploymentCircuitBreaker={enable=true,rollback=true}

 

Circuit Breaker는 새 버전이 반복적으로 실패할 때 빠르게 배포를 중단하고 이전 버전으로 안정적으로 되돌릴 수 있게 해줍니다.

배포 상태 확인

배포 상태는 ECS Console 또는 CloudWatch Events를 통해 확인합니다.
특히 다음 이벤트/메트릭을 모니터링합니다:

  • Service Events: 배포 중 오류나 태스크 시작/종료 로그
  • RunningTaskCount: 실제 실행 중인 태스크 수 변화
  • DeploymentStatus: SUCCEEDED/FAILED 상태
반응형