

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Application Auto Scaling의 예측 조정
<a name="application-auto-scaling-predictive-scaling"></a>

예측 조정은 애플리케이션을 사전에 조정합니다. 예측 조정은 과거 로드 데이터를 분석하여 트래픽 흐름의 일별 또는 주별 패턴을 감지합니다. 이 정보를 사용하여 예상되는 부하에 맞게 애플리케이션의 용량을 사전에 늘려야 하는 향후 용량을 예측합니다.

예측 조정은 다음과 같은 상황에 매우 적합합니다.
+ 주기적 트래픽(예: 정규 업무 시간 동안 리소스 사용량이 많고 저녁 및 주말에는 리소스가 적게 사용되는 경우)
+ 배치 처리, 테스트 또는 주기적 데이터 분석과 같은 반복적인 on-and-off 워크로드 패턴.
+ 초기화하는 데 시간이 오래 걸려 스케일 아웃 이벤트 중에 애플리케이션 성능에 눈에 띄는 지연 영향을 받는 애플리케이션

**Topics**
+ [작동 방식](aas-predictive-scaling-how-it-works.md)
+ [예측 조정 정책 생성](aas-create-predictive-scaling-policy.md)
+ [예측 재정의](aas-predictive-scaling-overriding-forecast-capacity.md)
+ [사용자 정의 지표 사용](aas-predictive-scaling-customized-metric-specification.md)

# Application Auto Scaling 예측 조정 작동 방식
<a name="aas-predictive-scaling-how-it-works"></a>

예측 조정을 사용하려면 모니터링 및 분석할 CloudWatch 지표를 지정하는 예측 조정 정책을 생성합니다. 사전 정의된 지표 또는 사용자 지정 지표를 사용할 수 있습니다. 예측 조정이 미래 값 예측을 시작하려면 이 지표에 24시간 이상의 데이터가 있어야 합니다.

정책을 생성한 후 예측 조정은 패턴을 식별하기 위해 지난 14일까지의 지표 데이터를 분석하기 시작합니다. 이 분석을 사용하여 향후 48시간의 용량 요건에 대한 시간별 예측을 생성합니다. 예측은 최신 CloudWatch 데이터를 사용하여 6시간마다 업데이트됩니다. 새로운 데이터가 들어오면 예측 조정을 통해 향후 예측의 정확도를 지속적으로 개선할 수 있습니다.

먼저 *예측 전용* 모드에서 예측 조정을 활성화할 수 있습니다. 이 모드에서는 용량 예측을 생성하지만 실제로는 이러한 예측을 기반으로 용량을 조정하지 않습니다. 이를 통해 예측의 정확성과 적합성을 평가할 수 있습니다.

예측 데이터를 검토하고 해당 데이터를 기반으로 조정을 시작하기로 결정한 후에 조정 정책을 예측 및 조정 모드로 전환합니다. 이 모드에서는 다음을 수행합니다.
+ 예측에서 부하가 증가할 것으로 예상되는 경우 예측 규모 조정은 용량을 증가시킵니다.
+ 예측에서 부하가 감소할 것으로 예상되는 경우 예측 조정은 용량을 제거하기 위해 축소되지 않습니다. 이렇게 하면 예측뿐만 아니라 수요가 실제로 감소할 때만 스케일 인할 수 있습니다. 더 이상 필요하지 않은 용량을 제거하려면 실시간 지표 데이터에 응답하기 때문에 대상 추적 또는 단계 조정 정책을 생성해야 합니다.

기본적으로 예측 조정은 해당 시간에 대한 예측을 기반으로 매 시간 시작 시 확장 가능 대상을 조정합니다. 선택적으로 `PutScalingPolicy` API 작업에서 `SchedulingBufferTime` 속성을 사용하여 더 빠른 시작 시간을 지정할 수 있습니다. 이렇게 하면 예상 수요보다 앞서 예상 용량을 시작할 수 있으므로 새 용량이 트래픽을 처리할 준비가 될 충분한 시간을 확보할 수 있습니다.

## 최대 용량 제한
<a name="aas-ps-max-capcity-limit"></a>

기본적으로 조정 정책이 설정되면 용량을 최대 용량보다 크게 늘일 수 없습니다.

또는 예측 용량이 확장 가능 대상의 최대 용량에 근접하거나 초과하는 경우 확장 가능 대상의 최대 용량을 자동으로 늘리도록 허용할 수 있습니다. 이 동작을 활성화하려면 `PutScalingPolicy` API 작업에서 `MaxCapacityBreachBehavior` 및 `MaxCapacityBuffer` 속성을 사용하거나 AWS Management Console에서 **최대 용량 동작** 설정을 사용합니다.

