Skip to content

[Week 5] L2-015 답안 제출 #27

@PokingTeemo

Description

@PokingTeemo

Week

5

Scenario ID

L2-015

Problem Identification

Auto Scaling warm-up 미설정으로 인한 cascade scale-out 문제가 발견되었습니다. aws_autoscaling_group.autoscaling-group-h128pu에 default_instance_warmup이 설정되지 않아 새 인스턴스가 즉시 트래픽을 받아 부하가 발생하고, 이로 인해 연쇄적인 scale-out이 일어나 단시간 내 과잉 인스턴스 비용이 발생합니다.

EC2 인스턴스 과잉 프로비저닝 문제가 확인되었습니다. 2개의 launch template 모두 m5.xlarge($140/월/인스턴스) 타입을 사용하고 있으나 부하 메트릭 근거가 부족합니다. 현재 desired_capacity 기준으로 autoscaling-group-h128pu는 2개, autoscaling-group-d89t0e는 4개 인스턴스로 총 6개 m5.xlarge 인스턴스가 운영 중이며, CPU 사용률이 50% 미만일 경우 다운사이징을 통해 비용 절감이 가능합니다.

태그 거버넌스 부재로 비용 배분이 불가능한 상황입니다. 2개의 launch template 모두 필수 태그(Environment, Owner, Project, Team)가 없어 Name 태그만 존재하며, 이로 인해 부서별/프로젝트별 비용 할당이 불가능합니다.

Root Cause

자동화 스케줄링 미적용으로 인한 Auto Scaling warm-up 설정 부재, 성능 메트릭 기반 용량 계획 없이 진행된 EC2 인스턴스 사이징, 태깅 거버넌스 정책 부재로 인한 비용 추적 및 배분 체계 미구축이 근본 원인입니다.

Proposed Solution

  1. Auto Scaling warm-up 설정: aws_autoscaling_group.autoscaling-group-h128pu에 default_instance_warmup = 300 추가하여 cascade scale-out 방지. 월 절감액: 과잉 scale-out 방지로 평균 20% 인스턴스 시간 절약 = $140 × 2개 × 0.2 = $56

  2. 태그 거버넌스 적용: 모든 launch template에 Environment, Owner, Project, Team 태그 추가하여 비용 배분 체계 구축. 직접 비용 절감 효과는 없으나 향후 최적화를 위한 기반 마련.

  3. EC2 인스턴스 다운사이징: CloudWatch 메트릭 분석 후 CPU 사용률이 50% 미만인 경우 m5.xlarge → m5.large 변경. m5.large는 $70/월/인스턴스로 인스턴스당 월 $70 절감. 6개 인스턴스 기준 월 $420 절감 가능성.

Estimated Monthly Savings (USD)

476.01

Optimized Terraform

resource "aws_autoscaling_group" "autoscaling-group-h128pu" {
  name = "autoscaling-group-h128pu"
  min_size = "2"
  max_size = "20"
  desired_capacity = "2"
  vpc_zone_identifier = "var.private_subnet_ids"
  id = "aws_launch_template.autoscaling-group-h128pu.id"
  version = "$Latest"
  default_instance_warmup = 300
  key = "Name"
  value = "autoscaling-group-h128pu"
  propagate_at_launch = "true"
}
resource "aws_autoscaling_group" "autoscaling-group-d89t0e" {
  name = "autoscaling-group-d89t0e"
  min_size = "2"
  max_size = "10"
  desired_capacity = "4"
  vpc_zone_identifier = "var.private_subnet_ids"
  id = "aws_launch_template.autoscaling-group-d89t0e.id"
  version = "$Latest"
  default_instance_warmup = "300"
  key = "Name"
  value = "autoscaling-group-d89t0e"
  propagate_at_launch = "true"
}
resource "aws_launch_template" "autoscaling-group-h128pu" {
  name_prefix = "autoscaling-group-h128pu-"
  image_id = "ami-0abcdef1234567890"
  instance_type = "m5.large"
  resource_type = "instance"
  Name = "autoscaling-group-h128pu"
  tags = {
    Name = "autoscaling-group-h128pu"
    Environment = "production"
    Owner = "devops-team"
    Project = "gamenova-main"
    Team = "infrastructure"
  }
}
resource "aws_launch_template" "autoscaling-group-d89t0e" {
  name_prefix = "autoscaling-group-d89t0e-"
  image_id = "ami-0abcdef1234567890"
  instance_type = "m5.large"
  resource_type = "instance"
  Name = "autoscaling-group-d89t0e"
  tags = {
    Name = "autoscaling-group-d89t0e"
    Environment = "production"
    Owner = "devops-team"
    Project = "gamenova-main"
    Team = "infrastructure"
  }
}
resource "aws_autoscaling_policy" "autoscaling-group-h128pu_target_tracking" {
  name = "autoscaling-group-h128pu-target-tracking"
  autoscaling_group_name = "aws_autoscaling_group.autoscaling-group-h128pu.name"
  policy_type = "TargetTrackingScaling"
  predefined_metric_type = "ASGAverageCPUUtilization"
  target_value = "60"
}
resource "aws_autoscaling_policy" "autoscaling-group-d89t0e_target_tracking" {
  name = "autoscaling-group-d89t0e-target-tracking"
  autoscaling_group_name = "aws_autoscaling_group.autoscaling-group-d89t0e.name"
  policy_type = "TargetTrackingScaling"
  predefined_metric_type = "ASGAverageCPUUtilization"
  target_value = "60"
}

Attached Reports

report.md
(Files committed to submissions/ directory)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions