일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 애자일
- Agile
- TypeScript
- AWS
- Scrum
- visualizing
- python
- instance
- data analyze
- algorithm
- data
- angular
- Project
- 다나와
- Method
- pandas
- opencv
- 프로젝트
- keras
- DANAWA
- javascript
- Crawling
- 크롤링
- matplotlib
- 자바스크립트
- webcrawling
- analyzing
- ECS
- tensorflow
- adaptive life cycle
- Today
- Total
LiJell's 성장기
AWS ECS Managed Termination Protection 옵션 사용시 주의할 점 본문
현재 AWS ECS와 EC2 Spot Instance 조합을 이용중이고, ECS managed instance draining
기능 활성화로 spot capacity rebalancing
상황을 컨트롤하고 있었습니다.
따라서, 의도치 않은 rebalancing과 같은 ASG의 활동으로 EC2 인스턴스의 종료를 방지하기 위한 목적으로 ECS에서 Managed Termination Protection
옵션을 활성화 시켰는데요, instance scale-in-protection
에 문제가 발생하여 이 글을 작성하게 됐습니다.
개요
Managed Termination Protection
을 사용하면 AWS ECS는 실행 중인 task가 없는 EC2 instance만 종료합니다. 하지만, 배포가 실행되어 새로운 container instance에 task가 배포 완료됐고 desired capacity가 "1"인데도 기존에 떠있던 instance가 terminated되지 않았습니다. 확인해보니 instance scale-in-protection
으로 기존 instance가 draining으로 빠지지 않는 상황이였습니다.
따라서, ASG의 instance scale-in-protection
옵션을 비활성화 했지만, ASG에서 보이는 모든 instance가 scale-in-protection
상태로 지속되는 문제를 해결 할 수 없었습니다. Manual로 instance에 직접 scale-in-protection
을 비활성화 해야 terminate되는 모습을 확인 할 수 있었습니다.
추적
1차로 아래 커맨드로 확인 결과
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names [asg 이름]
scale in protection
이 비활성화 된 것으로 보였습니다.
하지만, 2차로 Cloud Trail 확인 결과, scale-in protection
이 런칭 직후 ecs-instance-capacity-provider-provisioning
에 의해 SetInstanceProtection
이 개별적으로 수행된 정황을 찾을 수 있었습니다 (scale in protection 옵션은 instance가 새로 기동 될 때 적용됩니다).
"아.. 왜지 ;;;" 굉장히 난감했습니다.
개별적으로 scale in protection
이 활성화 됐어도 모든 컨테이너 인스턴스가 managed termination protection
(관리형 종료 보호)을 사용하는 경우, ECS는 비어 있는 컨테이너 인스턴스에 대한 scale-in protection
을 제거 후 ASG가 EC2 인스턴스를 종료할 수 있다 생각했거든요...
원인
결과적으로, ASG의 instance scale-in-protection
옵션을 비활성화한게 원인이였습니다.
scale-in-proection
이 비활성화 되지 않는다고 생각했던 이유는 CloudWatch
경보가 scale-in action
을 발동하기 전에 CapacityProviderReservation
메트릭의 타겟 용량이 목표 용량보다 낮은 상태를 15분 동안(데이터 포인트 15개) 지속해야 하기 때문이었습니다.
이 부분을 생각하지 못하고 바로 scale in protection
이 풀리지 않아 instance scale-in-protection
옵션을 비활성화 하면서 꼬여버린거죠.
Managed Termination Protection
의 docs를 보면 아래와 같은 설명이 있습니다.
You must turn on Auto Scaling instance scale-in protection on the Auto Scaling group to use managed termination protection. If you don't turn on scale-in protection, then turning on managed termination protection can lead to undesirable behavior.
출처: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-termination-protection.html
해결 방법
따라서 ASG의 instance scale-in-protection
옵션을 다시 활성화 했고, scale in protection 옵션은 instance가 새로 기동 될 때 적용되기 때문에 scale-in-protection
옵션이 적용된 이후에 기동된 instance로 모두 대체하였고, 정상적으로 15분이 지난 후 scale in protection이 제거되면서 instance가 정상적으로 terminated 되는 것을 확인할 수 있었습니다.
결과적으로, 전체적인 flow를 생각하지 못했던 저의 실수였습니다. 다른 분들도 조심하세요!
긴 글 읽어주셔서 감사합니다.
'Cloud' 카테고리의 다른 글
S3 Lifecycle expiry date issue (2) | 2024.10.02 |
---|---|
AWS Auto Scaling Group Warmpool (0) | 2024.09.05 |
Amazon ECS managed instance draining (0) | 2024.01.31 |
Efficient Multi-Architecture and Multi-Region Container Deployment with Amazon ECS and EC2 Spot Instances (2) | 2024.01.22 |
ECS EC2 Spot instance scaling 속도 개선 방법 (2) | 2023.12.29 |