Infra AWS

Amazon ECS, 기본 제공 블루/그린 배포 지원

Amazon ECS

9 min read
Amazon ECS, 기본 제공 블루/그린 배포 지원

1. 들어가며

2025년 7월 17일, AWS는 ALB, NLB 또는 ECS Service Connect를 통해 트래픽을 처리하는 ECS 서비스에대해 '블루/그린 배포 전략'을 기본으로 지원한다고 발표했습니다.

블루/그린 배포 전략을 사용하면 Amazon ECS는 기존 애플리케이션 버전과 함께 새로운 애플리케이션버전을 프로비저닝합니다. 이를 통해 프로덕션 트래픽을 새로운 애플리케이션으로 라우팅하기 전에 새버전을 미리 검증할 수 있습니다.

또한, 배포 수명 주기(Lifecycle) 후크를 사용하여 사용자 지정 검증 단계를 수행하고 검증이 완료될 때까지 배포를 대기시킬 수도 있습니다. 아울러 프로덕션 트래픽이 새로운 버전으로 전환된 후에는 미리 지정된 기간 동안 새 애플리케이션을 안정화(Bake)하고 이 과정에서 회귀(Regression)가 탐지되면 가동 중지 시간 없이 이전 버전으로 즉시 롤백할 수 있습니다.

Amazon CloudWatch 경보 및 ECS 배포 회로 차단기(Circuit Breaker)를 구성하여 배포를 모니터링하고 장애를 자동으로 탐지하는 것도 가능합니다. 이러한 기능을 함께 사용하면 소프트웨어 업데이트의 안정성을 높이고 새로운 기능을 더 빠르게 제공할 수 있습니다.

 

2. 콘솔에서 배포 옵션 변경해보기

AWS 콘솔에서 확인되는 ECS 배포 전략은 아래와 같이 네 종류입니다.

기본 옵션인 롤링 업데이트를 블루/그린 업데이트로 구성을 변경해 보겠습니다. 단순한 배포 옵션 변경이므로 네트워킹 설정은 그대로 유지합니다.

참고로 블루/그린 배포를 위해서는 로드밸런싱 또는 서비스 연결(Service Connect)을 먼저 구성해야 합니다. 

로드밸런싱 구성 후 배포 옵션을 블루/그린으로 변경할 수 있습니다.

 

3. 검증

이제 상세하게 검증해 보겠습니다. 로컬 도커(Docker)에서 블루/그린 이미지를 각각 빌드하여 ECR로 푸시한 뒤 ECS 블루/그린 배포 시 해당 이미지가 실제로 잘 동작하는지 확인합니다. 

3.1 이미지 빌드 및 테스트(로컬)

먼저 블루 버전의 Dockerfile을 작성하고 빌드합니다. 

# Dockerfile.v1
FROM nginx:alpine
RUN echo '<h1>NGINX v1 - BLUE</h1>' > /usr/share/nginx/html/index.html

 빌드 및 실행은 다음과 같이 합니다.

# 빌드 및 실행
docker build -f Dockerfile.v1 -t nginx-blue:v1 .
docker run --rm -p 8080:80 nginx-blue:v1

다음으로 그린 버전의 Dockerfile을 작성하고 빌드합니다. 

# Dockerfile.v2
FROM nginx:alpine
RUN echo '<h1>NGINX v2 - GREEN</h1>' > /usr/share/nginx/html/index.html

빌드 및 실행은 다음과 같이 합니다.

# 빌드 및 실행
docker build -f Dockerfile.v2 -t nginx-green:v2 .
docker run --rm -p 8081:80 nginx-green:v2

 3.2 ECR 푸시 및 배포 준비

로컬에서 확인한 이미지를 ECR에 업로드합니다.

# ECR 로그인
aws ecr get-login-password \
  --region ap-northeast-2 \
  --profile mini \
  | docker login \
      --username AWS \
      --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-2.amazonaws.com

# 도커 이미지 푸시
docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-2.amazonaws.com/minhui-repo:nginx-blue-v1
docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-2.amazonaws.com/minhui-repo:nginx-green-v2

 이후 AWS 콘솔에서 다음 절차를 진행합니다. 먼저 ECR 콘솔에서 이미지가 정상적으로 업로드되었는지 확인합니다.

다음으로 블루 이미지 배포 작업을 합니다. 우선 태스크 정의(Task Definition)에서 새 리비전(New Revision)을 생성합니다.

다음과 같이 서비스를 생성합니다.

배포 유형을 [블루/그린]으로 선택합니다. 

콘솔 화면에서 프로덕션 트래픽이 정상적으로 흐르는지 확인합니다. 

 다음은 서비스 배포 완료시 화면입니다.

3.3 블루/그린 전환 확인 

서비스 배포가 완료되면 터미널에서 블루 → 그린 배포가 정상적으로 이루어지는지 curl명령어로 확인합니다. 

while true; do
  curl -s http://minhui-ecs-test-415630160.ap-northeast-2.elb.amazonaws.com/
  echo
  sleep 1
done

확인 결과는 다음과 같습니다. 블루/그린 배포가 완료되면 프로덕션 트래픽이 새로운 '그린' 버전으로 옮겨집니다.

텍스트, 스크린샷, 번호, 폰트이(가) 표시된 사진

AI 생성 콘텐츠는 정확하지 않을 수 있습니다.

트래픽 전환이 완료되면 ECS는 희망 태스크 수(Desired tasks)인 2개로 태스크를 조정합니다. 콘솔 화면에서 트래픽이 이동하고 기존 태스크가 종료되는 것을 확인할 수 있습니다.

curl명령어로 트래픽을 지속적으로 확인해 본 결과 응답이 블루 이미지에서 그린 이미지로 한 번에 전환되는 것을 확인할 수 있었습니다.

이는 ECS 블루/그린 배포가 그린 태스크를 모두 기동한 뒤 헬스 체크(Health Check)를 전부 통과하면 ALB 타깃 그룹을 단일 시점에 스위칭(Switching)하는 방식으로 동작하기 때문입니다.

그 결과 배포 과정 중 블루와 그린 태스크가 동시에 실행되는 구간은 존재하지만, 프로덕션 트래픽이 두버전에 나뉘어 전달되는 현상은 발생하지 않았습니다. 즉, ECS의 기본 제공 블루/그린 배포는 트래픽 단절이나 혼합 없이 안전하게 전환되는 방식임을 직접 확인할 수 있었습니다.

긴 글 읽어주셔서 감사합니다!


참고 자료

https://aws.amazon.com/about-aws/whats-new/2025/07/amazon-ecs-built-in-blue-green-deployments/

https://aws.amazon.com/blogs/aws/accelerate-safe-software-releases-with-new-built-in-blue-green-deployments-in-amazon-ecs/

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/deployment-type-blue-green.html

Share This Post

Check out these related posts

ALB Health Check Logs 지원

Amazon S3 Tables와 MCP, 자연어로 확장하는 데이터 경험

Amazon EC2는 이제 EC2 인스턴스에 대한 강제 종료를 지원합니다!