

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon EC2 Auto Scaling 的預測擴展
<a name="ec2-auto-scaling-predictive-scaling"></a>

預測擴展的運作方式是分析歷史負載資料，以偵測流量中的每日或每週模式。它使用此資訊來預測未來容量需求，因此 Amazon EC2 Auto Scaling 可以主動增加 Auto Scaling 群組的容量，以符合預期的負載。

預測擴展非常適合以下情況：
+ 循環流量，例如正常上班時間資源使用量大，夜間和週末資源使用量小
+ 重複間歇工作負載模式，例如批次處理、測試或週期性資料分析
+ 需要長時間才能初始化的應用程式，會在擴增事件期間對應用程式效能造成明顯的延遲影響

一般而言，如果有常規的流量增加模式，以及需要長時間才能初始化的應用程式，您應該考慮使用預測擴展。相較於僅使用動態擴展 (本質是被動式)，預測擴展可以在預測負載之前啟動容量，協助您更快擴展。預測擴展也可以協助您避免過度佈建容量，從而在 EC2 帳單上節省成本。

例如，考量應用程式在營業時間內具有高使用率而在夜間具有低使用率。在每個工作天開始時，預測擴展可以在第一次流量湧入之前新增容量。在從較低的使用率期間到較高的使用率期間時，這可協助您的應用程式維持高可用性和效能。您不必等待動態擴展來對不斷變化的流量做出反應。您也不必花時間檢閱應用程式的負載模式並嘗試使用排程的擴展來排程適當的容量。

**Topics**
+ [預測擴展的運作方式](predictive-scaling-policy-overview.md)
+ [建立預測性擴展政策](predictive-scaling-create-policy.md)
+ [評估您的預測擴展政策](predictive-scaling-graphs.md)
+ [覆寫預測](predictive-scaling-overriding-forecast-capacity.md)
+ [使用自訂指標](predictive-scaling-customized-metric-specification.md)

# 預測擴展的運作方式
<a name="predictive-scaling-policy-overview"></a>

本主題說明預測擴展的運作方式，並說明建立預測擴展政策時應考量的事項。

