Amazon ECS サービスで実行中のタスク数が変更されたのはなぜですか?

所要時間2分
0

Amazon Elastic Container Service (Amazon ECS) のサービスで実行中のタスク数が増加または減少しました。

簡単な説明

Amazon ECS サービスの実行中のタスク数は、複数の理由により増減する場合があります。一般的な原因には、次のようなものがあります。

  • Amazon ECS タスクがヘルスチェックに失敗しています。
  • AWS CloudFormation または AWS Cloud Development Kit (AWS CDK) により、ECS サービスの希望カウントが更新されました。
  • 手動で ECS サービスの希望カウントを更新しました。
  • Amazon ECS サービスの Auto Scaling は、スケーリングポリシーに基づいてタスクの数を更新しました。
  • RegisterScalableTarget API を使用して、Application Auto Scaling で最小数または最大数を更新しました。
  • ECS サービスのデプロイ設定により、デプロイ中に実行中のタスク数が変更されました。

解決方法

ECS タスクがヘルスチェックに失敗している

CloudFormation または AWS CDK が ECS サービスの希望カウントを更新した

DesiredCount フィールドを指定せずに CloudFormation または CDK を使用して ECS サービスを作成した場合、希望するカウントはデフォルト値の 1 に設定されます。ただし、DesiredCount フィールドを指定せずに CloudFormation または CDK を使用してサービスを更新すると、現在のデプロイの既存の希望カウントが新しいデプロイに使用されます。

この問題のトラブルシューティングを行うには、AWS CloudTrail イベントを確認して、CloudFormation によって UpdateService API コールが行われたかどうかを確認します。イベントレコードセクションの userAgent フィールドが次のように指定されていることを確認することで、同様に検証することができます。

"userAgent": "cloudformation.amazonaws.com"

この問題を解決するには、更新中に CloudFormation または CDK コードから desiredCount パラメータを削除します。

ECS サービスの希望カウントを手動で更新した

UpdateService API、Amazon ECS コンソール、または AWS Command Line Interface (AWS CLI) を使用して ECS サービスを手動で更新した場合、サービスを再度更新して、希望カウントを適切な値に変更します。詳細については、「サービスの更新」と「update-service」を参照してください。

この問題のトラブルシューティングを行うには、CloudTrail イベントを確認して、UpdateService API コールが Amazon ECS コンソールまたは AWS CLI から行われたかどうかを確認します。この情報は CloudTrail レコードの userAgent フィールドで確認できます。

例:

"userAgent": "console.amazonaws.com"

Amazon ECS サービスの Auto Scaling が、スケーリングポリシーに基づいてタスク数を更新した

Amazon ECS サービスの Auto Scaling が、スケーリングポリシーに基づいて希望するカウントを増減した可能性があります。サービスを確認し、最近の規模の拡大や縮小がないか確認します。

規模の拡大や縮小を表示するには、次の手順を実行します。

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで、[Clusters] (クラスター) をクリックします。
  3. 確認するクラスターを選択します。
  4. サービスタブを選択します。
  5. 確認するサービスを選択します。
  6. イベントタブを選択します。

スケーリングイベントが発生した場合、メッセージ列に次のような情報メッセージが表示されることがあります。

Successfully set desired count to 1. Change successfully fulfilled by ecs. Cause: monitor alarm TargetTracking-service/service-autoscaling/sample-webapp-AlarmLow-fcd80aef-5161-4890-aeb4-35dde11ff42c in state ALARM triggered policy TargetTrackingPolicy.

規模の拡大や縮小が原因でタスクが停止した場合は、ターゲット追跡またはステップスケーリングポリシーを確認します。次に、アプリケーションの要件に従って、希望するカウントを更新します。

Application Auto Scaling 設定を表示するには、次の手順を実行します。

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで、[Clusters] (クラスター) をクリックします。
  3. 確認するクラスターを選択します。
  4. サービスタブを選択します。
  5. 確認するサービスを選択します。
  6. オートスケーリングタブを選択します。
    注: 新しい Amazon ECS コンソールを使用している場合は、設定とタスクを選択し、サービス設定の下にある情報を表示します。

RegisterScalableTarget API を使用して、Application Auto Scaling の最小数と最大数を更新した

RegisterScalableTarget API を使用してスケーラブルターゲットを更新した場合は、API で指定されている MinCapacity プロパティ値を確認します。新しい最小値を指定した場合、Application Auto Scaling はこの値を、タスクをスケールダウンできる新しい最小値として使用します。

注: Application Auto Scaling は、希望するカウントを指定された最小値未満にスケールダウンすることはありません。

ECS サービスのデプロイ設定により、デプロイ中に実行中のタスク数が変更された

CloudTrail イベントを確認して、UpdateService API が最近呼び出されたかどうかを確認します。UpdateService API の deploymentConfigration リクエストパラメータを確認することで、ECS サービスのデプロイ設定を表示できます。

  • または -

Amazon ECS コンソールで ECS サービスのデプロイ設定を確認するには、次の手順を実行します。

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで、[Clusters] (クラスター) をクリックします。
  3. 確認するクラスターを選択します。
  4. サービスタブを選択します。
  5. 確認するサービスを選択します。
  6. デプロイタブを選択します。

デプロイ設定パラメータは、デプロイ中に実行されるタスクの数と、タスクの停止とスタートの順序を制御します。デプロイ設定が正しくないと、デプロイ中に実行されるタスクの数が減ります。したがって、minimumHealthyPercent パラメータの値を 0% より大きい値に設定することがベストプラクティスです。

minimumHealthyPercent パラメータは、サービスに必要なタスク数に対する次の下限値をパーセンテージで表します。

  • デプロイ中にサービスに対して実行すべきタスクの数
  • コンテナインスタンスがドレインしているときに実行する必要のあるタスクの数。

このパラメータの値は切り上げられます。例えば、minimumHealthyPercent が 50% で、必要なタスク数が 4 の場合、スケジューラは 2 つの既存のタスクを停止してから 2 つの新しいタスクをスタートできます。minimumHealthyPercent が 75% で、必要なタスク数が 2 の場合、結果の値も 2 になるため、スケジューラはどのタスクも停止できません。

maximumPercent パラメータは、サービスに必要なタスク数に対する次の上限値をパーセンテージで表します。

  • デプロイ中にサービスに対して実行すべきタスクの数
  • コンテナインスタンスがドレインしているときに実行する必要のあるタスクの数。

このパラメータの値は切り捨てられます。例えば、maximumPercent が 200% で、必要なタスク数が 4 の場合、スケジューラは 4 つの新しいタスクをスタートしてから 4 つの既存のタスクを停止できます。maximumPercent が 125% で、必要なタスク数が 3 の場合、結果の値も 3 になるため、スケジューラはどのタスクもスタートできません。

詳細については、「ローリング更新」を参照してください。


関連情報

サービスのオートスケーリング

Amazon ECS で「[AWS service] was unable to place a task because no container instance met all of its requirements」([AWS のサービス] は、すべての要件を満たすコンテナインスタンスがないため、タスクの配置ができませんでした) というエラーを解決する方法を教えてください。

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