Amazon ECS で DELETE_IN_PROGRESS 状態に留まっているタスク定義をトラブルシューティングする方法を教えてください。

所要時間2分
0

Amazon Elastic Container Service (Amazon ECS) のタスク定義を削除したところ、状態が DELETE_IN_PROGRESS のままになりました。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Amazon ECS リソースがタスク定義のリビジョンに依存している場合、そのタスク定義の削除リクエストは完了できません。削除したタスク定義をスタンドアロンのタスクまたはサービスが使用している場合、タスク定義は DELETE_IN_PROGRESS 状態に留まります。

この問題を解決するには、次の list-clusters AWS CLI コマンドを実行して、そのタスク定義を使用するすべてのリソースを特定します。

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

AWS公式
AWS公式更新しました 2ヶ月前
コメントはありません