**주의**  
최대 용량을 자동으로 늘리도록 허용할 때에는 주의해야 합니다. 최대 용량은 원래 최대 용량으로 자동으로 감소하지 않습니다.

## 조정 정책 생성, 관리 및 삭제를 위해 일반적으로 사용되는 명령
<a name="aas-ps-common-commands"></a>

예측 조정 정책 작업에 일반적으로 사용되는 명령은 다음과 같습니다.
+ `register-scalable-target` 확장 가능 대상으로 AWS 또는 사용자 지정 리소스를 등록하고, 조정을 일시 중지하고, 조정을 재개합니다.
+ `put-scaling-policy` 예측 조정 정책을 생성합니다.
+ `get-predictive-scaling-forecast` 예측 조정 정책에 대한 예측 데이터를 검색합니다.
+ `describe-scaling-activities`에서 조정 활동에 대한 정보를 반환합니다 AWS 리전.
+ `describe-scaling-policies`에서 조정 정책에 대한 정보를 반환합니다 AWS 리전.
+ `delete-scaling-policy` 조정 정책을 삭제합니다.

**사용자 지정 지표**  
사용자 지정 지표를 사용하여 애플리케이션에 필요한 용량을 예측할 수 있습니다. 사용자 지정 지표는 사전 정의된 지표가 애플리케이션의 로드를 캡처하기에 충분하지 않을 때 유용합니다.

## 고려 사항
<a name="aas-ps-considerations"></a>

예측 조정 작업 시 다음 고려 사항이 적용됩니다.
+ 예측 조정이 애플리케이션에 적합한지 확인합니다. 애플리케이션은 요일 또는 시간에 특정한 반복 로드 패턴을 보이는 경우 예측 조정에 적합합니다. 예측 규모 조정이 애플리케이션을 적극적으로 확장하도록 하기 전에 예측을 평가합니다.
+ 예측 조정이 예상을 시작하려면 최소 24시간 동안의 기록 데이터가 필요합니다. 그러나 기록 데이터가 2주 전체에 걸쳐 있는 경우, 예측이 더 정확합니다.
+ 애플리케이션의 전체 로드를 정확하게 나타내고 확장해야 하는 애플리케이션의 측면인 부하 지표를 선택합니다.

# Application Auto Scaling에 대한 예측 조정 정책 생성
<a name="aas-create-predictive-scaling-policy"></a>

다음 예제 정책은 AWS CLI 를 사용하여 Amazon ECS 서비스에 대한 예측 조정 정책을 구성합니다. *user input placeholder*를 사용자의 정보로 바꿉니다.

지정 가능한 CloudWatch 지표에 대한 자세한 내용은 *Amazon EC2 Auto Scaling API 참조*의 [PredictiveScalingMetricSpecification](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PredictiveScalingMetricSpecification.html)을 참조하세요.

다음은 사전 정의된 메모리 구성이 있는 예제 정책입니다.

```
cat policy.json
{
    "MetricSpecifications": [
        {
            "TargetValue": 40,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ECSServiceMemoryUtilization"
            }
        }
    ],
    "SchedulingBufferTime": 3600,
    "MaxCapacityBreachBehavior": "HonorMaxCapacity",
    "Mode": "ForecastOnly"
}
```

다음 예제에서는 지정된 구성 파일로 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) 명령을 실행하여 정책을 생성하는 것을 보여줍니다.

```
aws aas put-scaling-policy \
--service-namespace ecs \
--region us-east-1 \
--policy-name predictive-scaling-policy-example \
--resource-id service/MyCluster/test \
--policy-type PredictiveScaling \
--scalable-dimension ecs:service:DesiredCount \
--predictive-scaling-policy-configuration file://policy.json
```

이 명령이 제대로 실행되면 정책의 ARN이 반환됩니다.

```
{
"PolicyARN": "arn:aws:autoscaling:us-east-1:012345678912:scalingPolicy:d1d72dfe-5fd3-464f-83cf-824f16cb88b7:resource/ecs/service/MyCluster/test:policyName/predictive-scaling-policy-example",
"Alarms": []
}
```

# 예약된 작업을 사용하여 예측 값 재정의
<a name="aas-predictive-scaling-overriding-forecast-capacity"></a>

