使用排程動作覆寫 Amazon ECS 的預測值 - Amazon Elastic Container Service

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

使用排程動作覆寫 Amazon ECS 的預測值

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

例如,您可以建立排程動作,其任務數量高於預測。在執行時間,Amazon ECS 會更新服務中任務的最小數量。由於預測擴展會針對任務數量進行最佳化,因此會遵守任務數量下限高於預測值的排程動作。這可防止任務數量低於預期。若要停止覆寫預測,請使用第二個排程動作,將最低任務數量傳回其原始設定。

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

重要

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

步驟 1:(選用) 分析時間序列資料

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

  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-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" }

    回應包含兩種預測:LoadForecastCapacityForecastLoadForecast 顯示每小時負載預測。CapacityForecast 顯示每小時處理預測負載時所需的容量預測值,同時維持 TargetValue 為 40.0 (40% 的 CPU 平均使用率)。

  2. 確定目標時段

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

步驟 2:建立兩個排程動作

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

  1. 開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2

  2. 叢集頁面上,選擇叢集。

  3. 在叢集詳細資訊頁面的服務區段中,然後選擇服務。

    服務詳細資訊頁面隨即出現。

  4. 選擇 Service Auto Scaling

    政策頁面隨即出現。

  5. 選擇排程動作,然後選擇建立

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

  6. 針對動作名稱,輸入唯一的名稱。

  7. 對於 Time zone (時區),選擇時區。

    所有列出的時區都來自 IANA 時區資料庫。如需詳細資訊,請參閱 tz 資料庫時區清單

  8. 針對開始時間,輸入動作開始的日期和時間

  9. 針對 Recurrence (重複),選擇 Once (一次)。

  10. 任務調整下,針對最小值,輸入小於或等於任務數目上限的值。

  11. 選擇建立排程動作

    政策頁面隨即出現。

  12. 設定第二個排程動作,以在事件結束時將最低任務數傳回原始設定。只有當您為最小值設定的值低於預測值時,預測擴展才能擴展任務數量。

為一次性事件建立兩個排程動作 (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-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),第二個排程動作會執行。這會在事件結束時將最小容量恢復至原始設定。

根據週期性排程擴展

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

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

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

30 6 * * 2

另請參閱

如需如何管理排程動作的詳細資訊,請參閱 使用排程動作擴展 Amazon ECS 服務