Amazon ECS クラスターの新しいキャパシティープロバイダーをセットアップしたり、既存のキャパシティープロバイダーを更新したりする際の問題のトラブルシューティング方法を教えてください。

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

Amazon Elastic Container Service (Amazon ECS) クラスターの新しいキャパシティープロバイダーをセットアップしようとしたり、既存のキャパシティープロバイダーを更新したりするときに、問題が発生します。

簡単な説明

Amazon ECS クラスターの新しいキャパシティープロバイダーをセットアップしたり、既存のキャパシティープロバイダーを更新したりするときに発生する最も一般的な問題には、次のようなものがあります。

  • AWS Command Line Interface (AWS CLI) を使用して Auto Scaling グループのキャパシティープロバイダーを作成すると、エラーが発生します。
  • 次のエラーが発生します: 指定されたキャパシティープロバイダーは既に存在します。既存のキャパシティープロバイダーの設定を変更するには、キャパシティープロバイダーを更新します。
  • 次のエラーが発生します: 指定された Auto Scaling グループ ARN は、別のキャパシティープロバイダーによって既に使用されています。一意の Auto Scaling グループ ARN を指定して、再試行してください。
  • キャパシティープロバイダー戦略を作成すると、次のエラーが発生します: 指定されたクラスターはビジー状態です。クラスターアタッチメントは、更新する前に UPDATE_COMPLETE または UPDATE_FAILED 状態である必要があります。待ってから、もう一度やり直してください。
  • キャパシティープロバイダーの制限により、エラーが発生します。
  • キャパシティープロバイダーは AWS CloudFormation で正常に作成されますが、コンソールには表示されません。

解決方法

AWS CLI を使用して Auto Scaling グループのキャパシティープロバイダーを作成すると、エラーが発生する

AWS CLI を使用してキャパシティープロバイダーを作成するときにこの問題のトラブルシューティングを行うには、AWS CloudTrail イベントを確認して CreateCapacityProvider API があるかどうかを確認します。CapacityProvider API で発生する可能性のあるエラーの一部を次に示します。

  • ClientException: このエラーは通常、クライアントアクションが原因で発生します。このクライアントアクションは、アクションまたはリソースを使用するために必要なアクセス許可を持たない AWS Identity and Access Management (IAM) ユーザーの代わりにアクションまたはリソースを使用している可能性があります。このエラーは、無効な識別子を指定している可能性もあります。
  • UpdateInProgressException: 指定したコンテナインスタンスで、現在の Amazon ECS コンテナエージェントの更新が進行中であるため、このエラーが発生します。コンテナエージェントが PENDING や STAGING などの移行段階で切断されると、更新プロセスがその状態で停止することがあります。ただし、エージェントが再接続すると、以前に停止した場所から再開します。

詳細については、「エラー」を参照してください。

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

次のエラーが発生します: 指定されたキャパシティープロバイダーは既に存在します。既存のキャパシティープロバイダーの設定を変更するには、キャパシティープロバイダーを更新します

キャパシティープロバイダーを作成するときは、以前に使用したキャパシティープロバイダー名とは異なる名前を使用します。または、その名前の既存のキャパシティープロバイダーを削除してから、新しいキャパシティープロバイダーを作成することもできます。

作成したすべてのキャパシティープロバイダーの一覧を表示するには、次のコマンドを実行します。

aws ecs describe-capacity-providers --query capacityProviders[].name --region example-region

出力は次のようになります。

[
    "FARGATE",
    "FARGATE_SPOT",
    "ecs-capacityprovider-1"
]

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

aws ecs delete-capacity-provider --capacity-provider ecs-capacityprovider-1 --region example-region

出力例とその他のオプションについては、「delete-capacity-provider」を参照してください。

新しいキャパシティープロバイダーを作成するには、次のコマンドを実行します。

aws ecs create-capacity-provider --name "example-capacity=provider" --auto-scaling-group-provider autoScalingGroupArn=arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:autoScalingGroupName/MyAutoScalingGroup,managedScaling={status=ENABLED,targetCapacity=100,minimumScalingStepSize=1,maximumScalingStepSize=100},managedTerminationProtection=ENABLED

出力例とその他のオプションについては、「create-capacity-provider」を参照してください。

次のエラーが発生します: 指定された Auto Scaling グループ ARN は、別のキャパシティープロバイダーによって既に使用されています。一意の Auto Scaling グループ ARN を指定して、再試行してください

Auto Scaling グループとキャパシティープロバイダーは 1 対 1 の関係を持っている必要があります。Auto Scaling グループは 1 つのキャパシティープロバイダーにアタッチでき、その逆も然りです。そのため、キャパシティープロバイダーが 1 つの Auto Scaling グループにのみ関連付けられていることを確認してください。

次のエラーが発生します: 指定されたクラスターはビジー状態です。クラスターアタッチメントは、更新する前に UPDATE_COMPLETE または UPDATE_FAILED 状態である必要があります。待ってから、もう一度やり直してください

このエラーは数分で自動的に解決されます。しばらく待ってから、キャパシティープロバイダーの更新を再試行できます。また、次の CLI コマンドを実行して添付ファイルの現在のステータスを表示し、アタッチメントが UPDATE_COMPLETE ステータスになるまで待機することもできます。

aws ecs describe-clusters --clusters example-ARN --include ATTACHMENTS --query clusters[].attachmentsStatus --region example-region

出力は次のようになります。

[
    "UPDATE_COMPLETE"
]

キャパシティープロバイダーの制限により、エラーが発生する

キャパシティープロバイダーを作成または更新するときは、次の制限事項に留意してください。

  • キャパシティー戦略には 6 つを超えるキャパシティープロバイダーを指定することはできません。
  • クラスター戦略では、Auto Scaling グループキャパシティープロバイダーまたは AWS Fargate キャパシティープロバイダーのいずれかを使用できます。両方のタイプを組み合わせて使用することはできません。
  • キャパシティープロバイダー戦略の基本値は、タスクの実行時にのみサポートされます。

キャパシティープロバイダーは CloudFormation で正常に作成されますが、コンソールには表示されません。

これは、CloudFormation テンプレートのクラスターにキャパシティープロバイダーを関連付けていない場合に発生することがあります。

この問題を回避するには、CloudFormation テンプレートで次のスニペットを使用して、キャパシティープロバイダーをクラスターに関連付けます。

...
ECSCluster:
  Type: 'AWS::ECS::Cluster'
  Properties:
    ClusterName: example-cluster
    CapacityProviders:
      - !Ref ECSCapacityProvider
...