Amazon ECS 예측 확장의 예측 값 재정의를 위한 예약 액션 사용하기
Amazon ECS 예측 확장의 예측 값 재정의를 위한 예약 액션 사용하기
미래 애플리케이션 요구 사항에 대한 추가 정보가 있을 때 예약 액션(scheduled actions)으로 예측 확장(predictive scaling)의 예측 값을 일시적으로 재정의하는 방법을 알아봐요.
출처: 문서
본문
때로는 예측 계산이 고려할 수 없는 향후 애플리케이션 요구 사항에 대한 추가 정보가 있을 수도 있어요. 예를 들어 예측 계산이 곧 있을 마케팅 이벤트에 필요한 태스크 수를 과소평가할 수 있어요. 예약 액션을 사용해 향후 기간 동안 예측을 일시적으로 재정의할 수 있어요. 예약 액션은 반복적으로 실행되거나, 일회성 수요 변동이 있을 때 특정 날짜와 시간에 실행될 수 있어요.
예를 들어 예측된 것보다 많은 태스크 수로 예약 액션을 만들 수 있어요. 런타임에 Amazon ECS는 서비스의 최소 태스크 수를 업데이트해요. 예측 확장은 태스크 수를 최적화하므로 예측 값보다 높은 최소 태스크 수를 가진 예약 액션이 존중돼요. 이로 인해 태스크 수가 예상보다 적어지지 않아요. 예측 재정의를 중지하려면 두 번째 예약 액션을 사용해 최소 태스크 수를 원래 설정으로 되돌려요.
다음 절차는 향후 기간 동안 예측을 재정의하는 단계를 설명해요.
- 1단계: (선택 사항) 시계열 데이터 분석
- 2단계: 예약 액션 두 개 만들기
중요 — 이 주제는 예측된 것보다 높은 용량으로 확장하기 위해 예측을 재정의하려고 한다는 것을 전제로 해요. 예측 확장 정책의 간섭 없이 태스크 수를 일시적으로 줄여야 한다면 대신 forecast only 모드를 사용하세요. forecast only 모드에서는 예측 확장이 계속 예측을 생성하지만 태스크 수를 자동으로 늘리지는 않아요. 그러면 리소스 사용률을 모니터링하고 필요에 따라 태스크 수를 수동으로 줄일 수 있어요.
1단계: (선택 사항) 시계열 데이터 분석
예측 시계열 데이터를 분석하는 것부터 시작해요. 이는 선택 단계이지만 예측의 세부 사항을 이해하고 싶다면 도움이 돼요.
예측 검색 (Retrieve the forecast)
예측이 생성된 후 예측에서 특정 기간을 쿼리할 수 있어요. 쿼리의 목표는 특정 기간에 대한 시계열 데이터의 완전한 보기를 얻는 것이에요.
- 쿼리는 최대 2일의 미래 예측 데이터를 포함할 수 있어요. 예측 확장을 한동안 사용했다면 과거 예측 데이터에도 접근할 수 있어요. 그러나 시작과 종료 시간 사이의 최대 기간은 30일이에요.
get-predictive-scaling-forecastAWS CLI 명령으로 예측을 얻으려면 명령에 다음 파라미터를 제공하세요:resource-id파라미터에 클러스터 이름 입력--policy-name파라미터에 정책 이름 입력--start-time파라미터에 지정된 시간 이후의 예측 데이터만 반환할 시작 시간 입력--end-time파라미터에 지정된 시간 이전의 예측 데이터만 반환할 종료 시간 입력
aws application-autoscaling get-predictive-scaling-forecast \
--service-namespace ecs \
--resource-id service/MyCluster/test \
--policy-name cpu40-predictive-scaling-policy \
--scalable-dimension ecs:service:DesiredCount \
--start-time "2021-05-19T17:00:00Z" \
--end-time "2021-05-19T23:00:00Z"
성공하면 명령은 다음 예시와 유사한 데이터를 반환해요.
{
"LoadForecast": [
{
"Timestamps": [
"2021-05-19T17:00:00+00:00",
"2021-05-19T18:00:00+00:00",
"2021-05-19T19:00:00+00:00",
"2021-05-19T20:00:00+00:00",
"2021-05-19T21:00:00+00:00",
"2021-05-19T22:00:00+00:00",
"2021-05-19T23:00:00+00:00"
],
"Values": [
153.0655799339254,
128.8288551285919,
107.1179447150675,
197.3601844551528,
626.4039934516954,
596.9441277518481,
677.9675713779869
],
"MetricSpecification": {
"TargetValue": 40.0,
"PredefinedMetricPairSpecification": {
"PredefinedMetricType": "ASGCPUUtilization"
}
}
}
],
"CapacityForecast": {
"Timestamps": [
"2021-05-19T17:00:00+00:00",
"2021-05-19T18:00:00+00:00",
"2021-05-19T19:00:00+00:00",
"2021-05-19T20:00:00+00:00",
"2021-05-19T21:00:00+00:00",
"2021-05-19T22:00:00+00:00",
"2021-05-19T23:00:00+00:00"
],
"Values": [
2.0,
2.0,
2.0,
2.0,
4.0,
4.0,
4.0
]
},
"UpdateTime": "2021-05-19T01:52:50.118000+00:00"
}
응답은 LoadForecast와 CapacityForecast 두 개의 예측을 포함해요. LoadForecast는 시간별 로드 예측을 보여줘요. CapacityForecast는 TargetValue 40.0(평균 CPU 사용률 40%)을 유지하면서 예측된 로드를 처리하는 데 시간별로 필요한 용량에 대한 예측 값을 보여줘요.
대상 기간 식별 (Identify the target time period)
일회성 수요 변동이 발생해야 하는 시간(들)을 식별해요. 예측에 표시된 날짜와 시간은 UTC라는 점을 기억하세요.
2단계: 예약 액션 두 개 만들기
다음으로, 애플리케이션이 예측된 것보다 높은 로드를 가질 특정 기간에 대한 예약 액션 두 개를 만듭니다. 예를 들어 제한된 기간 동안 사이트에 트래픽을 유도할 마케팅 이벤트가 있다면, 이벤트가 시작될 때 최소 용량을 업데이트하는 일회성 액션을 예약할 수 있어요. 그런 다음 이벤트가 끝날 때 최소 용량을 원래 설정으로 되돌리는 또 다른 액션을 예약해요.
- 콘솔(https://console.aws.amazon.com/ecs/v2)을 엽니다.
- Clusters 페이지에서 클러스터를 선택합니다.
- 클러스터 세부 정보 페이지의 Services 섹션에서 서비스를 선택합니다. 서비스 세부 정보 페이지가 표시됩니다.
- Service Auto Scaling을 선택합니다. 정책 페이지가 표시됩니다.
- Scheduled actions을 선택한 후 Create를 선택합니다. Create Schedule action 페이지가 표시됩니다.
- Action name에 고유한 이름을 입력합니다.
- Time zone에서 시간대를 선택합니다. 나열된 모든 시간대는 IANA Time Zone database에서 온 것입니다. 자세한 내용은 List of tz database time zones 참고.
- Start time에 액션이 시작되는 Date와 Time을 입력합니다.
- Recurrence에서 Once를 선택합니다.
- Task adjustments의 Minimum에 최대 태스크 수보다 작거나 같은 값을 입력합니다.
- Create scheduled action을 선택합니다. 정책 페이지가 표시됩니다.
이벤트가 끝날 때 최소 태스크 수를 원래 설정으로 되돌리는 두 번째 예약 액션을 구성합니다. 예측 확장은 Minimum에 설정한 값이 예측 값보다 낮을 때만 태스크 수를 확장할 수 있어요.
일회성 이벤트를 위한 예약 액션 두 개 만들기 (AWS CLI)
AWS CLI로 예약 액션을 만들려면 put-scheduled-update-group-action 명령을 사용합니다.
예를 들어 5월 19일 오후 5시에 8시간 동안 최소 용량 3개의 인스턴스를 유지하는 일정을 정의해 봅시다. 다음 명령은 이 시나리오를 구현하는 방법을 보여줘요.
첫 번째 put-scheduled-update-group-action 명령은 2021년 5월 19일 오후 5시(UTC)에 지정된 Auto Scaling group의 최소 용량을 업데이트하도록 Amazon EC2 Auto Scaling에 지시해요.
aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-event-start \
--auto-scaling-group-name my-asg --start-time "2021-05-19T17:00:00Z" --minimum-capacity 3
두 번째 명령은 2021년 5월 20일 오전 1시(UTC)에 그룹의 최소 용량을 1로 설정하도록 Amazon EC2 Auto Scaling에 지시해요.
aws autoscaling put-scheduled-update-group-action --scheduled-action-name my-event-end \
--auto-scaling-group-name my-asg --start-time "2021-05-20T01:00:00Z" --minimum-capacity 1
이 예약 액션들을 Auto Scaling group에 추가한 후 Amazon EC2 Auto Scaling은 다음을 수행해요:
- 2021년 5월 19일 오후 5시(UTC)에 첫 번째 예약 액션이 실행돼요. 그룹에 현재 3개 미만의 인스턴스가 있으면 그룹은 3개 인스턴스로 확장(scale out)돼요. 이 시간과 이후 8시간 동안 예측된 용량이 실제 용량보다 높거나 동적 확장 정책이 적용 중이면 Amazon EC2 Auto Scaling은 계속 확장할 수 있어요.
- 2021년 5월 20일 오전 1시(UTC)에 두 번째 예약 액션이 실행돼요. 이는 이벤트 끝에 최소 용량을 원래 설정으로 되돌려요.
반복 일정 기반의 확장 (Scaling based on recurring schedules)
매주 같은 시간대에 대한 예측을 재정의하려면 cron 표현식으로 두 개의 예약 액션을 만들고 시간·날짜 로직을 제공하세요. cron 표현식 형식은 공백으로 구분된 5개 필드로 구성돼요: [Minute] [Hour] [Day_of_Month] [Month_of_Year] [Day_of_Week]. 필드는 특수 문자를 포함한 모든 허용 값을 포함할 수 있어요.
예를 들어 다음 cron 표현식은 매주 화요일 오전 6시 30분에 액션을 실행해요. 별표는 필드의 모든 값을 일치시키는 와일드카드로 사용돼요.
30 6 * * 2