Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
ECS Task란?
ECS의 배포/관리의 최소 단위는 Task이다.
Kubernetes의 배포/관리의 최소 단위인 Pod와 굉장히 유사하다.
Task는 여러 개의 컨테이너로 구성되며, Fargate를 사용하는 경우 실시간 모니터링을 위해 Side car 컨테이너를 같이 배치하기도 한다. 실제로는 여러 개의 컨테이너를 Task나 Pod에 배치하는 것은 권장되지 않고 Side car나 필수 보조 컨테이너를 배치하는 정도로만 사용된다.
처음에는 Task를 그냥 컨테이너로 생각해도 괜찮다고 본다.
ECS Service와 Task Auto Scaling
여러개의 Task를 독립적으로 하나하나 관리하는 것은 어렵다.
ECS도 Kubernetes의 Service(Deployment나 replica set)처럼 여러 개의 Task를 배포/관리할 수 있는 Service 기능을 제공한다.
이 Service에서 정의된 Task의 최소/원하는/최대 개수를 설정하여, 동일한 Task를 필요한 만큼의 동작시킬 수 있다.
여기서 Task의 Auto Scaling이 적용될 수 있다.
컨테이너는 EC2에 비해서는 훨씬 빠른 프로비저닝 시간을 가지므로 더 효과적인 탄력성을 제공할 수 있다.
단순히 대상 추적으로 조정을 하면, 갑작스러운 부하에도 Task가 단순히 하나씩 추가된다.
이러는 경우 AutoScaling을 적용했지만, 모든 Task가 죽어버릴 수 있다.
실제로 Fargate로 태스트 해볼때는 Task의 CPU가 한계를 초과하면 ECS가 자동으로 Task를 죽이고 새로운 Task를 실행시킨다.
결국 트래픽은 어디에서도 처리되지 못하는 상황이 발생한다.
따라서 부하도 별로 적절하게 Task 개수를 추가할 수 있는 단계 조정 정책이 현실적이다.
물론 결국에 단계 조정 정책도 운영 데이터를 통해 최적화해 나가야 한다.
Terraform
terraform에서 이를 적용하려며면, aws_appautoscaling_policy를 활용해야 한다.
Scale in도 이와 유사하게 추가하면 된다.
전체 코드
https://github.com/overnew/Cloud-SIEM-Infra-Terraform/blob/master/ecs/main.tf
결과
30~40%의 평균 CPU에서는 task를 한 개만 추가하지만, 40~50%에서는 두 개 그리고 50% 이상에서는 3개를 동시 추가하여 트래픽에 대해 대응한다.
부하가 없을 때는 최소 Task 개수로 동작한다.
부하가 급증하면 동시에 3개의 Task를 추가해서 대처한다.
4개의 Task로 대처하기 때문에 평균 부하가 감소한다.
부하가 감소되면 Task도 scale in된다.
부하가 종료되면 결국 최소 Task로 돌아오게 된다.
참조
'Cloud > AWS' 카테고리의 다른 글
AWS ECS Fargate 모니터링 (2) - AWS Grafana(SAML) (0) | 2024.07.03 |
---|---|
AWS ECS Fargate 모니터링 (1) - Side car (otel), AMP (0) | 2024.07.02 |
VPC Endpoint로 ECR 연결하기 (Docker hub와 S3의 관계) (0) | 2024.07.01 |
[EC2 Ubuntu] AWS PHP SDK 세팅 및 DynamoDB 테스트 (0) | 2024.05.20 |
CodeDeploy ECS 블루/그린 배포 방식 살펴보기 (0) | 2024.05.20 |