我要如何進行 Amazon ECS 中服務自動擴展問題的疑難排解?

上次更新日期︰2022 年 3 月 30 日

針對我的 Amazon Elastic Container Service (Amazon ECS) 服務設定的服務自動擴展未按照要求縮減或擴增所需任務計數。

簡短描述

藉由將 ECS 服務與 Application Auto Scaling服務和 Amazon CloudWatch 警示整合,您可以自動更新您 Amazon ECS 服務的所需任務計數。

由於以下一個或多個原因,服務自動擴展可能無法按預期新增或移除任務:

  • 未正確設定擴展政策。
  • 觸發擴展策略的 CloudWatch 警示遭到刪除或編輯。
  • 在排定的動作中未正確指定 cron 表達式格式。
  • 您以手動方式或透過 AWS CloudFormation 或 AWS 雲端開發套件 (AWS CDK) 更新了所需任務計數,其值小於服務自動擴展中設定的最小值或大於最大值。
  • 您的 ECS 叢集沒有足夠的資源或容量來執行新任務。

解決方案

CloudWatch 警示和擴展政策疑難排解

可擴展目標

aws application-autoscaling register-scalable-target --service-namespace ecs --scalable-dimension ecs:service:DesiredCount \
--resource-id service/your-cluster/your-service-name --min-capacity 1 --max-capacity 10 --region example-region
  • 使用以下命令檢索您 ECS 服務的服務自動擴展資訊:
aws application-autoscaling describe-scalable-targets --service-namespace ecs --region example-region 
aws application-autoscaling describe-scaling-policies --service-namespace ecs --region example-region
aws application-autoscaling describe-scaling-activities --service-namespace ecs \ 
--scalable-dimension ecs:service:DesiredCount --resource-id service/your-cluster/your-service-name --region example-region
  • 建立或更新您 ECS 服務自動擴展的 CloudWatch 警示時,請確認指標、維度、統計數字、週期、條件、閾值皆已正確指定。否則,不會觸發警示以更新關聯的擴展政策。

注意:如果您在執行 AWS CLI 命令時收到錯誤,請確認您使用的是最新版 AWS CLI

步進擴展

  • 檢查是否正在觸發與擴展政策相關聯的 CloudWatch 警示。藉由檢視 CloudWatch 警示歷史記錄,檢查是否有任何錯誤。
  • 針對步進擴展政策,請檢查是否已在 CloudWatch 警示中設定了違規閾值、步進調整和擴展調整類型。如果沒有適用於違規差量 (即從指標值中減去閾值) 的相應步進調整,則會在警示歷史記錄中看到以下錯誤訊息:未能執行 AutoScaling 動作:未找到適用於指標值 [xx, xx] 和違規差量 xx 的步進調整
    因此,請確認您的政策涵蓋所有步進調整,即從負無窮大到 0 (若為縮減) 和 0 到正無窮大 (若為擴增)。
    注意:通常,對於擴增政策,在步進調整中,只有上限可以為空 (正無窮大)。對於縮減政策,只有下限可以為空 (負無窮大)。如需詳細資訊,請參閱步進調整

目標追蹤擴展

  • 由於目標追蹤擴展政策是由 AWS 所管理,因此 Application Auto Scaling 會根據在建立這些政策期間指定的目標值或閾值,建立用於縮減和擴增的 CloudWatch 警示。因此,不要編輯或刪除這些警示。編輯或刪除這些警示會影響擴展行為。如果修改或刪除了這些警示,務必再次重新建立目標追蹤政策。
  • 只要每個政策使用不同的指標,則一項 ECS 服務就可以有多個目標追蹤擴展政策。Application Auto Scaling 旨在排定可用性的優先順序。因此,視目標追蹤政策是準備好進行擴增或縮減而定,這些政策的行為會有所不同。如果有任何目標追蹤政策已準備好擴增,則 Aplication Auto Scaling 會擴增任務,但僅當所有目標追蹤政策 (且縮減部分已啟用) 都準備好進行縮減時,才會進行縮減。
  • 當為 ECS 服務設定了多個擴展政策(包括目標追蹤和步進擴展政策)時,請確認其不會衝突。這些衝突可能會導致不良行為,例如發生連續縮減和擴增,進而導致任務計數不必要的振盪。

如需詳細資訊,請參閲 Application Auto Scaling 的目標追蹤擴展政策

不正確的 Cron 表達式疑難排解

請確認排程中指定的 Cron 表達式在用於 Application Auto Scaling 的排定動作組態中正確無誤。Application Auto Scaling 支援的 Cron 格式由六個欄位組成,以空格分隔:[Minutes] [Hours] [Day_of_Month] [Month] [Day_of_Week] [Year]。

如需詳細資訊,請參閲 Application Auto Scaling 排程動作範例

所需任務計數更新疑難排解

當您手動更新或使用 CloudFormation 或 AWS CDK 更新 ECS 服務的所需任務計數時,請注意以下事項:

  • 如果您將 ECS 服務的所需任務計數更新為低於最小容量值的值,且警示觸發擴增活動,則服務自動擴展會將所需計數擴展至達到最小容量值。然後,服務自動擴展會根據與警示相關聯的擴展政策繼續視需要擴增。但是,縮減活動不會調整所需計數,因為所需計數已經低於最小容量值。
  • 如果您將 ECS 服務的所需任務計數更新為高於最大容量值的值,且警示觸發縮減活動,則服務自動擴展會將所需計數擴增至最大容量值。然後,服務自動擴展會根據與警示相關聯的擴展政策繼續視需要縮減。但是,擴增活動不會調整所需計數,因為所需計數已經高於最大容量值。
  • 如果使用 CloudFormation 或 CDK 建立 ECS 服務且未指定 DesiredCount 欄位,則所需計數將設為預設值 1。但是,當透過 CloudFormation 或 CDK 更新相同的服務且未指定 DesiredCount 欄位時,則會將當前部署中的現有所需計數用於新部署。因此,當在 CloudFormation 堆疊或 AWS CDK 中指定所需計數值時,請確定該值在服務更新期間介於最小值與最大值之間。

叢集容量問題疑難排解

如果您的 ECS 叢集沒有足夠的資源 (例如 Amazon Elastic Compute Cloud (Amazon EC2) 容器執行個體 ) 來執行任務,則由擴展政策發起的擴展活動仍不會完成。在此情況下,會在服務事件中記錄一筆錯誤訊息。為避免這些 Amazon EC2 容量問題並成功啟動任務,請利用 Amazon ECS 容量提供者以視需要自動佈建 EC2 執行個體。

注意: 在擴展活動期間,服務自動擴展以一項服務中的實際執行任務計數而不是所需計數作為起始點。這可以防止可能無法滿足的過度擴展,例如,如果沒有足夠的容器執行個體資源來放置額外的任務。如果容器執行個體容量稍後可用,則等待中的擴展活動可能會成功。接著,會在冷卻時間之後繼續進一步的擴展活動。