먼저 ECS Service는 다음 3가지 배포가 가능합니다. (공식문서)
이중 기본 Rolling Update 배포하면
따라서 각 파라미터를 정확하게 이해해야 ECS에서 효과적인 인프라 운영이 가능합니다.
크게 Deployment 파라미터 3개가 존재합니다.
1. deploymentCircuitBreaker: "너 만약에 배포 실패하면 어떻게 할래?"
2. maximumPercent: "배포할 때 task 얼마나 늘릴까?"
3. minimumHealthyPercent: "아니 적어도 task가 이정도는 있어야지"
각 파라미터의 자세한 설명과, 설정 방법에 대해서는 아래에 순차적으로 작성했습니다.
"너 만약에 배포 실패하면 어떻게 할래?"
신규 배포를 중단
하고, 선택적으로 롤백
할 수 있는 기능입니다.다음 리소스에 대한 health check를 수행합니다.
실패시 threshold 동안 재시작하고, Deployment 를 FAILED
상태로 전환합니다.
desired-count
에 따라 Failure threshold
을 자동으로 계산 (문서)Rollback
FAILED
일 때 가장 최근 성공한 Deployment로 롤백 가능ECS 서비스 생성 시, "Deployment failure detection" 란에서 설정이 가능합니다.
또한 기존 서비스는 다음과 같은 CLI 명령어를 통해 설정 정보를 확인할 수 있습니다.
$ aws ecs describe-services --cluster <CLUSTER NAME> --services <SERVICE NAME>
"DeploymentConfiguration": {
"DeploymentCircuitBreaker": {
"Enable": "true", ### !!!
"Rollback": "false" ### !!!
},
...
},
설정이 완료된 후, CircuitBreaker 에 의해 배포가 차단되면 다음과 같은 오류가 발생됩니다.
Error occurred during operation 'ECS Deployment Circuit Breaker was triggered ...
maximumPercent: "배포할 때 task 얼마나 늘릴까?"
minimumHealthyPercent: "아니 적어도 task가 이정도는 있어야지"
공식문서를 확인해 보면 더욱 정확한 정의를 확인할 수 있다.
RUNNING
, PENDING
or STOPPING
상태 최대 task 개수 (반내림, default는 200%)RUNNING
상태로 남아 있어야 하는 최소 task 개수 (반올림, default는 200%)=> 배포중 최대 task 수가 1개이기 때문에, 무중단 배포가 불가능한 것을 확인할 수 있습니다.
ECS 생성 시 "Deployment options" 에서 설정합니다.
(Rolling update 만 커스텀 설정 가능, Blue/Green는 기본설정으로 적용됨)
또한 기존 서비스는 다음과 같은 CLI 명령어를 통해 설정 정보를 확인할 수 있습니다.
$ aws ecs describe-services --cluster <CLUSTER NAME> --services <SERVICE NAME>
...
"DeploymentConfiguration": {
"MaximumPercent": "200",
"MinimumHealthyPercent": "100",
...
},
...
ECS 무중단 배포를 위한 배포 설정에 대하여 알아보았습니다.
Reference
1. ECS | Amazon ECS 서비스 정의 파라미터
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/service_definition_parameters.html
2. ECS | DeploymentConfiguration
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/APIReference/API_DeploymentConfiguration.html