

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

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

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

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

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

**Topics**
+ [

## 步驟 1：(選用) 分析時間序列資料
](#analyzing-time-series-data)
+ [

## 步驟 2：建立兩個排程動作
](#scheduling-capacity)

**重要**  
本主題假設您正嘗試覆寫預測，以擴展至高於預測值的容量。如果需要暫時減少任務數量，而不受預測性擴展政策的干擾，請改用*僅預測*模式。在僅預測模式下，預測性擴展將繼續產生預測，但不會自動增加任務數量。然後，您可以監控資源使用率，並視需要手動減少任務數量。

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

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

1. **擷取預測**

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

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

   若要使用 [get-predictive-scaling-forecast](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/get-predictive-scaling-forecast.html) AWS 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 (40% 的 CPU 平均使用率)。

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

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

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

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

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在**叢集**頁面上，選擇叢集。

1. 在「叢集詳細資訊」頁面上的**服務**區段中選擇服務。

   服務資訊頁面隨即顯示。

1. 選擇**服務自動擴展**。

   政策頁面隨即顯示。

1. 選擇**排程動作**，然後選擇**建立**。

   **建立排程動作**頁面隨即顯示。

1. 在**名稱**欄位中輸入唯一的名稱。

1. 對於 **Time zone** (時區)，選擇時區。

   所有列出的時區都來自 IANA 時區資料庫。如需詳細資訊，請參閱 [List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。

1. 在**開始時間**欄位中，輸入動作開始的**日期**與**時間**。

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

1. 在**任務調整**下的「下限」欄位中，輸入小於或等於任務數量上限的值。

1. 選擇**建立排程動作**。

   政策頁面隨即顯示。

1. 設定第二個排程動作，以便在事件結束時將任務數量下限恢復至原始設定。僅當為**下限**設定的值低於預測值時，預測性擴展才能擴展任務數量。

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

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

第一個 [put-scheduled-update-group-action](https://docs.aws.amazon.com/cli/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 ECS 服務](service-autoscaling-schedulescaling.md)。