Amazon Linux 1 AMI の Amazon ECS コンテナインスタンスが切断されるのはなぜですか?

最終更新日: 2019 年 7 月 24 日

Amazon Elastic Container Service (Amazon ECS) のコンテナインスタンスが切断されました。どうすればこの問題を解決できますか?

簡単な説明

Amazon ECS コンテナエージェントは、1 時間に数回接続および再接続を繰り返す可能性があります。これらの変更イベントは正常なものであり、心配する必要はありません。

ただし、コンテナエージェントが切断された状態のままになっていると、コンテナインスタンスは ECS クラスターの一部として動作できません。agentConnectedfalse を返すと、エージェントは切断されます。この問題は次の原因で発生する可能性があります。

  • ネットワークの問題により、インスタンスと 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