スキップしてコンテンツを表示

Amazon ECS でキャパシティプロバイダーを削除する際のエラーを解決する方法を教えてください。

所要時間2分
0

Amazon Elastic Container Service (Amazon ECS) クラスターのキャパシティプロバイダーを削除しようとすると、エラーが発生します。

簡単な説明

AWS コマンドラインインターフェイス (AWS CLI) の delete-capacity-provider コマンドまたは DeleteCapacityProvider API を使用した場合、次のいずれかのエラーが発生する場合があります。

"updateStatus": "DELETE_FAILED"

または、

"updateStatusReason": キャパシティプロバイダーは、次のクラスターに関連付けられているため削除できません。 (クラスター名)キャパシティプロバイダーをクラスターから削除した後に、再試行してください。

AWS マネジメントコンソールを使用してキャパシティプロバイダーを削除した場合は、次のエラーが発生する場合があります。

キャパシティプロバイダー (キャパシティプロバイダー名) の削除中にエラーが発生しました。指定されたキャパシティプロバイダーは使用中のため削除できません。

クラスターに関連付けられているキャパシティプロバイダーは削除できません。削除に関する問題を解決するには、クラスターからキャパシティプロバイダーを削除するか、クラスターを削除する必要があります。次に、キャパシティプロバイダーを削除します。

注: Amazon EC2 Auto Scaling グループを削除すると、関連するキャパシティプロバイダーINACTIVE 状態になります。INACTIVE 状態のキャパシティプロバイダーは、随時自動削除される可能性があるため、使用することはベストプラクティスではありません。

解決策

注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。形式を処理するために、jq のウェブサイトの「jq のダウンロード」から jq をインストールします。

クラスターに関連付けられているキャパシティプロバイダーを特定する

Amazon ECS クラスターに関連付けられているすべてのキャパシティプロバイダーを特定するには、Amazon ECS コンソールまたは AWS CLI を使用します。

Amazon ECS コンソール

次の手順を実行します。

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで [クラスター] を選択します。
  3. クラスターを選択します。
  4. [インフラストラクチャ] タブを選択します。
  5. [キャパシティプロバイダー] を選択します。

AWS CLI

次の describe-clusters コマンドを実行します。

aws ecs describe-clusters --cluster your-cluster-name | jq '.clusters[].capacityProviders'

注: your-cluster-name は、お使いのクラスター名に置き換えます。

キャパシティプロバイダー戦略で、Amazon ECS がそのキャパシティプロバイダーを使用していないことを確認する

該当するキャパシティプロバイダーを使用するサービスを確認するには、次のスクリプトを実行します。

#!/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'

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

使用中の既存のキャパシティプロバイダーを削除する前に、Amazon ECS を更新し、新しいキャパシティプロバイダーを使用するようにする必要があります。Amazon ECS コンソールまたは AWS CLI を使用します。サービスの更新時に [新しいデプロイの強制] を使用することで、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのキャパシティを使用するタスクをプロバイダー間で移行します。

AWS CLI を使用してキャパシティプロバイダーを更新するには、次の手順を実行します。

  1. 次の describe-services コマンドを実行し、サービスの既存のキャパシティプロバイダー戦略を表示します。

    aws ecs describe-services --cluster my-cluster --services my-service

    注: お使いのものでそれぞれ、my-cluster をクラスター名に、my-service をサービス名に置き換えます。

  2. 削除するキャパシティプロバイダーを除外する、新しいキャパシティプロバイダー戦略を作成します。残りのキャパシティプロバイダーの合計重みが 100 であることを確認します。

  3. 次の update-service コマンドを実行してサービスを更新します。

    aws ecs update-service \
      --cluster your-cluster-name \
      --service your-service-name \
      --capacity-provider-strategy capacityProvider=remaining-provider,weight=100 \
      --force-new-deployment

    注: お使いのものでそれぞれ、your-cluster-name をクラスター名に、your-service-name をサービス名に置き換えます。さらに、remaining-provider を新しいキャパシティプロバイダーの名前に置き換えてください。

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

クラスターのデフォルトのキャパシティプロバイダー戦略を特定するには、次の describe-clusters コマンドを実行します。

aws ecs describe-clusters --cluster mycluster | jq '.clusters[].defaultCapacityProviderStrategy'

削除対象のキャパシティプロバイダーがコマンドの出力に表示された場合は、デフォルトのキャパシティプロバイダー戦略を変更する必要があります。Amazon ECS コンソールまたは AWS CLI を使用します。

Amazon ECS コンソール

次の手順を実行します。

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで [クラスター] を選択します。
  3. クラスターを選択します。
  4. [クラスターの更新] を選択します。
  5. [クラスター構成][デフォルトのキャパシティプロバイダー戦略] で、キャパシティプロバイダーの [削除] を選択します。
  6. [更新] を選択します。

AWS CLI

次の put-cluster-capacity-providers コマンドを実行します。

aws ecs put-cluster-capacity-providers --cluster ClusterName --capacity-providers [] --default-capacity-provider-strategy []

注: ClusterName は、実際のクラスター名に置き換えます。

以前のキャパシティプロバイダーを削除する前に、新しいキャパシティプロバイダーに置き換えます。キャパシティプロバイダーを置き換えるには、次の put-cluster-capacity-provider コマンドを実行します。

aws ecs put-cluster-capacity-providers --cluster ClusterName --capacity-providers UpdatedCapacityProvider --default-capacity-provider-strategy capacityProvider=UpdatedCapacityProvider --region RegionName

注: 実際のものでそれぞれ、ClusterName をクラスター名に、UpdatedCapacityProvider を新しいキャパシティプロバイダーに、RegionName を AWS リージョンに置き換えます。

put-cluster-capacity-providers コマンドの実行時には、クラスター内で保持するすべてのキャパシティプロバイダーを含める必要があります。キャパシティプロバイダーを含めなかった場合、Amazon ECS はキャパシティプロバイダーとクラスターの関連付けを解除します。

キャパシティプロバイダーを削除する

キャパシティプロバイダーを削除するには、次の delete-capacity-provider コマンドを実行します。

aws ecs delete-capacity-provider --capacity-provider PreviousCapacityProvider

注: PreviousCapacityProvider を、削除するキャパシティプロバイダーの ARN に置き換えます。

キャパシティプロバイダーが削除されたことを確認するには、次の describe-capacity-providers コマンドを実行します。

aws ecs describe-capacity-providers --capacity-provider PreviousCapacityProvider

注: PreviousCapacityProvider を、削除したキャパシティプロバイダーの ARN に置き換えます。

コマンドの出力で、キャパシティプロバイダーのステータスが INACTIVE であることを確認します。

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