我的 Amazon Elastic Container Service (Amazon ECS) 叢集使用容量供應商。我希望 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體有正在執行的任務時,讓它們在 Auto Scaling 群組中保持作用中狀態。
簡短描述
如果您使用容量供應商,則必須設定 Amazon ECS 叢集設定,使其縮減規模時,不中斷正在執行的任務。在 EC2 Auto Scaling 群組中實作縮減執行個體保護,並在 Amazon ECS 容量供應商設定中實作受管擴展保護。此組態可確保 Amazon ECS 保留正在執行任務的執行個體。
或者,設定 Amazon ECS 以在您停止執行個體時妥善地清空任務,並保護特定執行個體不過早停止。
您的組態使用以下元件:
- 容量供應商: 容量供應商使用 Auto Scaling 群組來動態佈建 EC2 執行個體。
- 執行個體清空: 當 Auto Scaling 群組中的 EC2 執行個體標記為終止時,它將進入清空狀態,並且不再接受新任務。正在執行的任務必須完成或移至另一個執行個體。
- 叢集自動擴展: 叢集自動擴展使用容量供應商,根據任務需求自動擴展 Auto Scaling 群組。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
確認 Amazon ECS 或 Auto Scaling 群組不會在縮減期間過早終止執行個體
若要在叢集自動擴展中使用受管終止保護,您必須在 Auto Scaling 群組上啟用執行個體縮減保護。此動作可確保 Auto Scaling 群組保留正在執行任務的執行個體。
若要啟用縮減保護,請執行下列 update-auto-scaling-group AWS CLI 命令:
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name my-asg \
--new-instances-protected-from-scale-in
**注意:**將 my-asg 替換為您的 Auto Scaling 群組名稱。
然後,執行以下 put-cluster-capacity-providers 命令以啟用受管終止保護,確保 Amazon ECS 保留正在執行任務的執行個體:
aws ecs put-cluster-capacity-providers \
--cluster my-cluster \
--capacity-providers my-capacity-provider \
--enable-managed-scaling \
--managed-termination-protection ENABLED
**注意:**將 my-cluster 替換為您的叢集名稱,將 my-capacity-provider 替換為您的容量供應商名稱。
設定 Amazon ECS,以在移除執行個體時妥善清空任務
從執行個體中移除任務時,最佳做法是妥善地清空它們。使用受管執行個體清空,讓 Amazon ECS 在終止之前重新排程其他執行個體上的任務。
若要啟用受管執行個體清空,請執行下列 update-capacity-provider 命令:
aws ecs update-capacity-provider \
--name my-cp \
--auto-scaling-group-provider '{
"managedDraining": "ENABLED"
}
**注意:**將 my-cp 替換為您的容量供應商名稱。
在容量允許的情況下,Amazon ECS 會將執行個體上的任務移至其他執行個體。不過,Amazon ECS 允許最多 48 小時來清空執行個體。如果此期限過後執行個體上仍有任務,則 Amazon ECS 將終止該執行個體並停止剩餘的任務。
保留特定的關鍵任務
使用任務保護來確保 Amazon ECS 擴展或部署動作不會停止關鍵任務。
**重要:**即使您啟用任務保護,Amazon ECS 仍然可以終止基礎執行個體。任務保護僅保護任務不會停止。
若要啟用任務保護,請執行下列 update-task-protection 命令:
aws ecs update-task-protection \
--cluster my-cluster \
--tasks my-task-id \
--protection-enabled
**注意:**將 my-cluster 替換為您的叢集名稱,將 my-task-id 替換為您的任務 ID。預設情況下,保護會持續 2 小時。若要變更此持續時間,請使用 --expires-in-minutes 選項。
若要檢查叢集中任務保護的狀態,請執行以下 get-task-protection 命令:
aws ecs get-task-protection \
--cluster my-cluster \
--tasks my-task-id
**注意:**將 my-cluster 替換為您的叢集名稱,將 my-task-id 替換為您的任務 ID。
對其他問題進行疑難排解
如果您啟用了 Auto Scaling 群組、容量供應商和任務的保護,但仍遇到問題,請執行以下動作:
相關資訊
保護您的 Amazon ECS 任務不會因縮減事件而終止
GetTaskProtection
UpdateTaskProtection
GitHub 網站上的 Amazon Elastic Container Service (Amazon ECS) 任務保護範例