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

最終更新日: 2020 年 9 月 30 日

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 2 AMI に適用されます。Amazon ECS に最適化された Amazon Linux 1 AMI に適用される解決策については、Amazon Linux 1 AMI の Amazon ECS コンテナインスタンスが切断される理由を参照してください。

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

1.    影響を受けるコンテナインスタンスで Docker サービスが実行されていることを確認するには、次のコマンドを実行します。

sudo systemctl status docker

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

docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-06-28 03:23:52 UTC; 1 day 12h ago
     Docs: https://docs.docker.com
  Process: 5519 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)
  Process: 5509 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)
 Main PID: 5531 (dockerd)
    Tasks: 60
   Memory: 55.4M
   CGroup: /system.slice/docker.service
           ├─5531 /usr/bin/dockerd --default-ulimit nofile=1024:4096
           ├─5570 docker-containerd --config /var/run/docker/containerd/containerd.toml
           ├─5782 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/...
           ├─6006 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/...
           └─6284 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/...

Docker サービスが非アクティブの場合は、次のコマンドを実行して Docker サービスを再起動します。

sudo systemctl restart docker

注意: このコマンドは出力を返しません。sudo systemctl status docker コマンドを実行して、Docker サービスが開始されたことを確認できます。

2.    コンテナエージェントを起動するには、次のコマンドを実行します。

sudo systemctl start ecs

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

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

sudo systemctl status ecs

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

ecs.service - Amazon Elastic Container Service - container agent
   Loaded: loaded (/usr/lib/systemd/system/ecs.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-06-29 15:45:57 UTC; 4min 5s ago
     Docs: https://aws.amazon.com/documentation/ecs/
  Process: 18896 ExecStopPost=/usr/libexec/amazon-ecs-init post-stop (code=exited, status=0/SUCCESS)
  Process: 18818 ExecStop=/usr/libexec/amazon-ecs-init stop (code=exited, status=0/SUCCESS)
  Process: 19422 ExecStartPre=/usr/libexec/amazon-ecs-init pre-start (code=exited, status=0/SUCCESS)
 Main PID: 19455 (amazon-ecs-init)
    Tasks: 7
   Memory: 2.7M
   CGroup: /system.slice/ecs.service
           └─19455 /usr/libexec/amazon-ecs-init start

コマンド出力にサービスがアクティブとして表示されない場合は、次のコマンドを実行してサービスを再起動します。

sudo systemctl restart ecs

注意: このコマンドは出力を返しません。sudo systemctl status ecs コマンドを実行して、コンテナエージェントが開始されたことを確認できます。

コンテナエージェントと Docker のログファイルを確認する

それでもコンテナインスタンスが切断されている場合は、コンテナホストのログファイルでコンテナエージェントと Docker を確認します。

コンテナエージェントと Docker のログファイルを出力するには、次のコマンドを実行してください。

sudo journalctl -u ecs
sudo journalctl -u 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

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?