본문으로 건너뛰기
aws검색
컴퓨트

EC2 Auto Scaling (시작 템플릿, 조정 정책, 스팟 섞기)

Auto Scaling 그룹의 구성 요소(시작 템플릿, 원하는 용량, 상태 확인), 대상 추적, 단계, 예약, 예측 조정 정책의 차이, 여러 유형과 스팟을 섞는 혼합 인스턴스 정책, 웜 풀, 수명 주기 후크, 인스턴스 새로 고침까지 실무 설정 위주로 정리합니다.

Auto Scaling시작 템플릿대상 추적스팟인스턴스 새로 고침2026-10 기준, 약 7분

구성 요소

Auto Scaling 그룹(ASG)은 "이런 인스턴스를 이 서브넷들에 몇 대 유지하라" 는 약속입니다.

요소뜻
시작 템플릿AMI, 인스턴스 유형, 보안 그룹, IAM 인스턴스 프로파일, 사용자 데이터, IMDS 설정. 버전 관리됨
최소, 원하는, 최대 용량최소 아래로 줄지 않고 최대 위로 늘지 않음. 정책은 원하는 용량을 바꿈
VPC 서브넷보통 AZ 마다 하나씩 프라이빗 서브넷. ASG 가 AZ 사이 균형을 맞춤
상태 확인EC2 상태(하드웨어, OS) 기본. ELB 상태 확인을 켜면 대상 그룹에서 비정상인 인스턴스도 교체
조정 정책지표나 일정에 따라 원하는 용량을 바꾸는 규칙

주의 시작 구성(launch configuration)은 오래된 방식이라 새 인스턴스 유형과 기능을 지원하지 않습니다. 새로 만들 때는 항상 시작 템플릿을 씁니다.

조정 정책 고르기

정책동작맞는 곳
대상 추적 (target tracking)"평균 CPU 50% 유지" 처럼 목표값을 맞추도록 알아서 늘리고 줄임대부분의 웹, API. 첫 선택
단계 조정 (step)경보 수준별로 몇 대씩 늘릴지 직접 정함큐 길이처럼 목표값이 애매한 지표
예약 조정 (scheduled)정해진 시각에 용량을 바꿈출근 시간, 정기 배치, 행사
예측 조정 (predictive)지난 14 일 패턴으로 다음 48 시간 부하를 예측해 미리 늘림매일 반복되는 뚜렷한 패턴. 처음엔 예측만 하는 모드로 검증

대상 추적에는 CPU 외에 ALB 대상당 요청 수(ALBRequestCountPerTarget)를 많이 씁니다. CPU 보다 트래픽 변화에 빨리 반응하고 애플리케이션 특성을 덜 탑니다.

aws autoscaling put-scaling-policy \
  --auto-scaling-group-name web-prod \
  --policy-name req-per-target-800 \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration '{
    "PredefinedMetricSpecification": {
      "PredefinedMetricType": "ALBRequestCountPerTarget",
      "ResourceLabel": "app/web-prod-alb/50dc6c495c0c9188/targetgroup/web-tg/943f017f100becff"
    },
    "TargetValue": 800,
    "DisableScaleIn": false
  }'

인스턴스가 부팅해서 실제로 일을 받기까지 걸리는 시간을 기본 인스턴스 준비 시간(default instance warmup) 으로 그룹에 설정해 두면, 아직 준비 안 된 인스턴스의 지표 때문에 과하게 늘리는 일을 막습니다.

여러 유형과 스팟 섞기

한 유형만 쓰면 그 유형의 재고가 떨어질 때 늘릴 수 없습니다. 혼합 인스턴스 정책으로 여러 유형을 허용하고 온디맨드와 스팟 비율을 정합니다.

