Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
為什麼我的 Amazon ECS 服務中正在執行的任務計數會發生變化?
我的 Amazon Elastic Container Service (Amazon ECS) 服務中正在執行任務計數已增加或減少。
簡短描述
由於多種原因,您的 Amazon ECS 服務中正在執行的任務計數可能會增加或減少。一些常見的原因如下:
- 您的 Amazon ECS 任務未通過運作狀態檢查。
- AWS CloudFormation 或 AWS Cloud Development Kit (AWS CDK) 更新了 ECS 服務中所需的計數。
- 您手動更新了 ECS 服務所需的計數。
- Amazon ECS 服務自動擴展根據擴展政策更新了任務數目。
- 您使用 RegisterScalableTarget API 更新了應用程式自動擴展中的最小或最大計數。
- ECS 服務的部署組態修改了部署期間執行的任務計數。
解決方案
您的 ECS 任務未通過運作狀態檢查
- 如果您的任務使用 Amazon EC2 啟動類型,請參閱如何讓 Amazon ECS 任務使用 Amazon EC2 啟動類型執行,以通過 Amazon ECS 中的 Application Load Balancer 運作狀態檢查?
- 如果這些任務使用 AWS Fargate 啟動類型,請參閲如何對 Fargate 上 Amazon ECS 任務運作狀態檢查失敗進行疑難排解?
CloudFormation 或 AWS CDK 更新了 ECS 服務中所需的計數
如果使用 CloudFormation 或 CDK 建立 ECS 服務且未指定 DesiredCount 欄位,則所需計數將設為預設值 1。但是,當透過 CloudFormation 或 CDK 更新服務且未指定 DesiredCount 欄位時,會將目前部署中的現有所需計數用於新部署。
若要解決此問題,請檢閱 AWS CloudTrail 事件,以檢查 UpdateService API 呼叫是否由 CloudFormation 發出。您同樣可以檢查 Event record (事件記錄) 區段中的 userAgent 欄位是否指定以下內容來驗證這一點:
"userAgent": "cloudformation.amazonaws.com"
若要解決此問題,請在更新期間從 CloudFormation 或 CDK 程式碼中移除 desiredCount 參數。
您手動更新了 ECS 服務所需的計數
如果您使用 UpdateService API、Amazon ECS 主控台或 AWS Command Line Interface (AWS CLI) 手動更新 ECS 服務,請再次更新服務以將所需的計數變更為適當的值。如需詳細資訊,請參閲 Updating a service (更新服務) 和 update-service。
若要解決此問題,請檢閱 CloudTrail events (CloudTrail 事件),以 UpdateService API 呼叫是否從 Amazon ECS 主控台或 AWS CLI 發出。您可以在 CloudTrail 記錄的 userAgent 欄位中檢視此資訊。
範例:
"userAgent": "console.amazonaws.com"
Amazon ECS 服務自動擴展根據擴展政策更新了任務數目
Amazon ECS 服務自動擴展可能會根據擴展政策增加或減少所需的計數。檢閱服務並檢查是否有任何最近的擴展活動。
若要檢視擴展活動,請執行以下操作:
- 開啟 Amazon ECS 主控台。
- 在導覽窗格中,選擇 Clusters (叢集)。
- 選擇您要檢查的叢集。
- 選擇 Services (服務) 索引標籤。
- 選擇您要檢查的服務。
- 選擇 Events (事件) 索引標籤。
如果存在擴展事件,則可以在 Message (訊息) 欄中檢視資訊性訊息,如下所示:
Successfully set desired count to 1. Change successfully fulfilled by ecs. Cause: monitor alarm TargetTracking-service/service-autoscaling/sample-webapp-AlarmLow-fcd80aef-5161-4890-aeb4-35dde11ff42c in state ALARM triggered policy TargetTrackingPolicy.
如果任務因擴展活動而停止,請檢閱target tracking (目標追蹤) 或 step scaling (階段式擴展) 政策。然後,根據應用程式的要求更新所需的計數。
若要檢視應用程式自動擴展組態,請執行以下操作:
- 開啟 Amazon ECS 主控台。
- 在導覽窗格中,選擇 Clusters (叢集)。
- 選擇您要檢查的叢集。
- 選擇 Services (服務) 索引標籤。
- 選擇您要檢查的服務。
- 選擇 Auto Scaling (自動擴展) 索引標籤。
**注意:**如果您使用新的 Amazon ECS 主控台,請選擇 Configuration and tasks (組態和任務),然後在 Service configuration (服務組態) 下檢視相關資訊。
您使用 RegisterScalableTarget API 更新了應用程式自動擴展中的最小和最大計數。
如果您使用 RegisterScalableTarget API 來更新可擴展目標,則檢查 API 中指定的 MinCapacity 屬性值。如果您指定了新的最小值,則應用程式自動擴展會將此值用作任務可縮減規模的新最小值。
**注意:**應用程式自動擴展不會將所需計數縮減規模至小於指定的最小值。
ECS 服務的部署組態修改了部署期間正在執行的任務計數
檢閱 CloudTrail 事件,以檢查最近是否呼叫 UpdateService API。透過檢查 UpdateService API 中的 deploymentConfigration 請求參數,可以檢視 ECS 服務的部署組態。
-或-
透過執行以下操作,在 Amazon ECS 主控台中檢閱 ECS 服務的部署組態:
- 開啟 Amazon ECS 主控台。
- 在導覽窗格中,選擇 Clusters (叢集)。
- 選擇您要檢查的叢集。
- 選擇 Services (服務) 索引標籤。
- 選擇您要檢查的服務。
- 選擇 Deployments (部署) 索引標籤。
部署組態參數可控制部署期間執行的任務數,以及停止和啟動任務的順序。如果部署組態設定不正確,則部署期間執行的任務數將會減少。因此,最佳實務是將 minimumHealthyPercent 參數的值設定為高於 0%。
minimumHealthyPercent 參數表示以下任一項的下限,以服務所需任務數百分比表示:
- 部署期間應為服務執行的任務數
- 容器執行個體耗盡時應執行的任務數。
此參數的值將向上舍入。例如,如果 minimumHealthyPercent 為 50%,且所需任務數為四,則排程器可在啟動兩個新任務之前停止兩個現有任務。如果 minimumHealthyPercent 為 75%,且所需任務數為二,則排程器無法停止任何任務,因為結果值也是二。
maximumPercent 參數表示以下任一項的上限,以服務所需任務數百分比表示:
- 部署期間應為服務執行的任務數
- 容器執行個體耗盡時應執行的任務數。
此參數的值將向下舍入。例如,如果 maximumPercent 為 200%,且所需任務數為四,則排程器可以在停止四個現有任務之前啟動四個新任務。如果 maximumPercent 為 125%,且所需任務數為三,則排程器無法啟動任何任務,因為結果值也是三。
如需詳細資訊,請參閲輪流更新。
相關資訊
- 語言
- 中文 (繁體)
