Amazon ECS エージェントが接続解除される場合のトラブルシューティング方法を教えてください。
Amazon Elastic Container Service (Amazon ECS) のコンテナインスタンスが接続解除されました。
簡単な説明
Amazon ECS コンテナエージェントが通常の操作の一環として、1 時間内に複数回切断と再接続を行うのは正常な動作です。これらの変更イベントに対し、懸念する必要はありません。接続イベントが数分しか続かない場合も、コンテナエージェントやコンテナインスタンスに問題があるとは限りません。
ただし、コンテナエージェントが切断されている期間が長くなると、コンテナインスタンスは Amazon ECS クラスターの一部として動作できなくなります。次のいずれかの原因でこの問題が発生する場合があります。
- ネットワークの問題により、インスタンスと Amazon ECS 間の通信が妨げられた場合。
- コンテナエージェントには、Amazon ECS エンドポイントと通信するために必要な AWS Identity and Access Management (IAM) 権限が欠けている場合。
- コンテナインスタンス内のホストまたは Docker デーモンに問題がある場合。
- 基盤ホストでリソースの競合が発生した場合。
注: Amazon ECS コンテナエージェントの最新バージョンを使用することを推奨します。
解決策
注: 次の解決策は、Amazon ECS 最適化 Amazon Linux 2 AMI に適用されます。
Amazon EC2 インスタンスへの接続には SSH キーを使用できます。SSH キーを生成していない場合は、AWS Systems Manager の機能である Session Manager を使用するとインスタンスに接続できます。Amazon Linux 2 AMI と Amazon Linux 2 ECS 最適化ベース AMI には、Systems Manager はデフォルトでインストールされます。
コンテナエージェントがコンテナインスタンスで実行されていることを確認する
Amazon ECS コンテナエージェントのステータスと接続を確認するには、コンテナインスタンスで次のいずれかのコマンドを実行します。
$ sudo systemctl status ecs $ sudo docker ps -f name=ecs-agent
出力には active (running) と表示され、次のような形式を取ります。
ecs.service - Amazon Elastic Container Service - container agent Loaded: loaded (/usr/lib/systemd/system/ecs.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2022-02-15 15:51:09 UTC; 37min ago Docs: https://aws.amazon.com/documentation/ecs/ Process: 30039 ExecStopPost=/usr/libexec/amazon-ecs-init post-stop (code=exited, status=0/SUCCESS) Process: 29987 ExecStop=/usr/libexec/amazon-ecs-init stop (code=exited, status=0/SUCCESS) Process: 30077 ExecStartPre=/usr/libexec/amazon-ecs-init pre-start (code=exited, status=0/SUCCESS) Main PID: 30123 (amazon-ecs-init) Tasks: 5 Memory: 3.7M CGroup: /system.slice/ecs.service └─30123 /usr/libexec/amazon-ecs-init start CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eb1dc8d4ab3b amazon/amazon-ecs-agent:latest "/agent" 3 days ago Up 3 days (healthy) ecs-agent
エージェントの接続解除が原因で問題が発生した場合は、次のコマンドを実行して ECS エージェントを再起動します。
$ sudo systemctl restart ecs
注: 上記のコマンドを実行した後、出力は返されません。
エージェントが実行中であることを確認するには、次のコマンドを実行します。
sudo systemctl status ecs
Docker サービスがコンテナインスタンスで実行されていることを確認する
問題が発生したコンテナインスタンスで Docker サービスが実行されていることを確認するには、次のコマンドを実行します。
sudo systemctl status docker
出力には active (running) と表示され、次のような形式を取ります。
docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2022-02-11 17:42:32 UTC; 3 days ago Docs: https://docs.docker.com Process: 4307 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS) Process: 4296 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS) Main PID: 4315 (dockerd) Tasks: 24 Memory: 360.5M CGroup: /system.slice/docker.service ├─4315 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=32768:65536 ├─6010 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.17.0.2 -container-port 80 └─6016 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 80 -container-ip 172.17.0.2 -container-port 80
Docker サービスが非アクティブの場合は、次のコマンドを実行して Docker サービスを再起動します。
sudo systemctl restart docker
注: 上記のコマンドを実行した後、出力は返されません。
Docker サービスが再起動したことを確認するには、次のコマンドを実行します。
sudo systemctl status docker
コンテナエージェントと Docker のログファイルを確認する
コンテナインスタンスが切断されたままである場合は、コンテナホスト上のコンテナエージェントと Docker のログファイルを確認してください。
次のログファイルにおいて、"error"、"warn"、"agent transition state" などのキーワードの有無を確認します。
- /var/log/ecs/ecs-agent.log に配置された Amazon ECS コンテナエージェントの最新ログを確認します。 注: /var/log/ecs/ecs-agent-log.timestamp にフィルターを行うと、ローテーションされたログを確認できます。
- /var/log/ecs/ecs-init.log に配置された Amazon ECS の init ログを確認します。
- /var/log/cloud-init.log に配置されたユーザーデータ実行ログを確認します。
- コマンド sudo journalctl -u docker を実行し、Docker Daemon ログを確認します。
Linux を使用している場合は、終了コードを参照すると、エージェントコンテナの停止に関する詳細を確認できます。詳細については、GitHub のウェブサイトで「exitcodes」を参照してください。
終了コードを取得するには、次のコマンドを実行します。
docker inspect your container ID
your container ID を停止したコンテナの ID に置き換えてください。
注: Amazon ECS ログコレクターを使用すると、Amazon ECS の一般的なオペレーティングシステムログ、Docker ログ、およびコンテナエージェントログを収集できます。
IAM インスタンスプロファイルに必要な権限があることを確認する
コンテナエージェントが切断されたままである場合は、コンテナインスタンスに関連付けられた IAM インスタンスプロファイルに必要な IAM 権限があることを確認します。
-
SSH または Session Manager を使用してインスタンスに接続します。
-
インスタンスに関連付けられたインスタンスプロファイルのインスタンスメタデータを確認するには、次のコマンドを実行します。
curl http://169.254.169.254/latest/meta-data/iam/info次のような出力が行われます。
{ "Code" : "Success", "LastUpdated" : "2022-02-16T22:42:17Z", "InstanceProfileArn" : "arn:aws:iam::1122334455:instance-profile/ecsInstanceRole", "InstanceProfileId" : "AIPA4VIZXOFF55F72XIZN" } -
特定の認証情報エラーを確認するには、次の形式のコマンドを実行し、コンテナエージェントのログから ECS ログのリストを確認します。
cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-##YYYY-MM-DD-## を目的のタイムスタンプに置き換えてください。
注: コンテナエージェントログは 1 時間ごとにローテーションされます。サフィックスは、現在の日付と時刻を反映するように自動的に変更されます。コマンドを更新し、問題が発生した日付範囲とログ ID を指定します。
コンテナインスタンスに ECS エージェントを実行するのに十分なリソースがあることを確認する
タスクのメモリ/CPU 使用率が高い場合、コンテナインスタンスには ECS エージェントを実行するのに十分なリソースがない可能性があります。
Amazon ECS コンテナエージェントは、オペレーティングシステムで使用可能なメモリ量を Docker の ReadMemInfo() 関数を使用してクエリします。
コンテナインスタンスで次のコマンドを実行すると、オペレーティングシステムが認識しているメモリの合計が表示されます。
free -b
Amazon ECS 最適化 Amazon Linux AMI を実行中の t2.large インスタンスでの出力例:
total used free shared buff/cache available Mem: 8361193472 298577920 7325388800 405504 737226752 7844274176 Swap: 0 0 0
Amazon ECS コンテナエージェントおよび、コンテナインスタンス上のその他の重要なシステムプロセス用に、メモリを予約することもできます。このメモリを予約しておくと、タスクのコンテナによる同じメモリに対する競合を防ぐことができます。詳細については、「Amazon ECS Linux コンテナインスタンスのメモリを予約する」を参照してください。
環境変数 ECS_CLUSTER に正しいクラスター名が含まれることを確認する
Amazon ECS コンテナエージェントの構成パラメータ ECS_CLUSTER に正しいクラスター名が含まれていない場合、コンテナインスタンスはクラスターに参加できません。/etc/ecs/ecs.config ファイルの内容を参照し、このパラメータを検証するには、次のコマンドを実行します。
cat /etc/ecs/ecs.config
ECS エージェントが ECS エンドポイントと通信できることを確認する
ECS エンドポイントに接続するには、ネットワークアクセスコントロールリストとコンテナインスタンスセキュリティグループは、ポート 443 (HTTPS) でのアウトバウンド接続を許可している必要があります。
ECS エンドポイント (ACS/TCS) へのアウトバウンド接続を確認するには、コンテナインスタンスで次のいずれかのコマンドを実行します。
sudo yum install telnet -y$ telnet ecs.region.amazonaws.com 443
または、
$ curl https://ecs.region.amazonaws.com
次の推奨事項を確認します。
- アプリケーションが特定のオペレーティングシステムまたは Docker バージョンを必要としない限り、ECS ワークロードを実行するには、Amazon ECS 最適化 AMI を使用します。
- Amazon ECS コンテナエージェントの最新バージョンを使用します。最新バージョンには機能強化や重要な更新が含まれています。
- CPU とメモリの制限を適用してタスクを設定します。
関連情報
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
質問済み 5ヶ月前