**Topics**
+ [運作方式](#how-predictive-scaling-works)
+ [容量上限](#predictive-scaling-maximum-capacity-limit)
+ [考量事項](#predictive-scaling-considerations)
+ [支援的區域](#predictive-scaling-regions)

## 運作方式
<a name="how-predictive-scaling-works"></a>

若要使用預測擴展，請建立預測擴展政策，指定要監控和分析的 CloudWatch 指標。若要讓預測擴展開始預測未來值，此指標必須至少有 24 小時的資料。

建立政策後，預測性擴展會開始分析過去最多 14 天內的指標資料，以識別模式。它使用此分析來產生未來 48 小時容量需求的每小時預測。預測會使用最新的 CloudWatch 資料，每 6 小時更新一次。隨著新資料傳入，預測擴展能夠持續改善未來預測的準確性。

當您首次啟用預測性擴展時，它會以*僅預測*模式執行。在此模式中，它會產生容量預測，但不會根據這些預測實際擴展 Auto Scaling 群組。這可讓您評估預測的準確性和適用性。您可以使用 `GetPredictiveScalingForecast` API 操作或 檢視預測資料 AWS 管理主控台。

在您檢閱預測資料並決定根據該資料開始擴展之後，請將擴展政策切換至*預測和擴展*模式。在此模式中：
+ 如果預測預期負載增加，Amazon EC2 Auto Scaling 將透過向外擴展來增加容量。
+ 如果預測預期負載減少，則不會縮減以移除容量。如果您想要移除不再需要的容量，您必須建立動態擴展政策。

根據預設，Amazon EC2 Auto Scaling 會根據該小時的預測，在每個小時開始時擴展 Auto Scaling 群組。您可以選擇使用 `PutScalingPolicy` API 操作中的 `SchedulingBufferTime` 屬性或 中的**啟動前執行個體**設定來指定較早的開始時間 AWS 管理主控台。這會導致 Amazon EC2 Auto Scaling 在預測需求之前啟動新的執行個體，讓他們有時間開機並準備好處理流量。

為了支援在預測需求之前啟動新的執行個體，強烈建議您為 Auto Scaling 群組啟用*預設執行個體暖機*期。這會指定橫向擴展活動之後的時段，在此期間 Amazon EC2 Auto Scaling 不會縱向擴展，即使動態擴展政策指出應減少容量。這可協助您確保新啟動的執行個體有足夠的時間開始為增加的流量提供服務，然後再考慮縮減操作。如需詳細資訊，請參閱[設定 Auto Scaling 群組的預設執行個體暖機期](ec2-auto-scaling-default-instance-warmup.md)。

## 容量上限
<a name="predictive-scaling-maximum-capacity-limit"></a>

Auto Scaling 群組具有最大容量設定，可限制群組可啟動的 EC2 執行個體數量上限。根據預設，當設定擴展政策時，它們不能將容量增加到高於其最大容量。

或者，您可以允許在預測容量接近或超過 Auto Scaling 群組的最大容量時，自動增加群組的最大容量。若要啟用此行為，請使用 `PutScalingPolicy` API 操作中的 `MaxCapacityBreachBehavior`和 `MaxCapacityBuffer` 屬性，或 中的**最大容量行為**設定 AWS 管理主控台。

**警告**  
允許自動增加最大容量時請小心。如果未監控和管理增加的最大容量，這可能會導致啟動比預期更多的執行個體。增加的最大容量會成為 Auto Scaling 群組的新正常最大容量，直到您手動更新為止。最大容量不會自動減少回原始最大容量。

## 考量事項
<a name="predictive-scaling-considerations"></a>
+ 確認預測擴展是否適合您的工作負載。如果工作負載顯示特定於星期幾或一天中時間的週期性負載模式，則工作負載非常適合預測擴展。若要檢查此項目，請在*僅預測*模式下設定預測擴展政策，然後參考主控台中的建議。Amazon EC2 Auto Scaling 會根據潛在政策效能的觀察提供建議。在讓預測擴展主動擴展應用程式之前，請先評估預測和建議。
+ 預測擴展需要至少 24 小時的歷史資料才能開始預測。不過，如果歷史資料跨越整整兩週，那麼預測會更加有效。如果透過建立新的 Auto Scaling 群組並刪除舊群組來更新應用程式，則新的 Auto Scaling 群組需要 24 小時的歷史負載資料，之後預測擴展才能夠再次開始產生預測。您可以使用自訂指標來彙總所有新舊 Auto Scaling 群組中的指標。否則，您可能需要等待幾天才能獲得更準確的預測。
+ 選擇能準確代表應用程式完整負載，且是應用程式最重要擴展方面的負載指標。
+ 使用動態擴展搭配預測擴展可協助您密切遵循應用程式的需求曲線、在低流量期間縮減規模，以及在流量高於預期時擴展規模。當多個擴展政策處於作用中狀態時，每個政策會獨立決定所需的容量，並將所需容量設定為其中的最大值。例如，如果在目標追蹤擴展政策中需要 10 個執行個體維持在目標使用率，且在預測擴展政策中需要 8 個執行個體維持在目標使用率，則會將群組所需容量設定為 10。如果您是初次使用動態擴展，我們建議您使用目標追蹤擴展政策。如需詳細資訊，請參閱[Amazon EC2 Auto Scaling 動態擴展](as-scale-based-on-demand.md)。
+ 預測性擴展的一個核心假設是 Auto Scaling 群組是同質的，並且所有執行個體的容量都相等。如果您的群組不是這樣，則預測容量可能不準確。因此，為[混合執行個體群組](ec2-auto-scaling-mixed-instances-groups.md)建立預測擴展政策時請小心，因為可以佈建容量不相等的不同類型執行個體。以下是預測容量不準確的一些範例：
  + 您的預測擴展政策以 CPU 使用率為基礎，但每個 Auto Scaling 執行個體上的 vCPU 數量會因執行個體類型而異。
  + 您的預測擴展政策以網路輸入或網路輸出為基礎，但每個 Auto Scaling 執行個體的網路頻寬輸送量會因執行個體類型而異。例如，M5 與 M5n 執行個體類型相似，但 M5n 執行個體類型提供的網路輸送量明顯較高。

## 支援的區域
<a name="predictive-scaling-regions"></a>
+ 美國東部 (維吉尼亞北部)
+ 美國東部 (俄亥俄)
+ 美國西部 (加利佛尼亞北部)
+ 美國西部 (奧勒岡)
+ 非洲 (開普敦)
+ 亞太地區 (香港)
+ 亞太區域 (海德拉巴)
+ 亞太地區 (雅加達)
+ 亞太地區 (墨爾本)
+ 亞太地區 (孟買)
+ 亞太區域 (大阪)
+ 亞太區域 (首爾)
+ 亞太區域 (新加坡)
+ 亞太地區 (雪梨)
+ 亞太區域 (東京)
+ 加拿大 (中部)
+ 加拿大西部 (卡加利)
+ 中國 (北京)
+ 中國 (寧夏)
+ 歐洲 (法蘭克福)
+ 歐洲 (愛爾蘭)
+ 歐洲 (倫敦)
+ 歐洲 (米蘭)
+ Europe (Paris)
+ 歐洲 (西班牙)
+ 歐洲 (斯德哥爾摩)
+ 歐洲 (蘇黎世)
+ 以色列 (特拉維夫)
+ Middle East (Bahrain)
+ 中東 (阿拉伯聯合大公國)
+ 南美洲 (聖保羅)
+ AWS GovCloud （美國東部）
+ AWS GovCloud （美國西部）

# 建立 Auto Scaling 群組的預測擴展政策
<a name="predictive-scaling-create-policy"></a>

下列程序可協助您使用 AWS 管理主控台 或 建立預測擴展政策 AWS CLI。

如果是新的 Auto Scaling 群組，則必須提供至少 24 小時的資料，然後 Amazon EC2 Auto Scaling 才能產生預測。

**Topics**
+ [建立預測擴展政策 (主控台)](#predictive-scaling-policy-console)
+ [建立預測擴展政策 (AWS CLI)](#predictive-scaling-policy-aws-cli)

## 建立預測擴展政策 (主控台)
<a name="predictive-scaling-policy-console"></a>

如果這是您第一次建立預測擴展政策，我們建議您使用 主控台，在*僅預測*模式下建立多個預測擴展政策。這可讓您測試不同指標和目標值的潛在影響。您可以為每個 Auto Scaling 群組建立多個預測擴展政策，但只有其中一個政策可用於作用中擴展。

### 在主控台中建立預測擴展政策 (預先定義的指標)
<a name="create-a-predictive-scaling-policy-in-the-console"></a>

利用預先定義的指標 (CPU、網路 I/O 或每個目標的 Application Load Balancer 請求計數)，使用以下程序來建立預測擴展政策。建立預測擴展政策最簡單的方法是使用預先定義的指標。但如果您偏好使用自訂指標，請參閱 [在主控台中建立預測擴展政策 (自訂指標)](#create-a-predictive-scaling-policy-in-the-console-custom-metrics)。

**建立預測擴展政策**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 在 **Automatic scaling** (自動擴展) 索引標籤的 **Scaling policies** (擴展政策) 中，選擇 **Create predictive scaling policy** (建立預測擴展政策)。

1. 輸入政策的名稱。

1. 開啟 **Scale based on forecast** (依據預測擴展)，授予 Amazon EC2 Auto Scaling 許可立即開始擴展。

   若要將政策保留在 *Forecast only* (僅預測) 模式，保持 **Scale based on forecast** (依據預測擴展) 為關閉。

1. 針對 **Metrics** (指標)，從選項清單中選擇您的指標。選項包括 **CPU**、**Network In** (網路輸入)、**Network Out** (網路輸出)、**Application Load Balancer request count** (Application Load Balancer 請求計數)，以及 **Custom metric pair** (自訂指標對)。

   如果選擇了 **Application Load Balancer request count per target** (每個目標的 Application Load Balancer 請求計數)，則在 **Target group** (目標群組) 中選擇目標群組。只有將 Application Load Balancer 目標群組連接至 Auto Scaling 群組後，才支援 **Application Load Balancer request count per target** (每個目標的 Application Load Balancer 請求計數)。

   如果選擇了 **Custom metric pair** (自訂指標對)，則從 **Load metric** (負載指標) 和 **Scaling metric** (擴展指標) 下拉式清單中選擇個別指標。

1. 對於 **Target utilization** (目標使用率)，輸入 Amazon EC2 Auto Scaling 應維護的目標值。Amazon EC2 Auto Scaling 會擴增容量，直到平均使用率達到目標使用率，或直到達到所指定執行個體數目上限為止。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/predictive-scaling-create-policy.html)

1. (選用) 對於 **Pre-launch instances** (預先啟動執行個體)，選擇您希望預測呼叫增加負載之前啟動執行個體的間隔時間。

1. (選用) 對於 **Max capacity behavior** (最大容量行為)，在預測容量超過定義的最大容量時，選擇是否讓 Amazon EC2 Auto Scaling 擴展至高於群組的最大容量。開啟此設定讓您能在預測流量達到最高值時擴展容量。

1. (選用) 對於 **Buffer maximum capacity above the forecasted capacity** (緩衝區最大容量高於預測容量)，選擇預測容量接近或超過容量上限時要使用多少額外容量。指定數值是相對於預測容量的百分比。例如，如果緩衝區為 10，這表示 10% 的緩衝區。因此，如果預測容量為 50 而最大容量為 40，則有效最大容量是 55。

   如果設定為 0，Amazon EC2 Auto Scaling 可以將容量擴展至高於最大容量，以等於但不超過預測容量。

1. 選擇**建立預測擴展政策**。

### 在主控台中建立預測擴展政策 (自訂指標)
<a name="create-a-predictive-scaling-policy-in-the-console-custom-metrics"></a>

利用自訂指標，使用以下程序來建立預測擴展政策。自訂指標可以包含 CloudWatch 提供的其他指標或是您發佈至 CloudWatch 的指標。若要使用 CPU、網路 I/O 或每個目標的 Application Load Balancer 請求計數，請參閱 [在主控台中建立預測擴展政策 (預先定義的指標)](#create-a-predictive-scaling-policy-in-the-console)。

若要利用自訂指標建立預測擴展政策，您必須執行以下操作：
+ 您必須提供可讓 Amazon EC2 Auto Scaling 與 CloudWatch 中的指標互動的原始查詢。如需詳細資訊，請參閱[使用自訂指標的進階預測擴展政策](predictive-scaling-customized-metric-specification.md)。為確保 Amazon EC2 Auto Scaling 能夠從 CloudWatch 擷取指標資料，請確認每個查詢都有傳回資料點。確認的方法為使用 CloudWatch 主控台或 CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) API 操作。
**注意**  
我們在 Amazon EC2 Auto Scaling 主控台的 JSON 編輯器中提供範例 JSON 承載。這些範例提供金鑰值對的參考，這些值對是新增由 提供的其他 CloudWatch 指標 AWS 或您先前發佈至 CloudWatch 的指標所需的。您能以這些範例為起點，然後根據需要加以自訂。
+ 如果您使用任何指標數學，則必須手動建構 JSON 以符合您的獨特情境。如需詳細資訊，請參閱[使用指標數學表達式](using-math-expression-examples.md)。在於政策中使用指標數學之前，應先確認以指標數學表達式為基礎的指標查詢是否有效，且會傳回單一的時間序列。確認的方法為使用 CloudWatch 主控台或 CloudWatch [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) API 操作。

如果因為提供錯誤的資料 (例如錯誤的 Auto Scaling 群組名稱) 而在查詢中發生錯誤，則預測將不會有任何資料。如需自訂指標問題的疑難排解，請參閱 [預測擴展政策中自訂指標的考量事項](custom-metrics-troubleshooting.md)。

**建立預測擴展政策**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 在 **Automatic scaling** (自動擴展) 索引標籤的 **Scaling policies** (擴展政策) 中，選擇 **Create predictive scaling policy** (建立預測擴展政策)。

1. 輸入政策的名稱。

1. 開啟 **Scale based on forecast** (依據預測擴展)，授予 Amazon EC2 Auto Scaling 許可立即開始擴展。

   若要將政策保留在 *Forecast only* (僅預測) 模式，保持 **Scale based on forecast** (依據預測擴展) 為關閉。

1. 針對 **Metrics** (指標)，選擇 **Custom metric pair** (自訂指標對)。

   1. 針對 **Load metric** (負載指標)，選擇**Custom CloudWatch metric** (自訂 CloudWatch 指標) 以使用自訂指標。建構含有政策負載指標定義的 JSON 承載，並將其貼到 JSON 編輯器框中，替換框中已有的內容。

   1. 針對 **Scaling metric** (擴展指標)，選擇**Custom CloudWatch metric** (自訂 CloudWatch 指標) 以使用自訂指標。建構含有政策擴展指標定義的 JSON 承載，並將其貼到 JSON 編輯器框中，替換框中已有的內容。

   1. (選用) 若要新增自訂容量指標，請選取 **Add custom capacity metric** (新增自訂容量指標) 的核取方塊。建構含有政策容量指標定義的 JSON 承載，並將其貼到 JSON 編輯器框中，替換框中已有的內容。

      如果容量指標資料橫跨多個 Auto Scaling 群組，您只需啟用此選項即可為容量建立新的時間序列。在此情況下，您必須使用指標數學將資料彙總為單一時間序列。

1. 對於 **Target utilization** (目標使用率)，輸入 Amazon EC2 Auto Scaling 應維護的目標值。Amazon EC2 Auto Scaling 會擴增容量，直到平均使用率達到目標使用率，或直到達到所指定執行個體數目上限為止。

1. (選用) 對於 **Pre-launch instances** (預先啟動執行個體)，選擇您希望預測呼叫增加負載之前啟動執行個體的間隔時間。

1. (選用) 對於 **Max capacity behavior** (最大容量行為)，在預測容量超過定義的最大容量時，選擇是否讓 Amazon EC2 Auto Scaling 擴展至高於群組的最大容量。開啟此設定讓您能在預測流量達到最高值時擴展容量。

1. (選用) 對於 **Buffer maximum capacity above the forecasted capacity** (緩衝區最大容量高於預測容量)，選擇預測容量接近或超過容量上限時要使用多少額外容量。指定數值是相對於預測容量的百分比。例如，如果緩衝區為 10，這表示 10% 的緩衝區。因此，如果預測容量為 50 而最大容量為 40，則有效最大容量是 55。

   如果設定為 0，Amazon EC2 Auto Scaling 可以將容量擴展至高於最大容量，以等於但不超過預測容量。

1. 選擇**建立預測擴展政策**。

## 建立預測擴展政策 (AWS CLI)
<a name="predictive-scaling-policy-aws-cli"></a>

使用 AWS CLI 設定 Auto Scaling 群組的預測擴展政策，如下所示。將每個*使用者輸入預留位置*替換為自己的資訊。

如需有關可指定之 CloudWatch 指標的詳細資訊，請參閱 *Amazon EC2 Auto Scaling API Reference* 中的 [PredictiveScalingMetricSpecification](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PredictiveScalingMetricSpecification.html)。

### 範例 1：建立預測但不擴展的預測擴展政策
<a name="predictive-scaling-configuration-ex1"></a>

下列範例政策顯示完整的政策組態，該組態會使用 CPU 使用率指標進行預測擴展 (目標使用率為 `40`)。除非您明確指定要使用的模式，否則依據預設會使用 `ForecastOnly` 模式。將此組態儲存至名為 `config.json` 的檔案。

```
{
    "MetricSpecifications": [
        {
            "TargetValue": 40,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ASGCPUUtilization"
            }
        }
    ]
}
```

若要從命令列建立政策，請執行 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令搭配指定的組態檔案，如以下範例所示。

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

如果成功，此命令會傳回政策的 Amazon Resource Name (ARN)。

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

### 範例 2：預測並擴展的預測擴展政策
<a name="predictive-scaling-configuration-ex2"></a>

對於允許 Amazon EC2 Auto Scaling 預測和擴展的政策，新增值為 `ForecastAndScale` 的屬性 `Mode` 。下列範例顯示使用 Application Load Balancer 請求計數指標的政策組態。目標使用率為 `1000`，且預測擴展會設定為 `ForecastAndScale` 模式。

```
{
    "MetricSpecifications": [
        {
            "TargetValue": 1000,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ALBRequestCount",
                "ResourceLabel": "app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff"
            }
        }
    ],
    "Mode": "ForecastAndScale"
}
```

若要建立此政策，請執行 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令與指定的組態檔案，如下列範例展示的方式所示。

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

如果成功，此命令會傳回政策的 Amazon Resource Name (ARN)。

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:19556d63-7914-4997-8c81-d27ca5241386:autoScalingGroupName/my-asg:policyName/alb1000-predictive-scaling-policy",
  "Alarms": []
}
```

### 範例 3：可擴展為高於容量上限的預測擴展政策
<a name="predictive-scaling-configuration-ex3"></a>

下列範例顯示當您需要處理高於正常負載時，如何建立可以擴展為高於群組大小上限的政策。根據預設，Amazon EC2 Auto Scaling 不會將 EC2 容量擴展到高於您定義的最大容量。然而，以稍微多一些容量讓它擴展得稍高一些，有助於避免效能或可用性問題。

若要為 Amazon EC2 Auto Scaling 提供空間，以便在將容量預測為或非常接近群組的大小上限時佈建額外容量，請指定 `MaxCapacityBreachBehavior` 和 `MaxCapacityBuffer` 屬性，如下列範例所示。您必須指定數值為 `IncreaseMaxCapacity` 的 `MaxCapacityBreachBehavior`。群組可擁有的執行個體的最大數量取決於 `MaxCapacityBuffer` 的數值。

```
{
    "MetricSpecifications": [
        {
            "TargetValue": 70,
            "PredefinedMetricPairSpecification": {
                "PredefinedMetricType": "ASGCPUUtilization"
            }
        }
    ],
    "MaxCapacityBreachBehavior": "IncreaseMaxCapacity",
    "MaxCapacityBuffer": 10
}
```

在此範例中，政策設定為使用 10% 的緩衝區 (`"MaxCapacityBuffer": 10`)，因此如果預測容量為 50 而最大容量為 40，則有效的最大容量是 55。如果政策可將容量擴展至高於容量上限，以便等於但不超過預測容量，則緩衝區為 0 (`"MaxCapacityBuffer": 0`)。

若要建立此政策，請執行 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令與指定的組態檔案，如下列範例展示的方式所示。

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

如果成功，此命令會傳回政策的 Amazon Resource Name (ARN)。

```
{
  "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:d02ef525-8651-4314-bf14-888331ebd04f:autoScalingGroupName/my-asg:policyName/cpu70-predictive-scaling-policy",
  "Alarms": []
}
```

# 評估您的預測擴展政策
<a name="predictive-scaling-graphs"></a>

使用預測擴展政策來擴展 Auto Scaling 群組之前，請在 Amazon EC2 Auto Scaling 主控台中檢閱建議和政策的其他資料。這很重要，因為您不希望預測擴展政策在您知道其預測準確之前擴展實際容量。

如果 Auto Scaling 群組是新群組，Amazon EC2 Auto Scaling 需要 24 小時才能建立第一個預測。

Amazon EC2 Auto Scaling 建立預測時，會使用歷史資料。如果您的 Auto Scaling 群組還沒有太多的最新歷史資料，Amazon EC2 Auto Scaling 可能會使用從目前可用的歷史彙總建立的彙總來暫時回填預測。預測會在政策建立日期前的兩週內回填。

**Topics**
+ [檢視您的建議](#view-predictive-scaling-recommendations)
+ [檢閱監控圖表](#review-predictive-scaling-monitoring-graphs)
+ [使用 CloudWatch 監控指標](monitor-predictive-scaling-cloudwatch.md)

## 檢視您的預測擴展建議
<a name="view-predictive-scaling-recommendations"></a>

為了獲得有效的分析，Amazon EC2 Auto Scaling 應具有至少兩個可進行比較的預測擴展政策。(不過，您仍然可以檢閱單一政策的問題清單。) 建立多個政策時，您可以根據使用不同指標的政策，評估使用一個指標的政策。您也可以評估不同目標值和指標組合的影響。建立預測擴展政策之後，Amazon EC2 Auto Scaling 會立即開始評估哪些政策可以更好地擴展您的群組。

**在 Amazon EC2 Auto Scaling 主控台中檢視建議**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 在 **Auto Scaling** 索引標籤的**預測擴展政策**下，您可以檢視政策的相關詳細資訊以及我們的建議。該建議會告訴您使用預測擴展政策的結果是否優於不使用它。

   如果您不確定預測擴展政策是否適合您的群組，請檢閱**可用性影響**和**成本影響**欄，以選擇正確的政策。每一欄的資訊都會說明政策的影響。
   + **可用性影響**：說明政策是否會佈建足夠的執行個體來處理工作負載，以避免對可用性造成負面影響 (相較於不使用該政策)。
   + **成本影響**：說明政策是否不會過度佈建執行個體，以避免對成本造成負面影響 (相較於不使用該政策)。如果過度佈建比較嚴重，執行個體就會出現使用率過低或閒置情況，這只會增加成本影響。

   如果您有多個政策，則以較低成本提供最多可用性優勢的政策名稱旁會顯示**最佳預測**標籤。可用性影響會獲得更多加權。

1. (選用) 若要選取建議結果所需的期間，請從**評估期間**下拉式清單中選擇您偏好的值：**2 天**、**1 週**、**2 週**、**4 週**、**6 週**或 **8 週**。根據預設，評估期間是最近兩週。較長的評估期間會為建議結果提供更多資料點。不過，如果負載模式發生變更 (例如在一段異常需求期間後)，新增更多資料點可能無法改善結果。在這種情況下，您可以查看最新資料以獲得更有針對性的建議。

**注意**  
只會針對處於**僅預測**模式的政策產生建議。當政策在整個評估期間都處於**僅預測**模式時，建議功能的效果會更好。如果您在**預測和擴展**模式中啟動政策，並於稍後將其切換至**僅預測**模式，則該政策的問題清單可能會有偏差。這是因為該政策已經為實際容量做出了貢獻。

## 檢閱預測擴展監控圖表
<a name="review-predictive-scaling-monitoring-graphs"></a>

在 Amazon EC2 Auto Scaling 主控台中，您可以檢閱前幾天、前幾週或前幾個月的預測，以視覺化方式呈現政策在一段時間內的表現。在決定是否允許政策擴展實際容量時，您也可以使用此資訊來評估預測的準確性。

**在 Amazon EC2 Auto Scaling 主控台中檢閱預測擴展監控圖表**

1. 從**預測擴展政策**清單中選擇政策。

1. 在**監控**區段中，您可以根據實際值檢視政策在過去和未來的負載和容量預測。**負載**圖表會顯示所選負載指標的負載預測與實際值。**容量**圖表會顯示政策預測的執行個體數量。它還包括實際啟動的執行個體數量。垂直線會將歷史值與未來預測隔開。建立政策後，這些圖表很快就可以使用。

1. (選用) 若要變更圖表中顯示的歷史資料量，請從頁面頂端的**評估期間**下拉式清單中選擇您偏好的值。評估期間不會以任何方式轉換此頁面上的資料。它只會變更顯示的歷史資料量。

下圖顯示已多次套用預測時的**負載**和**容量**圖表。預測擴展會根據您的歷史負載資料預測負載。應用程式產生的負載會以 Auto Scaling 群組中每個執行個體的 CPU 使用率、網路輸入/輸出、收到的請求或自訂指標的總和表示。預測擴展會根據您希望為擴展指標達成的負載預測和目標使用率來計算未來容量需求。

![\[預測擴展圖表\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/predictive-scaling-graphs.png)


**比較**負載**圖表中的資料**  
每條水平線代表每間隔一小時報告的一組不同資料點：

1. **實際觀察到的負載**會使用所選負載指標的 SUM 統計資料來顯示過去的每小時總負載。

1. **政策預測的負載**會顯示每小時的負載預測。此預測是基於前兩週的實際負載觀察結果。

**比較**容量**圖表中的資料**  
每條水平線代表每間隔一小時報告的一組不同資料點：

1. **實際觀察到的容量**會顯示啟用 [GroupTotalInstances](ec2-auto-scaling-metrics.md#as-group-metrics) 指標時 Auto Scaling 群組的過去實際容量。此容量取決於您的其他擴展政策和所選期間內的群組大小下限。

1. **政策預測的容量**會顯示政策處於**預測和擴展**模式時，可預期在每小時開始時獲得的基準容量。

1. **推斷的所需容量**會顯示將擴展指標維持在所選目標值的理想容量。

1. **最小容量**會顯示 Auto Scaling 群組的最小容量。

1. **最大容量**會顯示 Auto Scaling 群組的最大容量。

為了計算推斷的所需容量，我們首先假設以指定的目標值平均使用每個執行個體。實際上，並不會平均使用執行個體。但是，假設使用率均勻地分散在執行個體之間，我們就可以對所需容量進行可能的估算。然後，容量需求的計算結果會與您用於預測擴展政策的擴展指標成反比。換句話說，隨著容量增加，擴展指標會以相同的速率減少。例如，如果容量加倍，擴展指標必定會減半。

推斷的所需容量公式：

 `sum of (actualCapacityUnits*scalingMetricValue)/(targetUtilization)`

例如，我們使用特定一小時的 `actualCapacityUnits` (`10`) 和 `scalingMetricValue` (`30`)。然後，我們會使用您在預測擴展政策中指定的 `targetUtilization` (`60`)，並計算同一小時內推斷的所需容量。這會傳回值 `5`。這表示 5 是維持容量與擴展指標目標值正好成反比所需的推斷容量。

**注意**  
您可以使用各種控制桿來調整和改善應用程式的成本節省效益和可用性。  
您可以針對基準容量使用預測擴展，並使用動態擴展來處理額外的容量。動態擴展會與預測擴展分開運作，可根據目前的使用率進行縮減和擴增。首先，Amazon EC2 Auto Scaling 會針對每個動態擴展政策計算建議的執行個體數量。然後，它會根據提供最多執行個體數量的政策進行擴展。
為了允許在負載減少時進行縮減，Auto Scaling 群組應隨時至少具有一個動態擴展政策，並啟用縮減部分。
您可以確保您的最小和最大容量沒有太大限制，以提高擴展效能。如果政策的建議執行個體數量不在最小和最大容量範圍內，將無法進行縮減和擴增。

# 使用 CloudWatch 監控預測擴展指標
<a name="monitor-predictive-scaling-cloudwatch"></a>

根據需求，您可能偏好從 Amazon CloudWatch 而非 Amazon EC2 Auto Scaling 主控台中存取預測擴展的監控資料。建立預測擴展政策之後，政策會收集用於預測未來負載和容量的資料。收集這些資料後，資料會以固定間隔定期自動儲存在 CloudWatch 中。然後，您可以使用 CloudWatch 以視覺化方式呈現政策在一段時間內的表現。您也可以建立 CloudWatch 警示，以便在效能指標變更超出您在 CloudWatch 中定義的限制時通知您。

**Topics**
+ [視覺化歷史預測資料](#visualize-historical-forecast-data)
+ [使用指標數學建立準確度指標](#create-accuracy-metrics)

## 視覺化歷史預測資料
<a name="visualize-historical-forecast-data"></a>

您可以在 CloudWatch 中檢視預測擴展政策的負載和容量預測資料。在單一圖表中根據其他 CloudWatch 指標視覺化預測時，此功能非常有用。它還可以幫助您檢視更廣泛的時間範圍，以便可以看到隨時間變化的趨勢。您可以存取長達 15 個月的歷史指標，以更加了解政策的執行狀況。

如需詳細資訊，請參閱[預測擴展指標與維度](ec2-auto-scaling-metrics.md#predictive-scaling-metrics)。

**使用 CloudWatch 主控台檢視歷史預測資料**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇 **Metrics** (指標)，然後選擇 **All metrics** (所有指標)。

1. 選擇 **Auto Scaling** (自動擴展) 指標命名空間。

1. 選擇下列其中一個選項，以檢視負載預測或容量預測指標：
   + **預測性擴展載入預測**
   + **預測性擴展容量預測**

1. 在搜尋欄位中，輸入預測擴展政策的名稱或者 Auto Scaling 群組的名稱，然後按 Enter 篩選結果。

1. 若要將指標圖形化，請勾選指標旁的核取方塊。若要變更圖形的名稱，請選擇鉛筆圖示。若要變更時間範圍，請選取一個預先定義的值，或選擇 **custom (自訂)**。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》中的[建立指標圖表](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph_a_metric.html)。

1. 若要變更統計數字，請選擇 **Graphed metrics** (圖表化指標) 索引標籤。選擇欄位標題或個別的值，然後選擇不同的統計資料。雖然您可以為每個指標選擇任何統計資料，但並非所有統計資料都適用於 **PredictiveScalingLoadForecast** 和 **PredictiveScalingCapacityForecast** 指標。例如，**Average** (平均值)、**Minimum** (最小值) 和 **Maximum** (最大值) 統計資料有用，但是 **Sum** (總和) 統計資料無用。

1. 若要將其他指標新增到圖表，請在 **Browse** (瀏覽) 下，選擇 **All** (所有)，找到特定指標，然後選取旁邊的核取方塊。您最多可新增 10 個指標。

   例如，若要將 CPU 使用率的實際值新增至圖表，請選擇 **EC2** 命名空間，然後選擇 **By Auto Scaling Group** (依據 Auto Scaling 群組)。然後，選取 **CPUUtilization** (CPU 使用率) 指標的核取方塊和特定 Auto Scaling 群組。

1. (選用) 若要將圖表新增至 CloudWatch 儀表板，請選擇 **Actions** (動作)、**Add to dashboard** (新增至儀表板)。

## 使用指標數學建立準確度指標
<a name="create-accuracy-metrics"></a>

利用指標數學，可查詢多個 CloudWatch 指標，並使用數學表達式根據這些指標來建立新的時間序列。您可以在 CloudWatch 主控台視覺化產生的時間序列，並將其新增至儀表板。如需有關指標數學的詳細資訊，請參閱《Amazon CloudWatch 使用者指南》中的[使用指標數學](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html)。

使用指標數學，您可以使用不同的方式繪製 Amazon EC2 Auto Scaling 為預測擴展而產生的資料圖表。這可協助您監控一段時間內的政策績效，並協助您瞭解是否可以改善指標組合。

例如，您可以使用指標數學表達式來監控[平均絕對誤差百分比](https://en.wikipedia.org/wiki/Mean_absolute_percentage_error) (MAPE)。MAPE 指標有助於監控預測值與指定預測期間觀察到的實際值之間的差異。MAPE 值的變化可指示政策的績效是否隨著應用程式性質的變化在一段時間內而降低。MAPE 的增加表示預測值與實際值之間的差距更大。

**範例：指標數學表達式**

如果要開始使用此類圖表，您可以建立類似於以下範例中所示的指標數學表達式。

```
{
  "MetricDataQueries": [
    {
      "Expression": "TIME_SERIES(AVG(ABS(m1-m2)/m1))",
      "Id": "e1",
      "Period": 3600,
      "Label": "MeanAbsolutePercentageError",
      "ReturnData": true
    },
    {
      "Id": "m1",
      "Label": "ActualLoadValues",
      "MetricStat": {
        "Metric": {
          "Namespace": "AWS/EC2",
          "MetricName": "CPUUtilization",
          "Dimensions": [
            {
              "Name": "AutoScalingGroupName",
              "Value": "my-asg"
            }
          ]
        },
        "Period": 3600,
        "Stat": "Sum"
      },
      "ReturnData": false
    },
    {
      "Id": "m2",
      "Label": "ForecastedLoadValues",
      "MetricStat": {
        "Metric": {
          "Namespace": "AWS/AutoScaling",
          "MetricName": "PredictiveScalingLoadForecast",
          "Dimensions": [
            {
              "Name": "AutoScalingGroupName",
              "Value": "my-asg"
            },
            {
              "Name": "PolicyName",
              "Value": "my-predictive-scaling-policy"
            },
            {
              "Name": "PairIndex",
              "Value": "0"
            }
          ]
        },
        "Period": 3600,
        "Stat": "Average"
      },
      "ReturnData": false
    }
  ]
}
```

`MetricDataQueries` 有一個指標資料查詢結構陣列,而不是單一的指標。`MetricDataQueries` 中的每個項目都會取得指標或執行數學表達式。第一項，`e1`，是數學表達式。指定的表達式將 `ReturnData` 參數設定為 `true`，最終產生單一時間序列。對於所有其他指標，`ReturnData` 值為 `false`。

在此範例中，指定的表達式會使用實際值和預測值作為輸入值，並傳回新指標 (MAPE)。`m1` 是包含實際負載值的 CloudWatch 指標 (假設 CPU 使用率是針對名為 `my-predictive-scaling-policy` 的政策最初指定的負載指標)。`m2` 是包含預測負載值的 CloudWatch 指標。MAPE 指標的數學語法如下：

*Average of (abs ((Actual - Forecast)/(Actual)))*

### 視覺化您的準確度指標並設定警示
<a name="visualize-accuracy-metrics-set-alarms"></a>

若要視覺化準確度指標資料，請選取 CloudWatch 主控台中的 **Metrics** (指標) 索引標籤。您可以從那裡繪製資料圖表。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》中的[將數學表達式新增到 CloudWatch 圖表](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#adding-metrics-expression-console)。

您也可以在 **Metrics** (指標) 區段中，對您監控的指標設定警示。在 **Graphed metrics** (圖表化指標) 索引標籤上，選取 **Actions** (動作) 資料欄下的 **Create alarm** (建立警示) 圖示。**Create alarm** (建立警示) 圖示表示為一個小鐘。如需詳細資訊與通知選項，請參閱 *Amazon CloudWatch User Guide* 中的 [Creating a CloudWatch alarm based on a metric math expression](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create-alarm-on-metric-math-expression.html) 與 [Notifying users on alarm changes](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Notify_Users_Alarm_Changes.html)。

或者，您可以使用 [GetMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html) 和 [PutMetricAlarm](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricAlarm.html) 利用指標數學來執行計算，並根據輸出建立警示。

# 使用排程動作覆寫預測值
<a name="predictive-scaling-overriding-forecast-capacity"></a>

有時候，您可能會有未來應用程式需求的其他資訊，但預測計算無法考量該資訊。例如，預測計算可能會低估即將到來的行銷活動所需的容量。您可以使用排程動作，在未來時段暫時覆寫預測。排程動作可以週期性執行，或在一次性需求波動的特定日期與時間執行。

例如，您可以建立最小容量高於預測容量的排程動作。在執行時間，Amazon EC2 Auto Scaling 會更新 Auto Scaling 群組的最小容量。由於預測擴展會針對容量進行最佳化，因此會接受容量下限高於預測值的排程動作。這樣可以防止容量低於預期。若要停止複寫預測，請使用第二個排程動作，讓最小容量恢復至其原始設定。

下列程序概述在未來時段覆寫預測的步驟。

**Topics**
+ [步驟 1：(選用) 分析時間序列資料](#analyzing-time-series-data)
+ [步驟 2：建立兩個排程動作](#scheduling-capacity)

**重要**  
本主題假設您正嘗試覆寫預測，以擴展至高於預測值的容量。如果您需要暫時減少容量，而不會受到預測擴展政策的干擾，請改用*僅限預測*模式。在僅限預測模式下，預測擴展將繼續產生預測，但不會自動增加容量。然後，您可以監控資源使用率，並視需要手動減少群組的大小。如需手動擴展的詳細資訊，請參閱[Amazon EC2 Auto Scaling 手動擴展](ec2-auto-scaling-scaling-manually.md)。

## 步驟 1：(選用) 分析時間序列資料
<a name="analyzing-time-series-data"></a>

從分析預測時間序列資料開始。這是選用步驟，但是如果您想要了解預測的詳細資訊，這會很有幫助。

1. **擷取預測**

   建立預測之後，您可以查詢預測中的特定時段。查詢的目標是取得特定時段的時間序列資料的完整檢視。

   查詢最多可包含未來兩天的預測資料。如果已經使用預測擴展一段時間，您也可以存取過去的預測資料。不過，開始和結束時間之間的最大持續時間是 30 天。

   若要使用 [get-predictive-scaling-forecast](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/get-predictive-scaling-forecast.html) AWS CLI 命令取得預測，請在 命令中提供下列參數：
   + 在 `--auto-scaling-group-name` 參數中輸入 Auto Scaling 群組名稱。
   + 在 `--policy-name` 參數中輸入政策名稱。
   + 在 `--start-time` 參數中輸入開始時間，以便僅將指定時間之時或之後的預測資料傳回。
   + 在 `--end-time` 參數中輸入結束時間，以便僅將指定時間之前的預測資料傳回。

   ```
   aws autoscaling get-predictive-scaling-forecast --auto-scaling-group-name my-asg \
       --policy-name cpu40-predictive-scaling-policy \
       --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 (40% 的 CPU 平均使用率)。

1. **確定目標時段**

   確定應發生一次性需求波動時的一個小時或數個小時。請記住，預測中顯示的日期和時間為 UTC 格式。

## 步驟 2：建立兩個排程動作
<a name="scheduling-capacity"></a>

接下來，在應用程式具有高於預測的負載時，為特定時段建立兩個排程動作。舉例來說，如果行銷活動會在特定時段為網站帶來流量，您可以排程一次性動作，在它開始時更新最小容量。然後，排程另一個動作，以便在事件結束時將最小容量恢復至原始設定。

**為一次性事件建立兩個排程動作 (主控台)**

1. 前往網址 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台，然後從導覽窗格中選擇 **Auto Scaling 群組**。

1. 選取 Auto Scaling 群組旁的核取方塊。

   頁面底部會開啟一個分割窗格。

1. 在 **Automatic scaling** (自動擴展) 索引標籤的 **Scheduled actions** (排程動作) 中，選擇 **Create scheduled action** (建立排程動作)。

1. 請填寫以下排定動作設定：

   1. 輸入排程動作的 **Name** (名稱)。

   1. 對於 **Min** (最小值)，輸入 Auto Scaling 群組的新最小容量。**Min** (最小值) 必須小於或等於該群組的大小上限。如果 **Min** (最小值) 的數值大於群組的大小上限，則必須更新 **Max** (最大值)。

   1. 針對 **Recurrence** (重複)，選擇 **Once** (一次)。

   1. 對於 **Time zone** (時區)，選擇時區。如果沒有選擇時區，預設會使用 `ETC/UTC`。

   1. 定義 **Specific start time** (特定開始時間)。

1. 選擇**建立**。

   主控台會顯示 Auto Scaling 群組的排程動作。

1. 設定第二個排程動作，以便在事件結束時將最小容量恢復至原始設定。預測擴展只有在您為 **Min** (最小值) 設定的數值低於預測值時才能擴展容量。

**為一次性事件建立兩個排程動作 (AWS CLI)**  
若要使用 AWS CLI 建立排程動作，請使用 [put-scheduled-update-group-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scheduled-update-group-action.html) 命令。

例如，我們定義一個排程，在 5 月 19 日下午 5 點維持三個執行個體的最小容量，持續 8 小時。下列命令顯示如何實作此案例。

第一個 [put-scheduled-update-group-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scheduled-update-group-action.html) 命令會指示 Amazon EC2 Auto Scaling 在 2021 年 5 月 19 日下午 5 點 (UTC) 更新 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
```

第二個命令指示 Amazon EC2 Auto Scaling 在 2021 年 5 月 20 日上午 1 點 (UTC)，將群組的最小容量設定為 1。

```
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 個執行個體。在此時間和接下來的八個小時內，如果預測容量高於實際容量，或者如果動態擴展政策生效，則 Amazon EC2 Auto Scaling 可以繼續擴增。
+ 在 2021 年 5 月 20 日上午 1 點 (UTC)，第二個排程動作會執行。這會在事件結束時將最小容量恢復至原始設定。

### 根據週期性排程擴展
<a name="scheduling-recurring-actions"></a>

若要每週覆寫相同時段的預測，請建立兩個排程動作，並使用 Cron 表達式提供時間與日期邏輯。

Cron 表達式格式由 5 個以空格分隔的欄位組成：[分鐘] [小時] [一個月的第幾日] [一年的第幾個月] [一週的第幾日]。欄位可以包含任何允許的數值，包括特殊字元。

例如，以下 Cron 表達式會在每周二上午 6:30 執行動作。使用星號作為萬用字元，以比對欄位的所有數值。

```
30 6 * * 2
```

### 另請參閱
<a name="scheduling-scaling-see-also"></a>

如需如何建立、列出、編輯及刪除排程動作的詳細資訊，請參閱 [Amazon EC2 Auto Scaling 排程擴展](ec2-auto-scaling-scheduled-scaling.md)。

# 使用自訂指標的進階預測擴展政策
<a name="predictive-scaling-customized-metric-specification"></a>

在預測擴展政策中，您可以使用預先定義或自訂的指標。當預先定義指標 (CPU、網路輸入/輸出和 Application Load Balancer 請求計數) 未充分描述您的應用程式負載時，自訂指標會非常實用。

使用自訂指標建立預測擴展政策時，您可以指定 提供的其他 CloudWatch 指標 AWS，也可以指定您自己定義和發佈的指標。您也可以使用指標數學來彙總現有指標，並將其轉換為 AWS 不會自動追蹤的新時間序列。當您合併資料中的值時 (例如，透過計算新的總和或平均值)，它稱為*執行彙總*。產生的資料稱為*彙總*。

下一節包含如何建構政策的 JSON 結構的最佳實務和範例。

**Topics**
+ [最佳實務](#custom-metrics-best-practices)
+ [先決條件](#custom-metrics-prerequisites)
+ [建構自訂指標的 JSON](construct-json-custom-metrics.md)
+ [預測擴展政策中自訂指標的考量事項](custom-metrics-troubleshooting.md)
+ [限制](#custom-metrics-limitations)

## 最佳實務
<a name="custom-metrics-best-practices"></a>

以下最佳實務可協助您更有效地使用自訂指標：
+ 對於負載規範，最實用的指標是以 Auto Scaling 群組作為整體 (而不考慮該群組的容量) 來表示負載的指標。
+ 對於擴展指標規範，要擴展的最實用指標是每個執行個體指標的平均輸送量或使用率。
+ 擴展指標必須與容量成反比。也就是說，如果 Auto Scaling 群組中的執行個體數量增加，則擴展指標應減少大致相同的比例。為確保預測擴展按預期進行，負載指標和擴展指標還必須彼此密切關聯。
+ 目標使用率必須與擴展指標的類型相符。對於使用 CPU 使用率的政策組態，這是一個目標百分比。對於使用輸送量 (如請求或訊息數量) 的政策組態，這是在任何一分鐘間隔內每個執行個體的請求或訊息的目標數量。
+ 如果不遵循這些建議，則時間序列的預測未來值可能不正確。要驗證資料是否正確，您可以在 Amazon EC2 Auto Scaling 主控台中檢視預測值。或者，在建立預測擴展政策後，檢查 [GetPredictiveScalingForecast](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_GetPredictiveScalingForecast.html) API 呼叫傳回的 `LoadForecast` 和 `CapacityForecast` 物件。
+ 強烈建議您在 forecast only (僅預測) 模式中設定預測擴展，以便在預測擴展主動擴展容量之前評估預測。

## 先決條件
<a name="custom-metrics-prerequisites"></a>

若要在預測擴展政策中新增自訂指標，您必須擁有 `cloudwatch:GetMetricData` 許可。

若要指定自己的指標，而不是 AWS 提供的指標，您必須先將指標發佈至 CloudWatch。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[發佈自訂指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)。

如果您發佈自己的指標，應確保以至少五分鐘的頻率發佈資料點。Amazon EC2 Auto Scaling 根據需要的時段長度從 CloudWatch 擷取資料點。例如，負載指標規範使用每小時指標來衡量應用程式的負載。CloudWatch 使用您發佈的指標資料，透過將時間戳記落於同一小時週期內的所有資料點彙總，為任何一小時週期提供單一資料值。

# 建構自訂指標的 JSON
<a name="construct-json-custom-metrics"></a>

下一節包含如何設定預測擴展以查詢來自 CloudWatch 的資料的範例。設定此選項有兩種不同的方法，而您選擇的方法會影響您用來建構預測擴展政策的 JSON 的格式。使用指標數學時，JSON 的格式會根據所執行的指標數學而進一步變化。

1. 若要建立直接從 AWS 您發佈至 CloudWatch 的其他 CloudWatch 指標取得資料的政策，請參閱 [具有自訂負載和擴展指標的預測擴展政策範例 (AWS CLI)](#custom-metrics-ex1)。

1. 若要建立能查詢多個 CloudWatch 指標並使用數學表達式根據這些指標來建立新的時間序列的政策，請參閱 [使用指標數學表達式](using-math-expression-examples.md)。

## 具有自訂負載和擴展指標的預測擴展政策範例 (AWS CLI)
<a name="custom-metrics-ex1"></a>

若要使用 建立具有自訂載入和擴展指標的預測擴展政策 AWS CLI，請將 的引數存放在名為 `--predictive-scaling-configuration`的 JSON 檔案中`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 指標的確切指標名稱、命名空間和維度 （如適用） AWS CLI，請參閱 [清單指標](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/list-metrics.html)。

若要建立此政策，執行使用 JSON 檔案作為輸入 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/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 Resource Name (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)
+ [使用指標數學組合指標的預測擴展政策範例 (AWS CLI)](#custom-metrics-ex2)
+ [藍/綠部署情境中使用的預測擴展政策範例 (AWS CLI)](#custom-metrics-ex3)

## 了解指標數學
<a name="custom-metrics-metric-math"></a>

如果您只想彙總現有指標資料，則 CloudWatch 指標數學可以節省將另一個指標發佈至 CloudWatch 的工作量和成本。您可以使用 AWS 提供的任何指標，也可以使用您在應用程式中定義的指標。例如，您可能會想要計算每個執行個體的 Amazon SQS 佇列待處理項目。您可以透過從佇列中取得可檢索的大致訊息數量，然後將該數字除以 Auto Scaling 群組的執行中容量來得出此結果。

如需詳細資訊，請參閱《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 驗證指標數學表達式是否有效。

## 使用指標數學組合指標的預測擴展政策範例 (AWS CLI)
<a name="custom-metrics-ex2"></a>

有時，您可能需要首先以某種方式處理其資料，而不是直接指定指標。例如，您可能有一個從 Amazon SQS 佇列中提取工作的應用程式，並且您可能想要使用佇列中的項目數量作為預測擴展的條件。佇列中的訊息數量並不僅僅定義所需的執行個體數量。因此，需要更多的工作來建立可用於計算每個執行個體待處理項目的指標。如需詳細資訊，請參閱[以 Amazon SQS 為基礎的擴展政策](as-using-sqs-queue.md)。

以下是此案例的預測擴展政策範例。它指定了基於 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>

如果使用自訂指標時出現問題，建議您執行以下操作：
+ 如果提供了錯誤訊息，則請閱讀該訊息，並在可行的狀況下解決其報告的問題。
+ 如果嘗試在藍色/綠色部署案例中使用搜尋表達式時出現問題，則請首先確保您了解如何建立查找部分相符而不是完全相符的搜尋表達式。此外，請檢查查詢是否僅尋找執行特定應用程式的 Auto Scaling 群組。如需搜尋表達式語法的詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的 [CloudWatch 搜尋表達式語法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/search-expression-syntax.html)。
+ 如果未事先驗證表達式，則 [put-scaling-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-scaling-policy.html) 命令會在建立擴展政策時對其進行驗證。但是，此命令可能無法識別偵測到之錯誤的確切原因。若要修正這些問題，請對您收到之 [get-metric-data](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudwatch/get-metric-data.html) 命令請求回應中的錯誤進行疑難排解。您也可以從 CloudWatch 主控台對表達式進行疑難排解。
+ 當您在主控台中檢視 **Load** (負載) 和 **Capacity** (容量) 圖表時，**Capacity** (容量) 圖表可能不會顯示任何資料。要確保圖表具有完整的資料，請確保始終如一地為 Auto Scaling 群組啟用群組指標。如需詳細資訊，請參閱[啟用 Auto Scaling 群組指標 (主控台)](ec2-auto-scaling-metrics.md#as-enable-group-metrics)。
+ 當應用程式在其生命週期內於不同的 Auto Scaling 群組中執行時，容量指標規範僅對藍/綠色部署有用。此自訂指標允許您提供多個 Auto Scaling 群組的總容量。預測擴展使用此選項來顯示主控台 **Capacity** (容量) 圖表中的歷史資料。
+ 如果 `MetricDataQueries` 自己指定了 SEARCH() 函數 (在無需 SUM() 等數學函數的狀況下)，則您必須為 `ReturnData` 指定 `false`。這是因為搜尋表達式可能會傳回多個時間序列，並且基於表達式的指標規範只能傳回一個時間序列。
+ 搜尋表達式中涉及的所有指標均應具有相同的解析度。

## 限制
<a name="custom-metrics-limitations"></a>
+ 您可以在一個指標規範中查詢最多 10 個指標的資料點。
+ 在此限制之下，一個表達式計為一個指標。