在删除活动任务定义之前,我想知道 Amazon Elastic Container Service (Amazon ECS) 服务、任务集、部署或独立任务是否正在使用该定义。
解决方法
使用 AWS 命令行界面 (AWS CLI) 确定 Amazon ECS 资源是否使用特定的活动任务定义。然后,使用输出查找并停用不必要的活动任务定义。最佳做法是在删除任务定义之前验证任务定义的状态。
**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
打开 AWS CLI,然后运行导出命令以设置 region_name 和 task_definition_family 环境占位符。将 example_ 值替换为您的 AWS 区域和任务定义系列的名称:
echo "Listing all task definitions that are in use by ECS resources in your Region $region_name"
for cluster_name in $(aws ecs list-clusters --region $region_name --output json | jq -r '.clusterArns[] | split("/") | .[1]')
do
for service_name in $(aws ecs list-services --cluster $cluster_name --region $region_name --output json | jq -r '.serviceArns[] | split("/") | .[2]')
do
taskdef_arn=$(aws ecs describe-services --cluster $cluster_name --services $service_name --region $region_name --output json | jq -r '.services[].taskDefinition')
echo "Service Name: $service_name | Task Definition: $taskdef_arn | Cluster: $cluster_name"
done
for task_id in $(aws ecs list-tasks --cluster $cluster_name --region $region_name --family $task_definition_family --output json | jq -r '.taskArns[] | split("/") | .[2]')
do
result=$(aws ecs describe-tasks --tasks $task_id --cluster $cluster_name --region $region_name --output json)
task_definition=$(echo $result | jq -r '.tasks[].taskDefinitionArn')
task_group=$(echo $result | jq -r '.tasks[].group')
echo "Task ID: $task_id | Group: $task_group | Task Definition: $task_definition | Cluster: $cluster_name"
done
done
以下示例输出显示了正在使用的任务定义列表:
Listing all task definitions that are in use by ECS resources in your Region example_region
Service Name: test123 | Task Definition: arn:aws:ecs:ap-southeast-1:1234567890:task-definition/nginx-fargate:16 | Cluster: enhanced-architecture-fargate
Service Name: test-ec2 | Task Definition: arn:aws:ecs:ap-southeast-1:1234567890:task-definition/httpd-ec2:4 | Cluster: enhanced-architecture-fargate
Task ID: 6af9a36954cb4ef0b238926135bc606b | Group: service:test123 | Task Definition: arn:aws:ecs:ap-southeast-1:1234567890:task-definition/nginx-fargate:16 | Cluster: enhanced-architecture-fargate
Task ID: e49c6b174d2b47789ac50597256afb88 | Group: family:nginx-fargate | Task Definition: arn:aws:ecs:ap-southeast-1:1234567890:task-definition/nginx-fargate:16 | Cluster: enhanced-architecture-fargate
Task ID: f1ac98cc3b37494ea681832f52d49a05 | Group: family:nginx-fargate | Task Definition: arn:aws:ecs:ap-southeast-1:1234567890:task-definition/nginx-fargate:16 | Cluster: enhanced-architecture-fargate
Service Name: test123 | Task Definition: arn:aws:ecs:ap-southeast-1:1234567890:task-definition/nginx-fargate:16 | Cluster: test1
Task ID: 95112b2b561b4bb98aff3877548a60ff | Group: service:test123 | Task Definition: arn:aws:ecs:ap-southeast-1:1234567890:task-definition/nginx-fargate:16 | Cluster: test1
**可选:**要列出特定区域正在使用的所有任务定义,请从 list-tasks API 调用中删除 --family 选项。使用分页选项列出某个区域的 AWS 账户中的大量任务定义。
相关信息
可阻止删除的 Amazon ECS 资源
Amazon ECS 任务定义参数