Amazon Elastic Container Service (Amazon ECS) の複数のコンテナインスタンスで ECS コンテナエージェントを利用していますが、コンテナインスタンスが切断状態になっています。切断されているのは、なぜですか?

ECS コンテナエージェントは、ECS コンテナインスタンスをクラスターと関連付け、ユーザーが指定して実行するコンテナの開始、停止、またはクエリを行うタイミングを Docker に指示します。エージェントからサービスにアクセスできない場合、コンテナインスタンスは ECS クラスターのメンバーとして動作できません。コンテナエージェントの詳細については、「Amazon ECS コンテナエージェント」を参照してください。

コンテナエージェントは、正常なオペレーションの一環として切断と再接続を 1 時間に数回繰り返す場合があります。接続イベントが数分以内で終わる場合、コンテナエージェントやコンテナインスタンスに問題があるわけではありません。詳細については、「コンテナインスタンス状態変更イベント」を参照してください。

コンテナエージェントの切断状態が数分を超えて続くと、コンテナインスタンスは ECS クラスターの一部として動作できなくなります。この場合、問題の原因として以下が考えられます。

  • ネットワーク問題でインスタンスと ECS が通信できない。
  • コンテナエージェントに、ECS エンドポイントとの通信に必要な AWS Identity and Access Management (IAM) アクセス許可がない。
  • コンテナインスタンス内のホストレベルまたは Docker デーモンレベルで問題がある。

以下のステップに従って問題の原因を特定できます。以下のコマンドは、Amazon ECS に最適化された AWS 提供の Amazon Machine Image (AMI) を使用した場合に該当します。

注意: 別の AMI を使用する場合は、変更が必要になることがあります。

Docker デーモンがコンテナインスタンスで実行されていることを確認する

Docker デーモンが対象のコンテナインスタンスで実行されていることを確認するには、次のコマンドを実行します。

ps aux | grep dockerd

このコマンドの出力は次のようになります。

root      2909  7.0  1.2 699128 52284 ?        Sl   13:29   0:04 /usr/bin/dockerd --default-ulimit nofile=1024:4096 --storage-driver devicemapper --storage-opt dm.thinpooldev=/dev/mapper/docker-docker--pool --storage-opt dm.use_deferred_removal=true --storage-opt dm.fs=ext4 --storage-opt dm.use_deferred_deletion=true

Docker コンテナデーモンがコンテナインスタンスで実行されていることを確認する

Docker コンテナデーモンが対象のコンテナインスタンスで実行されていることを確認するには、次のコマンドを実行します。

ps aux | grep docker-containerd

このコマンドの出力は次のようになります。

root      2916  0.8  0.3 361096 12396 ?        Ssl  13:29   0:02 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc

以上のコマンドで必要な結果が出力されない場合は、次のコマンドを実行して Docker デーモンの開始と停止を実行します。

sudo service docker stop && sudo service docker start

このコマンドの出力は、ホストレベルの Docker サービスの停止と開始に関して [OK] を示す 2 つの行で構成されます。

コンテナエージェントがコンテナインスタンスで実行されていることを確認する

コンテナエージェントが対象のコンテナインスタンスで実行されていることを確認するには、次のコマンドを実行します。

docker ps

注意: デフォルトでは、コンテナエージェントで使用される Docker コンテナ名は ecs-agent ですが、コンテナを独自に実行した場合は変わることがあります。

ECS コンテナエージェントが実行されていない場合は、次のコマンドを実行して開始します。

sudo start ecs

コンテナエージェントを開始しても ECS クラスターの切断状態が続く場合は、コンテナインスタンスに関連付けられている IAM インスタンスプロファイルに必要な IAM アクセス許可があることを確認します。

IAM インスタンスプロファイルに必要なアクセス許可があることを確認する

IAM コンソールまたは AWS コマンドラインインターフェース (AWS CLI) を使用し、コンテナインスタンスに関連付けられているインスタンスプロファイルが必要な要件を満たしていることを確認します。

インスタンスレベルでコンテナエージェントのログファイルを分析し、認証情報エラーがないことを確認します。コンテナエージェントのログは 1 時間ごとに更新され、サフィックスが自動的に変更されて最新の日時が反映されます。次のコマンドを実行して ECS ログを表示します。

cat /var/log/ecs/ecs-agent.log.2017-10-24-13

注意: コマンドを更新し、問題が発生した期間を含めてください。

コンテナエージェントに必要な認証情報がない場合は、次のようなエラーがログに表示されます。

2017-10-24T13:48:59Z [INFO] Registering Instance with ECS
2017-10-24T13:48:59Z [ERROR] Could not register: NoCredentialProviders: no valid providers in chain. Deprecated.
	For verbose messaging see aws.Config.CredentialsChainVerboseErrors
2017-10-24T13:48:59Z [CRITICAL] Could not create cluster: NoCredentialProviders: no valid providers in chain. Deprecated.
	For verbose messaging see aws.Config.CredentialsChainVerboseErrors
2017-10-24T13:48:59Z [ERROR] Error registering: NoCredentialProviders: no valid providers in chain. Deprecated.
	For verbose messaging see aws.Config.CredentialsChainVerboseErrors

このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2016 年 08 月 04 日

更新 : 2018 年 7 月 19 日