경우에 따라 예상 계산에서 고려할 수 없는 향후 애플리케이션 필요량에 대한 추가 정보가 있을 수 있습니다. 예컨대, 예상 계산은 향후 마케팅 이벤트에 필요한 용량을 과소 평가할 수 있습니다. 예약된 작업을 사용하여 미래 기간에 대한 예상을 임시로 재정의할 수 있습니다. 예약된 작업은 반복적으로 실행되거나 일회성 수요 변동이 있는 특정 날짜 및 시간에 실행될 수 있습니다.

예컨대, 예상한 것보다 높은 최소 용량으로 예약된 작업을 생성할 수 있습니다. 실행 시간에 Application Auto Scaling은 확장 가능 대상의 최소 용량을 업데이트합니다. 예측 조정은 용량에 맞게 최적화하므로 최소 용량이 예상 값보다 높은 예약된 작업이 적용됩니다. 이렇게 하면 용량이 예상보다 작아지는 것을 방지할 수 있습니다. 예상 재정의를 중지하려면 두 번째 예약된 작업을 사용하여 최소 용량을 원래 설정으로 되돌립니다.

다음 절차에서는 미래 기간의 예상을 재정의하는 단계를 간략하게 설명합니다.

**Topics**
+ [1단계: (옵션) 시계열 데이터 분석](#analyzing-time-series-data)
+ [2단계: 2개의 예약된 작업 생성](#scheduling-capacity)

**중요**  
이 주제에서는 예측보다 더 큰 용량으로 확장하기 위해 예측을 재정의한다고 가정합니다. 예측 조정 정책의 간섭 없이 일시적으로 용량을 줄여야 하는 경우 *예측 전용* 모드를 대신 사용합니다. 예측 전용 모드에서 예측 조정은 계속 예측을 생성하지만 용량이 자동으로 증가하지는 않습니다. 그런 다음 리소스 사용률을 모니터링하고 필요에 따라 그룹의 크기를 수동으로 줄일 수 있습니다.

## 1단계: (옵션) 시계열 데이터 분석
<a name="analyzing-time-series-data"></a>

예상 시계열 데이터 분석으로 시작합니다. 이 단계는 선택 사항이지만 예상의 세부 정보를 파악하려는 경우, 유용합니다.

1. **예상 검색**

   예상이 생성되면 예상에서 특정 기간을 쿼리할 수 있습니다. 쿼리의 목표는 특정 기간에 대한 시계열 데이터의 전체 보기를 얻는 것입니다.

   쿼리에는 최대 2일간의 미래 예상 데이터가 포함될 수 있습니다. 예측 조정을 잠시 사용한 경우에도 과거 예상 데이터에 액세스할 수 있습니다. 그러나 시작 시간과 해지 시간 사이의 최대 기간은 30일입니다.

   예측을 검색하려면 [get-predictive-scaling-forecast](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/application-autoscaling/get-predictive-scaling-forecast.html) 명령을 사용합니다. 다음 예시에서는 Amazon ECS 서비스에 대한 예측 조정 예측을 가져옵니다.

   ```
   aws application-autoscaling get-predictive-scaling-forecast --service-namespace ecs \
       --scalable-dimension ecs:service:DesiredCount \
       --resource-id 1234567890abcdef0          
       --policy-name predictive-scaling-policy \     
       --start-time "2021-05-19T17:00:00Z" \
       --end-time "2021-05-19T23:00:00Z"
   ```

   응답에는 `LoadForecast` 및의 두 가지 예측이 포함됩니다`CapacityForecast`.는 시간별 로드 예측을 `LoadForecast` 보여줍니다.는 지정된를 유지하면서 예측된 로드를 처리하는 데 시간별로 필요한 용량의 예측 값을 `CapacityForecast` 보여줍니다`TargetValue`.

1. **대상 기간 식별**

   일회성 수요 변동이 발생해야 하는 시간을 식별합니다. 예상에 표시된 날짜와 시간은 UTC입니다.

## 2단계: 2개의 예약된 작업 생성
<a name="scheduling-capacity"></a>

다음으로, 애플리케이션의 예상 로드보다 높은 특정 기간에 대해 2개의 예약된 작업을 생성합니다. 예컨대, 제한된 기간에 사이트에 대한 트래픽을 높이는 마케팅 이벤트가 있는 경우, 이벤트 시작 시 최소 용량을 업데이트하는 일회성 작업을 예약할 수 있습니다. 그런 다음 이벤트가 해지 시 최소 용량을 원래 설정으로 되돌리도록 다른 작업을 예약합니다.

**일회성 이벤트에 대해 2개의 예약된 작업을 생성하려면(AWS CLI)**  
예약된 작업을 생성하려면 [ put-scheduled-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/application-autoscaling/put-scheduled-action.html) 명령을 사용합니다.

다음 예제에서는 5월 19일 오후 5시에 8시간 동안 인스턴스 3개의 최소 용량을 유지하는 Amazon EC2 Auto Scaling 일정을 정의합니다. 다음 명령은 이 시나리오를 구현하는 방법을 보여 줍니다.

첫 번째 [put-scheduled-update-group-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-update-group-action.html) 명령은 2021년 5월 19일 오후 5시(UTC)에 지정된 Auto Scaling 그룹의 최소 용량을 업데이트하도록 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)의 용량으로 설정하도록 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 그룹에 추가하면 Amazon EC2 Auto Scaling은 다음을 수행합니다.
+ 2021년 5월 19일 오후 5시(UTC)에 첫 번째 예약된 작업이 실행됩니다. 현재 해당 그룹에 인스턴스가 3개 미만 있는 경우, 그룹은 인스턴스 3개로 스케일 아웃됩니다. 이 시간과 향후 8시간 동안 예측 용량이 실제 용량보다 높거나 동적 조정 정책이 적용되는 경우, Amazon EC2 Auto Scaling이 계속 스케일 아웃을 수행할 수 있습니다.
+ 2021년 5월 20일 오전 1시(UTC)에 두 번째 예약된 작업이 실행됩니다. 이렇게 하면 이벤트 해지 시 최소 용량이 원래 설정으로 돌아갑니다.

### 반복 일정에 따라 크기 조정
<a name="scheduling-recurring-actions"></a>

매주 동일한 기간에 대한 예상을 재정의하려면 두 개의 예약된 작업을 생성하고 cron 표현식을 사용하여 시간 및 날짜 로직을 제공합니다.

cron 표현식 형식은 다음과 같이 공백으로 구분된 다섯 개의 필드로 구성됩니다. [Minute] [Hour] [Day\$1of\$1Month] [Month\$1of\$1Year] [Day\$1of\$1Week]. 필드에는 특수 문자를 포함하여 허용되는 모든 값을 포함할 수 있습니다.

예컨대, 다음 cron 표현식은 매주 화요일 오전 6시 30분에 작업을 실행합니다. 별표는 필드의 모든 값을 일치시키기 위한 와일드카드로 사용됩니다.

```
30 6 * * 2
```

# 사용자 정의 지표를 사용하는 고급 예측 조정 정책
<a name="aas-predictive-scaling-customized-metric-specification"></a>

예측적 조정 정책에서는 미리 정의된 지표나 사용자 정의 지표를 사용할 수 있습니다. 사용자 지정 지표는 사전 정의된 지표가 애플리케이션 로드를 충분히 설명하지 못하는 경우에 유용합니다.

사용자 지정 지표를 사용하여 예측 조정 정책을 생성할 때에서 제공하는 다른 CloudWatch 지표를 지정 AWS하거나 직접 정의하고 게시하는 지표를 지정할 수 있습니다. 지표 수학을 사용하여 기존 지표를 집계하고 자동으로 추적되지 AWS 않는 새 시계열로 변환할 수도 있습니다. 예컨대, 새 합계 또는 평균을 계산하여 데이터의 값을 결합하는 것을 *집계*라고 합니다. 결과 데이터를 *집계*라고 합니다.

다음 섹션에는 정책의 JSON 구조를 구성하는 방법에 대한 모범 사례와 예가 나와 있습니다.

**Topics**
+ [모범 사례](#custom-metrics-best-practices)
+ [사전 조건](#custom-metrics-prerequisites)
+ [사용자 지정 지표를 위한 JSON 구성](construct-json-custom-metrics.md)
+ [예측 조정 정책에서 사용자 정의 지표 사용 시 고려 사항](custom-metrics-troubleshooting.md)

## 모범 사례
<a name="custom-metrics-best-practices"></a>

다음 모범 사례는 사용자 정의 지표를 보다 효과적으로 사용하는 데 도움이 될 수 있습니다.
+ 로드 지표 사양의 경우 가장 유용한 지표는 애플리케이션의 로드를 나타내는 지표입니다.
+ 조정 지표는 용량에 반비례해야 합니다. 즉, 확장 가능 대상이 증가하면 조정 지표가 거의 동일한 비율로 감소해야 합니다. 예측적 조정이 예상대로 작동하게 하려면 로드 지표와 조정 지표도 서로 밀접한 상관 관계가 있어야 합니다.
+ 목표 사용률은 조정 지표 유형과 일치해야 합니다. CPU 사용률을 사용하는 정책 구성의 경우, 이는 목표 백분율입니다. 요청 또는 메시지 수와 같이 처리량을 사용하는 정책 구성의 경우, 이는 1분 간격 동안 인스턴스당 요청 또는 메시지의 대상 수입니다.
+ 이러한 권장 사항을 따르지 않으면 시계열의 예측된 미래 값이 정확하지 않을 수 있습니다. 데이터가 올바른지 검증하기 위해 예측된 값을 볼 수 있습니다. 또는 예측적 조정 정책을 생성한 후 [GetPredictiveScalingForecast](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_GetPredictiveScalingForecast.html) API 호출에서 반환된 `LoadForecast` 및 `CapacityForecast` 객체를 검사합니다.
+ 예측적 조정이 능동적으로 용량 조정을 시작하기 전에 예상을 평가할 수 있게 예상 전용 모드에서 예측적 조정을 구성하는 것이 좋습니다.

## 사전 조건
<a name="custom-metrics-prerequisites"></a>

정책에서 사용자 지정 지표를 지정하려면 `cloudwatch:GetMetricData` 권한이 있어야 합니다.

에서 AWS 제공하는 지표 대신 자체 지표를 지정하려면 먼저 지표를 CloudWatch에 게시해야 합니다. 자세한 설명은 *Amazon CloudWatch 사용 설명서*의 [사용자 정의 지표 게시](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)를 참조하세요.

자체 지표를 게시하는 경우, 최소 5분 간격으로 데이터 요소를 게시해야 합니다. Application Auto Scaling은 필요한 기간 길이를 기준으로 CloudWatch에서 데이터 포인트를 검색합니다. 예컨대, 로드 지표 사양은 시간별 지표를 사용하여 애플리케이션의 로드를 측정합니다. CloudWatch는 게시된 지표 데이터로 각 1시간 기간에 속하는 타임스탬프가 있는 모든 데이터 요소를 집계하여 1시간 기간 동안 단일 데이터 값을 제공합니다.

# 사용자 지정 지표를 위한 JSON 구성
<a name="construct-json-custom-metrics"></a>

다음 섹션에는 Amazon EC2 Auto Scaling용 CloudWatch에서 데이터를 쿼리하도록 예측 조정을 구성하는 방법에 대한 예제가 포함되어 있습니다. 이 옵션을 구성하는 방법에는 두 가지가 있으며 선택하는 방법에 따라 예측 조정 정책에 사용할 JSON을 구성하는 데 사용하는 형식이 달라집니다. 지표 수학을 사용하는 경우, JSON의 형식은 수행되는 지표 수학에 따라 더 달라집니다.

1. 에서 제공하는 다른 CloudWatch 지표 AWS 또는 CloudWatch에 게시하는 지표에서 직접 데이터를 가져오는 정책을 생성하려면 섹션을 참조하세요[사용자 지정 로드 및 조정 지표가 있는 예측 조정 정책의 예(AWS CLI)](#custom-metrics-ex1).

1. 여러 CloudWatch 지표를 쿼리하고 수학 표현식을 사용하여 이러한 지표에 근거하여 새 시계열을 생성할 수 있는 정책을 생성하려면 [지표 수학 표현식 사용](using-math-expression-examples.md)를 참조하세요.

## 사용자 지정 로드 및 조정 지표가 있는 예측 조정 정책의 예(AWS CLI)
<a name="custom-metrics-ex1"></a>

를 사용하여 사용자 지정 로드 및 조정 지표를 사용하여 예측 조정 정책을 생성하려면 라는 JSON 파일에 `--predictive-scaling-configuration`에 대한 인수를 AWS CLI저장합니다`config.json`.

다음 예에서 교체 가능한 값을 지표 및 목표 사용률의 값으로 교체하여 사용자 지정 지표를 추가하기 시작합니다.

```
{
  "MetricSpecifications": [
    {
      "TargetValue": 50,
      "CustomizedScalingMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "scaling_metric",
            "MetricStat": {
              "Metric": {
                "MetricName": "MyUtilizationMetric",
                "Namespace": "MyNameSpace",
                "Dimensions": [
                  {
                    "Name": "MyOptionalMetricDimensionName",
                    "Value": "MyOptionalMetricDimensionValue"
                  }
                ]
              },
              "Stat": "Average"
            }
          }
        ]
      },
      "CustomizedLoadMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_metric",
            "MetricStat": {
              "Metric": {
                "MetricName": "MyLoadMetric",
                "Namespace": "MyNameSpace",
                "Dimensions": [
                  {
                    "Name": "MyOptionalMetricDimensionName",
                    "Value": "MyOptionalMetricDimensionValue"
                  }
                ]
              },
              "Stat": "Sum"
            }
          }
        ]
      }
    }
  ]
}
```

자세한 설명은 *Amazon EC2 Auto Scaling API 참조*의 [MetricDataQuery](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_MetricDataQuery.html)를 참조하세요.

**참고**  
다음은 CloudWatch 지표에 대한 지표 이름, 네임스페이스, 차원 및 통계를 찾는 데 도움이 되는 몇 가지 추가 리소스입니다.  
 AWS 서비스에 사용할 수 있는 지표에 대한 자세한 내용은 Amazon [AWS CloudWatch 사용 설명서의 CloudWatch 지표를 게시하는 서비스를](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html) 참조하세요. *Amazon CloudWatch *
를 사용하여 CloudWatch 지표의 정확한 지표 이름, 네임스페이스 및 차원(해당하는 경우)을 가져오려면 [list-metrics](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/list-metrics.html)를 AWS CLI참조하세요.

이 정책을 생성하려면 다음 예에 나와 있는 것처럼 JSON 파일을 입력으로 사용하여 [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scaling-policy.html) 명령을 실행합니다.

```
aws autoscaling put-scaling-policy --policy-name my-predictive-scaling-policy \
  --auto-scaling-group-name my-asg --policy-type PredictiveScaling \
  --predictive-scaling-configuration file://config.json
```

이 명령이 제대로 실행되면 정책의 Amazon 리소스 이름(ARN)을 반환합니다.

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-predictive-scaling-policy",
  "Alarms": []
}
```

# 지표 수학 표현식 사용
<a name="using-math-expression-examples"></a>

다음 섹션에서는 정책에서 지표 수학을 사용하는 방법을 보여 주는 예측 조정 정책의 정보와 예를 제공합니다.

**Topics**
+ [지표 수학 이해](#custom-metrics-metric-math)
+ [지표 수학을 사용하여 지표를 결합하는 Amazon EC2 Auto Scaling에 대한 예측 조정 정책 예제(AWS CLI)](#custom-metrics-ex2)
+ [블루/그린 배치 시나리오에서 사용할 예측 조정 정책의 예(AWS CLI)](#custom-metrics-ex3)

## 지표 수학 이해
<a name="custom-metrics-metric-math"></a>

기존 지표 데이터를 집계하기만 하면 CloudWatch 지표 수학을 통해 CloudWatch에 다른 지표를 게시하는 데 드는 노력과 비용을 절약할 수 있습니다. 에서 AWS 제공하는 모든 지표를 사용할 수 있으며 애플리케이션의 일부로 정의한 지표를 사용할 수도 있습니다.

자세한 설명은 *Amazon CloudWatch 사용 설명서*의 [지표 수학 사용](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)을 참조하세요.

예측적 조정 정책에서 지표 수학 표현식을 사용하기로 선택한 경우, 다음 사항을 고려하세요.
+ 지표 수학 연산은 고유한 조합의 지표 이름, 네임스페이스 및 지표의 차원 키/값 페어의 데이터 요소를 사용합니다.
+ 산술 연산자(\$1 - \$1 / ^), 통계 함수(예: AVG 또는 SUM) 또는 CloudWatch에서 지원하는 기타 함수를 사용할 수 있습니다.
+ 수학 표현식의 공식에서 지표 및 다른 수학 표현식의 결과를 모두 사용할 수 있습니다.
+ 지표 수학 표현식은 다양한 집계로 구성될 수 있습니다. 그러나 최종 집계 결과에서 조정 지표에는 `Average`를 사용하고 로드 지표에는 `Sum`을 사용하는 것이 가장 좋습니다.
+ 지표 사양에 사용된 표현식은 결국 단일 시계열을 반환해야 합니다.

지표 수학을 사용하려면 다음을 수행합니다.
+ 하나 이상의 CloudWatch 지표를 선택합니다. 그런 다음 표현식을 생성합니다. 자세한 설명은 *Amazon CloudWatch 사용자 가이드*의 [지표 수학 사용](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)을 참조하세요.
+ CloudWatch 콘솔 또는 CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) API를 사용하여 지표 수학 표현식이 유효한지 확인합니다.

## 지표 수학을 사용하여 지표를 결합하는 Amazon EC2 Auto Scaling에 대한 예측 조정 정책 예제(AWS CLI)
<a name="custom-metrics-ex2"></a>

지표를 직접 지정하는 대신 어떤 방식으로든 해당 데이터를 먼저 처리해야 하는 경우가 있습니다. 예컨대, Amazon SQS 대기열에서 작업을 가져오는 애플리케이션이 있고 대기열의 항목 수를 예측적 조정의 기준으로 사용할 수 있습니다. 대기열의 메시지 수가 필요한 인스턴스 수를 단독으로 정의하지 않습니다. 따라서 인스턴스당 백로그를 계산하는 데 사용할 수 있는 지표를 생성하려면 더 많은 작업이 필요합니다.

다음은 이 시나리오에 대한 예측적 조정 정책의 예입니다. 대기열에서 검색할 수 있는 메시지 수인 Amazon SQS `ApproximateNumberOfMessagesVisible` 지표를 기준으로 하는 조정 및 로드 지표를 지정합니다. 또한 Amazon EC2 Auto Scaling `GroupInServiceInstances` 지표와 수학 표현식을 사용하여 조정 지표에 대한 인스턴스당 백로그를 계산합니다.

```
aws autoscaling put-scaling-policy --policy-name my-sqs-custom-metrics-policy \
  --auto-scaling-group-name my-asg --policy-type PredictiveScaling \
  --predictive-scaling-configuration file://config.json
{
  "MetricSpecifications": [
    {
      "TargetValue": 100,
      "CustomizedScalingMetricSpecification": {
        "MetricDataQueries": [
          {
            "Label": "Get the queue size (the number of messages waiting to be processed)",
            "Id": "queue_size",
            "MetricStat": {
              "Metric": {
                "MetricName": "ApproximateNumberOfMessagesVisible",
                "Namespace": "AWS/SQS",
                "Dimensions": [
                  {
                    "Name": "QueueName",
                    "Value": "my-queue"
                  }
                ]
              },
              "Stat": "Sum"
            },
            "ReturnData": false
          },
          {
            "Label": "Get the group size (the number of running instances)",
            "Id": "running_capacity",
            "MetricStat": {
              "Metric": {
                "MetricName": "GroupInServiceInstances",
                "Namespace": "AWS/AutoScaling",
                "Dimensions": [
                  {
                    "Name": "AutoScalingGroupName",
                    "Value": "my-asg"
                  }
                ]
              },
              "Stat": "Sum"
            },
            "ReturnData": false
          },
          {
            "Label": "Calculate the backlog per instance",
            "Id": "scaling_metric",
            "Expression": "queue_size / running_capacity",
            "ReturnData": true
          }
        ]
      },
      "CustomizedLoadMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_metric",
            "MetricStat": {
              "Metric": {
                "MetricName": "ApproximateNumberOfMessagesVisible",
                "Namespace": "AWS/SQS",
                "Dimensions": [
                  {
                    "Name": "QueueName",
                    "Value": "my-queue"
                  }
                ],
              },
              "Stat": "Sum"
            },
            "ReturnData": true
          }
        ]
      }
    }
  ]
}
```

이 예에서는 정책의 ARN을 반환합니다.

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-sqs-custom-metrics-policy",
  "Alarms": []
}
```

