我删除了 Amazon Elastic Container Service (Amazon ECS) 任务定义,但它卡在 DELETE_IN_PROGRESS 状态。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
当 Amazon ECS 资源依赖于任务定义修订时,任务定义删除请求将无法完成。如果独立任务或服务使用您删除的任务定义,则该任务定义将卡在 DELETE_IN_PROGRESS 状态。
要解决此问题,请运行以下 AWS CLI 命令 list-clusters 来识别使用该任务定义的所有资源:
TaskDefARN=TaskDefinitionARN
REGION=Regioncode
for cluster in $(aws ecs list-clusters --region $REGION --output text --query 'clusterArns[]'); do echo "Checking cluster: $cluster"; for task in $(aws ecs list-tasks --region $REGION --cluster $cluster --output text --query 'taskArns[]'); do task_def=$(aws ecs describe-tasks --region $REGION --cluster $cluster --tasks $task --query 'tasks[].taskDefinitionArn' --output text); if [[ "$task_def" == "$TaskDefARN" ]]; then echo "Task using this definition: $task"; fi; done; for service in $(aws ecs list-services --region $REGION --cluster $cluster --output text --query 'serviceArns[]'); do service_def=$(aws ecs describe-services --region $REGION --cluster $cluster --services $service --query 'services[].taskDefinition' --output text); if [[ "$service_def" == "$TaskDefARN" ]]; then echo "Service using this definition: $service"; fi; done; done
**注意:**请将 TaskDefinitionARN 替换为任务定义的 ARN,将 Regioncode 替换为您的 AWS 区域。
示例输出:
Checking cluster: arn:aws:ecs:us-east-1:123456789012:cluster/cluster-1
Checking cluster: arn:aws:ecs:us-east-1:123456789012:cluster/cluster-2
Checking cluster: arn:aws:ecs:us-east-1:123456789012:cluster/cluster-3
Task using this definition: arn:aws:ecs:us-east-1:123456789012:task/cluster-3/abcde
Service using this definition: arn:aws:ecs:us-east-1:123456789012:service/cluster-3/service-1
在前面的示例中,abcde 任务属于 service-1。要删除 abcde 任务的任务定义,必须先删除 service-1。
如果您的服务正在主动维护任务,则当您尝试删除该服务时,可能会收到以下错误消息:
“调用 DeleteService 操作时出现错误 (InvalidParameterException): 当服务扩展到 0 以上时,将无法停止该服务。”
要解决此问题,请在删除服务之前,确保该服务没有正在运行的任务,并且任务计数为 0。或者,在运行 delete-service 命令时添加 --force 选项。
使用 Amazon ECS 控制台删除服务。或者,运行以下 delete-service 命令:
aws ecs delete-service --cluster clustername --service servicename
**注意:**请将 clustername 替换为您的集群名称,将 servicename 替换为您的服务名称。
对于 Amazon ECS 任务,停止任务后,任务定义删除最多可能需要 1 小时才能完成。对于 Amazon ECS 服务,删除部署或任务集后,任务定义删除最多可能需要 24 小时才能完成。
只有在删除完全完成后,才能创建与先前任务定义同名的新任务定义。如果您尚未删除该任务定义,则可以创建同一任务定义的新修订版,而不是创建新的任务定义。在完全删除先前任务定义之前,您可以使用修订版启动新任务并进行必要的更改。
相关信息
Amazon ECS 任务定义状态
describe-services
describe-tasks