{
  "LaunchTemplate": {
    "LaunchTemplateSpecification": { "LaunchTemplateName": "web-arm64", "Version": "$Latest" },
    "Overrides": [{
      "InstanceRequirements": {
        "VCpuCount": { "Min": 2, "Max": 4 },
        "MemoryMiB": { "Min": 8192 },
        "CpuManufacturers": ["amazon-web-services"],
        "InstanceGenerations": ["current"]
      }
    }]
  },
  "InstancesDistribution": {
    "OnDemandBaseCapacity": 2,
    "OnDemandPercentageAboveBaseCapacity": 30,
    "SpotAllocationStrategy": "price-capacity-optimized"
  }
}
  • InstanceRequirements(속성 기반 선택)는 "vCPU 2~4 개, 메모리 8 GiB 이상, Graviton" 처럼 조건만 주면 맞는 유형을 모두 후보로 씁니다. 새 세대가 나오면 자동으로 후보에 들어갑니다.
  • 스팟 할당 전략은 price-capacity-optimized 가 권장값입니다. 중단 가능성이 낮은 풀 중에서 싼 것을 고릅니다.
  • 용량 재조정(Capacity Rebalancing) 을 켜면 스팟 중단 위험 신호가 왔을 때 미리 새 인스턴스를 띄우고 기존 것을 뺍니다.
  • 기본 용량(OnDemandBaseCapacity)은 온디맨드로 두고, 그 위만 스팟으로 채우면 스팟이 한꺼번에 사라져도 서비스가 죽지 않습니다.

웜 풀과 수명 주기 후크

부팅에 몇 분씩 걸리는 애플리케이션(큰 JVM, 모델 로딩)은 확장이 늦어서 순간 트래픽을 놓칩니다.

  • 웜 풀(warm pool): 미리 초기화해 둔 인스턴스를 중지(Stopped) 상태로 보관했다가 확장할 때 바로 켭니다. 중지 상태에서는 EBS 요금만 냅니다.
  • 수명 주기 후크: 인스턴스가 서비스에 들어가기 전(autoscaling:EC2_INSTANCE_LAUNCHING)이나 빠지기 전(TERMINATING)에 멈춰 두고 스크립트를 돌립니다. 종료 전에 로그를 S3 로 내보내거나 연결을 정리(드레이닝)할 때 씁니다.

배포: 인스턴스 새로 고침

AMI 나 시작 템플릿을 바꾼 뒤 기존 인스턴스를 순서대로 교체하려면 인스턴스 새로 고침을 씁니다.

aws autoscaling start-instance-refresh --auto-scaling-group-name web-prod \
  --preferences '{"MinHealthyPercentage": 90, "InstanceWarmup": 120, "SkipMatching": true, "AutoRollback": true}'

MinHealthyPercentage 로 한 번에 바꾸는 비율을 조절하고, AutoRollback 을 켜면 실패할 때 이전 시작 템플릿으로 되돌립니다. 체크포인트를 두면 일부만 바꾼 뒤 멈춰서 지표를 보고 이어 갈 수 있습니다.

할당량과 비용

  • ASG 자체는 무료이고 인스턴스, EBS, 데이터 전송 요금만 냅니다. 상세 모니터링(1 분 지표)을 켜면 CloudWatch 요금이 붙습니다.
  • 리전당 ASG 수, 조정 정책 수에 기본 할당량이 있습니다. 대규모 조직은 Service Quotas 에서 확인합니다.
  • 확장이 막히는 가장 흔한 이유는 ASG 가 아니라 EC2 vCPU 할당량과 서브넷 IP 부족입니다. /24 서브넷은 쓸 수 있는 IP 가 251 개라서 큰 그룹이나 EKS 노드가 금방 채웁니다.

증상, 원인, 해결

증상원인해결
인스턴스가 떴다가 바로 종료되기를 반복ELB 상태 확인 실패, 상태 확인 유예 시간이 부팅보다 짧음대상 그룹 헬스 경로 확인, HealthCheckGracePeriod 늘림
원하는 용량을 올렸는데 늘지 않음vCPU 할당량, 용량 부족, 서브넷 IP 부족활동 기록(describe-scaling-activities)의 상태 메시지 확인
트래픽이 줄었는데 안 줄어듦축소 비활성, 최소 용량, 인스턴스 축소 보호정책 설정과 ProtectedFromScaleIn 확인
한 AZ 에만 몰림다른 AZ 의 용량 부족이나 서브넷 문제여러 유형 허용, AZ 재조정 활동 확인

이 문서에서