使用排程動作覆寫 Amazon ECS 的預測值
有時候,您可能會有未來應用程式需求的其他資訊,但預測計算無法考量該資訊。例如,預測計算可能會低估即將到來的行銷活動所需的任務。您可以使用排程動作,在未來時段暫時覆寫預測。排程動作可以週期性執行,或在一次性需求波動的特定日期與時間執行。
例如,您可以建立任務數量高於預測值的排程動作。在執行時期,Amazon ECS 會更新服務中的任務數量下限。由於預測性擴展會針對任務數量進行最佳化,因此會接受任務數量下限高於預測值的排程動作。這可防止任務數量低於預期。若要停止複寫預測,請使用第二個排程動作,讓任務數量下限恢復至其原始設定。
下列程序概述在未來時段覆寫預測的步驟。
重要
本主題假設您正嘗試覆寫預測,以擴展至高於預測值的容量。如果需要暫時減少任務數量,而不受預測性擴展政策的干擾,請改用僅預測模式。在僅預測模式下,預測性擴展將繼續產生預測,但不會自動增加任務數量。然後,您可以監控資源使用率,並視需要手動減少任務數量。
步驟 1:(選用) 分析時間序列資料
從分析預測時間序列資料開始。這是選用步驟,但是如果您想要了解預測的詳細資訊,這會很有幫助。
-
擷取預測
建立預測之後,您可以查詢預測中的特定時段。查詢的目標是取得特定時段的時間序列資料的完整檢視。
查詢最多可包含未來兩天的預測資料。如果已經使用預測擴展一段時間,您也可以存取過去的預測資料。不過,開始和結束時間之間的最大持續時間是 30 天。
若要使用 get-predictive-scaling-forecast 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-namecpu40-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 平均使用率)。 -
-
確定目標時段
確定應發生一次性需求波動時的一個小時或數個小時。請記住,預測中顯示的日期和時間為 UTC 格式。
步驟 2:建立兩個排程動作
接下來,在應用程式具有高於預測的負載時,為特定時段建立兩個排程動作。舉例來說,如果行銷活動會在特定時段為網站帶來流量,您可以排程一次性動作,在它開始時更新最小容量。然後,排程另一個動作,以便在事件結束時將最小容量恢復至原始設定。
開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2
。 -
在叢集頁面上,選擇叢集。
-
在「叢集詳細資訊」頁面上的服務區段中選擇服務。
服務資訊頁面隨即顯示。
-
選擇服務自動擴展。
政策頁面隨即顯示。
-
選擇排程動作,然後選擇建立。
建立排程動作頁面隨即顯示。
-
在名稱欄位中輸入唯一的名稱。
-
對於 Time zone (時區),選擇時區。
所有列出的時區都來自 IANA 時區資料庫。如需詳細資訊,請參閱 List of tz database time zones
。 -
在開始時間欄位中,輸入動作開始的日期與時間。
-
針對 Recurrence (重複),選擇 Once (一次)。
-
在任務調整下的「下限」欄位中,輸入小於或等於任務數量上限的值。
-
選擇建立排程動作。
政策頁面隨即顯示。
-
設定第二個排程動作,以便在事件結束時將任務數量下限恢復至原始設定。僅當為下限設定的值低於預測值時,預測性擴展才能擴展任務數量。
為一次性事件建立兩個排程動作 (AWS CLI)
若要使用 AWS CLI 建立排程動作,請使用 put-scheduled-update-group-action 命令。
例如,我們定義一個排程,在 5 月 19 日下午 5 點維持三個執行個體的最小容量,持續 8 小時。下列命令顯示如何實作此案例。
第一個 put-scheduled-update-group-action 命令會指示 Amazon EC2 Auto Scaling 在 2021 年 5 月 19 日下午 5 點 (UTC) 更新 Auto Scaling 群組的最小容量。
aws autoscaling put-scheduled-update-group-action --scheduled-action-namemy-event-start\ --auto-scaling-group-namemy-asg--start-time "2021-05-19T17:00:00Z" --minimum-capacity3
第二個命令指示 Amazon EC2 Auto Scaling 在 2021 年 5 月 20 日上午 1 點 (UTC),將群組的最小容量設定為 1。
aws autoscaling put-scheduled-update-group-action --scheduled-action-namemy-event-end\ --auto-scaling-group-namemy-asg--start-time "2021-05-20T01:00:00Z" --minimum-capacity1
再將這些排程動作新增到 Auto Scaling 群組後,Amazon EC2 Auto Scaling 會執行下列動作:
-
在 2021 年 5 月 19 日下午 5 點 (UTC),第一個排程動作會執行。如果群組目前擁有少於 3 個執行個體,群組則會擴增至 3 個執行個體。在此時間和接下來的八個小時內,如果預測容量高於實際容量,或者如果動態擴展政策生效,則 Amazon EC2 Auto Scaling 可以繼續擴增。
-
在 2021 年 5 月 20 日上午 1 點 (UTC),第二個排程動作會執行。這會在事件結束時將最小容量恢復至原始設定。
根據週期性排程擴展
若要每週覆寫相同時段的預測,請建立兩個排程動作,並使用 Cron 表達式提供時間與日期邏輯。
Cron 表達式格式由 5 個以空格分隔的欄位組成:[分鐘] [小時] [一個月的第幾日] [一年的第幾個月] [一週的第幾日]。欄位可以包含任何允許的數值,包括特殊字元。
例如,以下 Cron 表達式會在每周二上午 6:30 執行動作。使用星號作為萬用字元,以比對欄位的所有數值。
30 6 * * 2
另請參閱
如需有關如何管理排程動作的的詳細資訊,請參閱使用排程動作擴展 Amazon ECS 服務。