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

所要時間2分
0

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 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 ログファイルの場所)

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