## 블루/그린 배치 시나리오에서 사용할 예측 조정 정책의 예(AWS CLI)
<a name="custom-metrics-ex3"></a>

검색 표현식은 여러 Auto Scaling 그룹에서 지표를 쿼리하고 이에 대해 수학 표현식을 수행할 수 있는 고급 옵션을 제공합니다. 이는 특히 블루/그린 배치에 유용합니다.

**참고**  
*블루/그린 배치*는 두 개의 별개이지만 동일한 Auto Scaling 그룹을 생성하는 배치 방법입니다. 그룹 중 하나만 프로덕션 트래픽을 수신합니다. 사용자 트래픽은 초기에 이전("블루") Auto Scaling 그룹으로 전달되는 반면 새 그룹("그린")은 새 버전의 애플리케이션 또는 서비스를 테스트하고 평가하는 데 사용됩니다. 새 배치가 테스트되고 수락되면 사용자 트래픽이 그린 Auto Scaling 그룹으로 이동됩니다. 그런 다음 배치가 성공한 후 블루 그룹을 삭제할 수 있습니다.

새로운 Auto Scaling 그룹이 블루/그린 배치의 일부로 생성되면 해당 지표 사양을 변경하지 않고도 각 그룹의 지표 기록이 예측적 조정 정책에 자동으로 포함될 수 있습니다. 자세한 내용은 AWS 컴퓨팅 블로그의 [블루/그린 배포에서 EC2 Auto Scaling 예측 조정 정책 사용을 참조하세요](https://aws.amazon.com/blogs/compute/retaining-metrics-across-blue-green-deployment-for-predictive-scaling/).

다음 예 정책은 이를 수행하는 방법을 보여줍니다. 이 예에서 정책은 Amazon EC2에서 내보낸 `CPUUtilization` 지표를 사용합니다. Amazon EC2 Auto Scaling `GroupInServiceInstances` 지표와 수학 표현식을 사용하여 인스턴스당 조정 지표 값을 계산합니다. 또한 `GroupInServiceInstances` 지표를 가져오기 위한 용량 지표 사양을 지정합니다.

검색 표현식은 지정된 검색 기준에 따라 여러 Auto Scaling 그룹에서 인스턴스의 `CPUUtilization`을 찾습니다. 나중에 동일한 검색 기준과 일치하는 새 Auto Scaling 그룹을 생성하면 새 Auto Scaling 그룹에 있는 인스턴스의 `CPUUtilization`이 자동으로 포함됩니다.

```
aws autoscaling put-scaling-policy --policy-name my-blue-green-predictive-scaling-policy \
  --auto-scaling-group-name my-asg --policy-type PredictiveScaling \
  --predictive-scaling-configuration file://config.json
{
  "MetricSpecifications": [
    {
      "TargetValue": 25,
      "CustomizedScalingMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_sum",
            "Expression": "SUM(SEARCH('{AWS/EC2,AutoScalingGroupName} MetricName=\"CPUUtilization\" ASG-myapp', 'Sum', 300))",
            "ReturnData": false
          },
          {
            "Id": "capacity_sum",
            "Expression": "SUM(SEARCH('{AWS/AutoScaling,AutoScalingGroupName} MetricName=\"GroupInServiceInstances\" ASG-myapp', 'Average', 300))",
            "ReturnData": false
          },
          {
            "Id": "weighted_average",
            "Expression": "load_sum / capacity_sum",
            "ReturnData": true
          }
        ]
      },
      "CustomizedLoadMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "load_sum",
            "Expression": "SUM(SEARCH('{AWS/EC2,AutoScalingGroupName} MetricName=\"CPUUtilization\" ASG-myapp', 'Sum', 3600))"
          }
        ]
      },
      "CustomizedCapacityMetricSpecification": {
        "MetricDataQueries": [
          {
            "Id": "capacity_sum",
            "Expression": "SUM(SEARCH('{AWS/AutoScaling,AutoScalingGroupName} MetricName=\"GroupInServiceInstances\" ASG-myapp', 'Average', 300))"
          }
        ]
      }
    }
  ]
}
```

이 예에서는 정책의 ARN을 반환합니다.

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-blue-green-predictive-scaling-policy",
  "Alarms": []
}
```

# 예측 조정 정책에서 사용자 정의 지표 사용 시 고려 사항
<a name="custom-metrics-troubleshooting"></a>

사용자 정의 지표를 사용하는 동안 문제가 발생하면 다음을 수행하는 것이 좋습니다.
+ 오류 메시지가 제공되면 메시지를 읽고 가능한 경우, 보고된 문제를 해결하세요.
+ 표현식을 미리 검증하지 않은 경우 [ put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/application-autoscaling/put-scaling-policy.html) 명령은 조정 정책을 생성할 때 해당 표현식을 검증합니다. 그러나 이 명령이 발견된 오류의 정확한 원인을 식별하지 못할 수도 있습니다. 문제를 해결하려면 [get-metric-data](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/get-metric-data.html) 명령에 대한 요청의 응답에서 수신하는 오류를 해결합니다. CloudWatch 콘솔에서 표현식의 문제를 해결할 수도 있습니다.
+ `MetricDataQueries`가 SUM()과 같은 수학 함수 없이 자체적으로 SEARCH() 함수를 지정하는 경우, `ReturnData`에 대해 `false`를 지정해야 합니다. 이는 검색 표현식이 여러 시계열을 반환할 수 있고 표현식에 근거하여 하는 지표 사양이 하나의 시계열만 반환할 수 있기 때문입니다.
+ 검색 표현식과 관련된 모든 지표는 해상도가 동일해야 합니다.

**제한 사항**  
다음과 같은 제한이 적용됩니다.
+ 하나의 지표 사양에서 최대 10개 지표의 데이터 요소를 쿼리할 수 있습니다.
+ 이 제한을 위해 하나의 표현식이 하나의 지표로 계산됩니다.