Amazon Elastic Container Service (Amazon ECS) のコンテナインスタンスが切断されました。
簡単な説明
Amazon ECS コンテナエージェントは、1 時間に数回接続および再接続を繰り返す場合があります。これらの変更イベントは正常なものであり、心配する必要はありません。
ただし、コンテナエージェントが切断された状態のままになっていると、コンテナインスタンスは ECS クラスターの一部として動作できません。agentConnected が false を返すと、エージェントは切断されます。この問題は次の原因で発生する可能性があります。
- ネットワークの問題により、インスタンスと Amazon ECS 間の通信が妨げられている。
- コンテナエージェントに、Amazon ECS エンドポイントと通信するために必要な AWS Identity and Access Management (IAM) アクセス許可がない。
- コンテナインスタンス内のホストまたは Docker サービスに問題がある。
切断の原因を特定するには、次の手順を実行してください。
解決方法
注: 次の解決策は、Amazon ECS 最適化 Amazon Linux 1 AMI に適用されます。Amazon ECS 最適化 Amazon Linux 2 AMI に適用される解決方法については、「切断された Amazon ECS エージェントをトラブルシューティングするにはどうすればよいですか?」を参照してください。
Docker サービスがコンテナインスタンスで実行されていることを確認する
1. 影響を受けるコンテナインスタンスで Docker サービスが実行されていることを確認するには、次のコマンドを実行します。
sudo service docker status
コマンド出力は次のようになります。
docker (pid 23013) is running...
Docker サービスが実行されていない場合、またはサービスを再起動する必要がある場合は、次のコマンドを実行してください。
sudo service docker restart
注: サービスが既に実行されている間は、このコマンドを入力しないでください。まず、コンテナインスタンスをドレーニング状態に設定してください。その後、Docker サービスを再起動して、既存のタスクを別のコンテナインスタンスにスケジュールします。
コマンド出力には次の行が含まれている必要があります。
Stopping docker: [ OK ]
Starting docker: [ OK ]
注: restart コマンドの後に Docker サービスが実行されていることを確認するには、sudo service docker status コマンドを実行してください。
2. ECS エージェントを起動するには、次のコマンドを実行します。
sudo start ecs
コンテナエージェントがコンテナインスタンスで実行されていることを確認する
コンテナエージェントが対象のコンテナインスタンスで実行されていることを確認するには、次のコマンドを実行します。
sudo status ecs
コンテナインスタンスでコンテナエージェントが実行されていない場合は、次のコマンドを実行してエージェントを起動します。
sudo start ecs
コマンド出力は次のようになります。
ecs start/running, process 23403
コンテナエージェントと Docker のログファイルを確認する
それでもコンテナインスタンスが切断されている場合は、コンテナホストのログファイルでコンテナエージェントと Docker を確認します。
コンテナエージェントと Docker のログファイルを出力するには、次のコマンドを実行してください。
sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**
sudo cat /var/log/docker
注: コンテナインスタンスからログ情報を収集するには、Amazon ECS ログコレクターを実行してください。
IAM インスタンスプロファイルに必要なアクセス許可があることを確認する
それでもコンテナエージェントが切断されている場合は、コンテナインスタンスに関連付けられている IAM インスタンスプロファイルに必要な IAM アクセス許可があることを確認します。
1. SSH を使用してインスタンスに接続します。
2. インスタンスに関連付けられたインスタンスプロファイルのインスタンスメタデータを表示するには、次のコマンドを実行します。
curl http://169.254.169.254/latest/meta-data/iam/info
コマンド出力は次のようになります。
{
"Code" : "Success",
"LastUpdated" : "2019-06-29T15:47:03Z",
"InstanceProfileArn" : "arn:aws:iam::1122334455:instance-profile/ecsInstanceRole",
"InstanceProfileId" : "AIPAJ5WF3LZVY7PLUHV72"
}
3. IAM ロールに、コンテナインスタンスに対する正しい権限が含まれていることを確認します。
4. コンテナエージェントで特定の認証情報エラーを確認するには、次のコマンドを実行してコンテナエージェントログで ECS ログのリストを確認します。
cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**
注: コンテナエージェントのログは 1 時間ごとにローテーションされ、サフィックスは現在の日時を反映するように自動的に変更されます。問題が発生したときの日付範囲とログ ID を含めるように、コマンドを更新します。
コンテナエージェントに必要な認証情報がない場合は、次のようなエラーがログに表示されます。
2019-06-29T16:10:09Z [ERROR] Unable to register as a container instance with ECS: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster
status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f
2019-06-29T16:10:09Z [ERROR] Error re-registering: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster
status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f
その他のヘルプ
この解決方法では ECS コンテナインスタンスの問題を特定できない場合は、Premium Support までお問い合わせください。まず、Amazon ECS ログコレクターを使用して、インスタンスのログのアーカイブを作成します。その後、サポートエンジニアが問題をトラブルシューティングできるように、ログをサポートチケットに添付します。
関連情報
Amazon ECS のトラブルシューティング
Amazon ECS container agent (Amazon ECS コンテナエージェント)
Amazon ECS container instance IAM role (Amazon ECS コンテナインスタンス IAM ロール)
Amazon ECS log file locations (Amazon ECS ログファイルの場所)