Amazon Linux 1 AMI の Amazon ECS コンテナインスタンスが切断されるのはなぜですか?
最終更新日: 2020 年 10 月 16 日
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 Linux 2 AMI の Amazon ECS コンテナインスタンスが切断されるのはなぜですか? をご参照ください。
Docker サービスがコンテナインスタンスで実行されていることを確認する
1. 影響を受けるコンテナインスタンスで Docker サービスが実行されていることを確認するには、次のコマンドを実行します。
sudo service docker status
コマンド出力は次のようになるはずです。
docker (pid 23013) is running...
Docker サービスが実行されていない場合、またはサービスを再起動する必要がある場合は、次のコマンドを実行してください。
sudo service docker restart
コマンド出力には次の行が含まれているはずです。
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