Amazon ECS でキャパシティープロバイダーを削除する際、 DELETE_FAILED エラーを解決するにはどうすればよいですか?

最終更新日: 2022 年 4 月 5 日

AWS Command Line Interface (AWS CLI) または API を使用して、Amazon Elastic Container Service (Amazon ECS) クラスターのキャパシティープロバイダーを削除すると、エラーが発生します。

簡単な説明

AWS CLI または API を使用してクラスターのキャパシティープロバイダーを削除しようとすると、次のいずれかのエラーを受け取ることがあります。

  • "updateStatus": "DELETE_FAILED"
  • 「updateStatusReason」:「キャパシティープロバイダーはクラスター (your-cluster-name) に関連付けられているため、キャパシティープロバイダーを削除できません。クラスターからキャパシティープロバイダーを削除して、もう一度やり直してください」。

このエラーは次の原因で発生する可能性があります。

  • 削除しようとしているキャパシティープロバイダーは、キャパシティープロバイダー戦略で Amazon ECS サービスで使用されています。AWS マネジメントコンソールでは、Amazon ECS サービスで使用されているキャパシティープロバイダーを削除することはできません。このシナリオでは、コンソールで「指定されたキャパシティープロバイダーは使用中のため、削除できません」というエラーメッセージが表示されます。既存のキャパシティープロバイダーとクラスターの関連付けを解除できるのは、それが既存のタスクで使用されていない場合のみです。AWS CLI の DeleteCapacityProvider コマンドを実行すると、キャパシティープロバイダーは DELETE_FAILED ステータスに移行します。この問題を解決するには、「キャパシティープロバイダーがキャパシティープロバイダー戦略で Amazon ECS サービスによって使用されているかどうかを確認する」セクション中の手順を実行します。
  • デフォルトの戦略では、キャパシティープロバイダーが使用されます。タスクの実行時またはサービスの作成時にキャパシティープロバイダー戦略または起動タイプを選択しない場合、デフォルトでキャパシティープロバイダー戦略がクラスターに関連付けられます。ただし、関連付けは、キャパシティープロバイダーがクラスターの既定のキャパシティープロバイダー戦略として設定されている場合にのみ発生します。削除できるのは、クラスターに関連付けられていないキャパシティープロバイダーのみです。この問題を解決するには、「クラスターの既定のキャパシティープロバイダー戦略でキャパシティープロバイダーが設定されているかどうかを確認する」セクションの手順を実行します。

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

解決方法

キャパシティープロバイダー戦略で Amazon ECS サービスによってキャパシティープロバイダーが使用中かどうかを確認する

1.    クラスター内に複数のサービスがある場合は、次のスクリプトを使用して、キャパシティープロバイダーを使用しているサービスを確認します。

スクリプトを実行する前に、次の操作を実行します。

クラスターとキャパシティープロバイダーのパラメータを値に設定します。AWS CLI 認証情報をお客様の AWS リージョンに設定します。jq のウェブサイトから jq をインストールします。

#! /bin/bash
cluster=clustername 
capacityprovider=capacityprovidername
services=$(aws ecs list-services --cluster ${cluster} | jq --raw-output '.serviceArns[]')
aws ecs describe-services \
    --cluster ${cluster} \
    --services ${services} \
    | jq -r --arg capacityprovider "${capacityprovider}" \
    '.services[] | select(.capacityProviderStrategy[]?.capacityProvider == $capacityprovider) | .serviceName'

注: スクリプトが空白の出力を返す場合、クラスター内のどのサービスもキャパシティープロバイダーを使用していません。「キャパシティープロバイダーがクラスターのデフォルトのキャパシティープロバイダー戦略で設定されているかどうかを確認する」セクションにスキップします。

2.    スクリプトからの出力で返されるサービスを新しいキャパシティープロバイダーで更新します

3.    古いキャパシティープロバイダーを削除します。

重要: キャパシティープロバイダー戦略または起動タイプを使用してサービスを更新することはできません。別のキャパシティープロバイダーでサービスを更新する必要があります。

キャパシティープロバイダーが、クラスターのデフォルトのキャパシティープロバイダー戦略で設定されているかどうかを確認します。

1.    クラスターのデフォルトキャパシティープロバイダーを検索するには、次のコマンドを実行します。

$ aws ecs describe-clusters --cluster mycluster | jq '.clusters[].defaultCapacityProviderStrategy'
[
  {
    "capacityProvider": "oldCP",
    "weight": 0,
    "base": 0
  }
]

2.    キャパシティープロバイダーを削除するには、Amazon ECS コンソールまたは AWS CLI を使用して、クラスターのデフォルトのキャパシティープロバイダー戦略を変更する必要があります。

Amazon ECS コンソールを使用して:

1.    Amazon ECS コンソールを開きます。

2.    ナビゲーションペインで [クラスター] を選択してから、使用するクラスターを選択します。

3.    [クラスターの更新] を選択します。

AWS CLI を使用して:

$ aws ecs put-cluster-capacity-providers \
     --cluster mycluster \
     --capacity-providers newCP \
     --default-capacity-provider-strategy capacityProvider=newCP \
     --region us-east-1

$ aws ecs delete-capacity-provider --capacity-provider oldCP

$ aws ecs describe-capacity-providers --capacity-provider oldCP

注: 前のコード例では、mycluster をお使いのクラスターに置き換えていますNewCP は、追加する新しいキャパシティープロバイダーに置き換えます。OldCP は、削除するキャパシティープロバイダーに置き換えます。

4.    古いキャパシティープロバイダーを削除します。

PutClusterCapacityProviders API コールから除外されたクラスターに関連付けられている既存のキャパシティープロバイダーは、クラスターとの関連付けが解除されています。クラスターのデフォルトのキャパシティープロバイダー戦略にも同じルールが適用されます。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?