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

Amazon ECS のタスク配置制約に関する問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

タスク配置制約を使用して Amazon Elastic Container Service (Amazon ECS) でタスクを実行しようとしたところ、タスクは PENDING 状態に留まり、開始できません。

簡単な説明

タスク定義、タスク、サービスのいずれかにタスク配置制約を設定する場合、その属性に合ったコンテナインスタンスが必要です。それ以外の場合、タスクが PENDING ステータスに留まるか、開始に失敗し、次のいずれかのエラーが発生します。

  • サービス (service-name) はタスクを配置できませんでした。要件を満たすコンテナインスタンスがありません。条件に最も近いコンテナインスタンス( a1b2c3d4-5678-90ab-cdef-11111EXAMPLE ) には必須の属性が欠けています。
  • TaskFailedToStart: MemberOf 配置制約が満たされていません。
  • TaskFailedToStart: ATTRIBUTE

解決策

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

タスク配置制約の問題を解決するには、最初にそのタスク配置制約で指定した属性を確認します。次に、コンテナインスタンスに必要な属性があることを確認します。

タスク定義でのみ指定されているタスク配置制約を確認する

タスク配置制約をタスク定義でのみ使用する場合は、次のコマンドを実行し、コンテナインスタンスで属性が欠けていないかどうかを確認します。

ecs-cli check-attributes --task-def example-task-def --cluster example-cluster --region region-code --container-instances example-container-instance-id

注: 実際のものでそれぞれ、example-task-def をタスク定義に、example-cluster をクラスター名に、region-code を AWS リージョンに、example-container-instance-id をコンテナインスタンス ID に置き換えます。

詳細については、GitHub のウェブサイトで「欠けている属性を確認し、要因である属性エラーをデバッグする」を参照してください。

タスク定義、サービス、またはタスクで指定されているタスク配置制約を確認する

タスク定義内の配置制約を確認するには、次の手順を実行します。

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで [タスク定義] を選択します。
  3. タスク定義を選択してから、タスク定義のリビジョンを選択します。
  4. [タスク配置] を選択します。

サービスに指定されている配置制約を確認するには、次の手順を実行します。

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで [クラスター] を選択します。
  3. [クラスター] ページで該当するクラスターを選択します。
  4. [サービス] で該当するサービスを選択します。
  5. [設定とネットワーク] を選択し、[タスク配置戦略と制約] を選択します。

特定のタスクに指定されている配置制約を確認するには、次の describe-tasks AWS CLI コマンドを実行します。

    aws ecs describe-tasks  --cluster example-cluster --region region-code
    --tasks task-id

注: 実際のものでそれぞれ、example-cluster をクラスター名に、region-code をリージョンに、task-id をタスク ID に置き換えます。コマンドの出力で、placementConstraints の値を確認します。

コンテナインスタンスに必要な属性があることを確認する

Amazon ECS コンソールまたは AWS CLI を使用してコンテナインスタンスの属性を確認します。

Amazon ECS コンソール

次の手順を実行します。

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで [クラスター] を選択します。
  3. [クラスター] ページで該当するクラスターを選択します。
  4. [インフラストラクチャ] タブを選択します。
  5. [コンテナインスタンス] で該当するコンテナインスタンスを選択します。
  6. [アクション] を選択し、[属性の表示/編集] を選択します。
  7. コンテナインスタンスに、配置制約で指定された必須属性があることを確認します。

AWS CLI

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

aws ecs describe-container-instances --cluster example-cluster --region region-code
--container-instances example-container-instance-id

注: 実際のものでそれぞれ、example-cluster をクラスター名に、region-code をリージョンに、example-container-instance-id をコンテナインスタンス ID に置き換えます。

特定の属性を持つすべてのコンテナインスタンスを確認するには、list-container-instances コマンドを実行します。

aws ecs list-container-instances --cluster example-cluster --region region-code --filter "attribute:ecs.instance-type == t2.micro"

注: 実際のものでそれぞれ、example-cluster をクラスター名に、region-code をリージョンに、attribute:ecs.instance-type == t2.micro を属性に置き換えます。上記のコマンドは、インスタンスタイプが t2.micro であるクラスター内のすべてのコンテナインスタンスを一覧表示します。

AWS CLI を使用してコンテナインスタンスの属性を追加または更新するには、次の put-attributes コマンドを実行します。

aws ecs put-attributes \
    --cluster example-cluster \
    --region region-code \
    --attributes name=stack,value=production,targetId=example-container-instance-id

注: 実際のものでそれぞれ、example-cluster をクラスター名に、region-code をリージョンに、example-container-instance-id をコンテナインスタンス ID に置き換えます。--attributes オプションに属性を追加します。上記のコマンド例では、コンテナインスタンスに stack 名および production 値を追加しています。

(オプション) タスク配置制約を更新する

タスク配置の制約が誤っていたり、厳しすぎたりする場合は、タスク定義またはサービスで更新します。または、次の register-task-definition を実行し、新しいタスク定義のリビジョンを作成します。

aws ecs register-task-definition \
    --cli-input-json file://jsonfilepath/filename.json

**注:**jsonfilepath.filename.json は、実際のタスク定義 JSON ファイルに置き換えます。

スタンドアロンタスクの配置制約を更新するには、次の run-task コマンドを実行します。

aws ecs run-task \
    --cluster clustername \
    --placement-constraints exampleconstraints

注: 実際のものでそれぞれ、clustername をクラスター名に、exampleconstraints を配置制約に置き換えます。

AWS公式更新しました 2年前