ECS Fargate 기준 부하테스트를 해보니 신규 Task 생성 시에도 CPU 부하가 발생하는 것을 확인하였습니다.

 

원인을 찾아보니 ECS 서비스의 총 CPU 한도가 정해져 있으며, 신규 Task 생성 시 CPU를 사용한다는 것입니다.

https://repost.aws/ko/knowledge-center/ecs-fargate-high-cpu-utilization

 

또한 Spring Boot와 같이 Thread, Connection pool 등 초기 자원 사용량이 많이 사용되는 Task이거나,

어플리케이션 최적화 문제로 인해 CPU 사용량이 많을 수 있습니다.

 

따라서 Auto Scaleing 서비스에 의존할 것이 아니라 모니터링을 통해 선제적인 대응이 필요하다고 판단했고,

EventBridge 서비스 Scheduler 기능을 활용하여 해결할 수 있었습니다.

 

현재 개발하고 있는 프로젝트는 출/퇴근시간에 사용량이 몰리기 때문에 아래와 같이 스케일링 정책을 적용하였습니다.

- 출근시간(8시~10시) scale-out Task 2

- 퇴근시간(17시~19시) scale-in Task 1

 

해당 작업을 위해서는 선행조건이 필요합니다.

1. ECS Cluster(Fargate) 프로비저닝 
2. Task Definition 설정
3. ECS Service 운영

 


 

1. 스케쥴러를 위한 IAM Role 추가

  • AmazonECS_FullAccess
  • AmazonEventBridgeSchedulerFullAccess

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "AWSAccountNo를 설정합니다"
                }
            }
        }
    ]
}

 

 

2. EventBridge - Scheduler 설정

 

 

- Schedule pattern

  • Recurring schedule : 장기적 스케줄링
  • Cron expression : 평일 오전 06:30 Cron 설정 (WarmUp 시간을 고려하여 출근 전 시간 반영)
  • Flexible time window : Off
  • TimeFrame(Optional) : Skip

 

- Select Target

All APIs 중 ECS 서비스를 선택 후 UpdateService 항목 선택

 

Scale-In 하고자 하는 서비스와 클러스터를 선택하고 원하는 Task수 적용

 

- Settings

  • Schedule state : Enable schedule
  • Action after completion : NONE
  • Retry policy and dead-letter queue (DLQ) : Off
  • Encryption : Off
  • Permissions : 1번 항목에서 추가한 IAM role 권한 적용

 

 

해당 설정 완료 후 다음날 ECS Service Tasks 설정이 변경되고 Scaling이 적용되는 것을 확인할 수 있습니다.

단, Scale-out 정책을 설정하지 않으면 변경된 Task가 유지되는 점을 주의해야 합니다. -> 불필요한 클라우드 비용 야기

 

이번 문제점 해결하면서 느낀점은 단순히 Fargate 용량을 늘리면 해결은 가능하지만 클라우드 비용 최적화를 위해

꾸준한 비용 모니터링과 인프라 최적화 방안을 고민하는 것이 중요하다고 느꼈습니다.

 

읽어주셔서 감사합니다.

 

레퍼런스
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기