Amazon ECS EC2 コンテナインスタンス - Amazon Elastic Container Service

Amazon ECS EC2 コンテナインスタンス

Amazon ECS エージェントは、クラスターに登録されているすべてのコンテナインスタンスで実行されるプロセスです。これにより、コンテナインスタンスと Amazon ECS の間の通信が容易になります。

注記

Linux コンテナインスタンスでは、エージェントコンテナは /lib/lib64/proc などの最上位ディレクトリをマウントします。これは、Amazon EBS ボリューム、awsvpc ネットワークモード、Amazon ECS Service Connect、FireLens – Amazon ECS といった、ECS の様々な機能を利用するために必要です。

Amazon ECSコンテナエージェントの各バージョンは、異なる機能セットをサポートし、以前のバージョンのバグ修正を提供します。可能であれば、最新バージョンの Amazon ECSコンテナエージェントを使用することを常にお勧めします。コンテナエージェントを最新バージョンに更新するには、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。

Amazon ECS コンテナエージェントには amazon-ecs-pause イメージが含まれています。Amazon ECS は、awsvpc ネットワークモードを使用するタスクにこのイメージを使用します。

どの機能と拡張が各エージェントリリースに含まれているか確認するには、https://github.com/aws/amazon-ecs-agent/releases を参照してください。

重要

信頼できるメトリクスの最小 Docker バージョンは、Amazon ECS 最適化 AMI 20220607 以降に含まれる Docker バージョン v20.10.13 以降です。

バージョン 1.20.0 以降のAmazon ECSエージェントでは、18.01.0 より前のバージョンの Docker のサポートが廃止されました。

ライフサイクル

Amazon ECS コンテナエージェントが Amazon EC2 インスタンスをクラスターに登録すると、Amazon EC2 インスタンスのステータスは、ACTIVE として、エージェントの接続ステータスは、TRUE としてレポートされます。このコンテナインスタンスはタスクの実行リクエストを受けることができます。

コンテナインスタンスを (終了ではなく) 停止した場合、ステータスは ACTIVE のままになりますが、エージェント接続ステータスは数分以内に FALSE になります。コンテナインスタンスで実行されていたタスクはすべて停止します。コンテナインスタンスを再び開始すると、コンテナエージェントは、Amazon ECS サービスと再接続し、インスタンスでタスクを再実行できるようになります。

重要

コンテナインスタンスを停止して開始するか、再起動した場合、Amazon ECS コンテナエージェントの以前の一部のバージョンは、元のコンテナインスタンス ID を登録解除せずに、そのインスタンスを再登録します。この場合、 Amazon ECS では、クラスター内のコンテナインスタンスが実際の数より多く一覧表示されます。(同じ Amazon EC2 インスタンス ID に対してコンテナインスタンス ID が重複している場合は、重複しているコンテナインスタンスのうち、インスタンスのステータスが ACTIVE でエージェントの接続ステータスが FALSE になっているものを安全に登録解除できます。) この問題は、最新のバージョンの Amazon ECS コンテナエージェントで修正されています。最新バージョンへの更新の詳細については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。

コンテナインスタンスのステータスを DRAINING に変更すると、新しいタスクはそのコンテナインスタンスに配置されません。そのコンテナインスタンスで実行されているサービスタスクは、可能な場合は削除され、システム更新を実行できるようになります。詳細については、「Amazon ECS コンテナインスタンスをドレインする」を参照してください。

コンテナインスタンスを登録解除または終了した場合、コンテナインスタンスのステータスは直ちに INACTIVE に変わり、コンテナインスタンスを一覧表示しても、そのコンテナインスタンスはレポートされなくなります。ただし、終了後 1 時間は、コンテナインスタンスの内容を表示できます。1 時間後、インスタンスの内容は表示できなくなります。

重要

インスタンスを手動でドレインさせるか、Auto Scaling グループのライフサイクルフックを構築して、インスタンスの状態を DRAINING にさせます。Auto Scaling ライフサイクルフックの詳細については、「Amazon EC2 Auto Scaling ライフサイクルフック」を参照してください。

Docker サポート

Amazon ECS は、Amazon Linux で公開された Docker の直近の 2 つの主要バージョンをサポートしています。現在、これには Docker 20.10.x と Docker 25.x が含まれます。

Amazon ECS に必要な最低限の Docker バージョンは、GitHub の Amazon ECS エージェント仕様ファイルにあります。

Amazon ECS に最適化された AMI を使用する場合、Docker は Amazon ECS コンテナエージェントで動作するように事前にインストールおよび設定されています。AMI には、Amazon ECS でテストおよびサポートされている Docker バージョンが含まれています。

注記

Amazon ECS は複数の Docker バージョンをサポートしていますが、最高の互換性とサポートを確保するために、Amazon ECS 最適化 AMI に付属する Docker バージョンを使用することをお勧めします。

Amazon ECS に最適化された AMI

Amazon ECS に最適化された AMI の Linux バリアントは、Amazon Linux 2 AMI をベースとして使用しています。各バリアントの Amazon Linux 2 ソース AMI 名を取得するには、Systems Manager Parameter Store API をクエリします。詳細については、「Amazon ECS に最適化された Linux AMI メタデータを取得する」を参照してください。Amazon ECS に最適化された最新の Amazon Linux 2 AMI からコンテナインスタンスを起動すると、現行バージョンのコンテナエージェントを取得できます。最新の Amazon ECS 対応 Amazon Linux 2 AMI を使用してコンテナインスタンスを起動するには、「Amazon ECS Linux コンテナインスタンスの起動」を参照してください。

追加情報

次のページでは、変更に関する追加情報を説明します。

Amazon ECS コンテナエージェントのログ設定パラメータ

Amazon ECS コンテナエージェントは、コンテナインスタンスのログを保存します。

コンテナエージェントバージョン 1.36.0 以降の場合、デフォルトでは、ログは Linux インスタンスの /var/log/ecs/ecs-agent.log および Windows インスタンスの C:\ProgramData\Amazon\ECS\log\ecs-agent.log にあります。

コンテナエージェントバージョン 1.35.0 以前の場合、デフォルトでは、ログは Linux インスタンスの /var/log/ecs/ecs-agent.log.timestamp および Windows インスタンスの C:\ProgramData\Amazon\ECS\log\ecs-agent.log.timestamp にあります。

デフォルトでは、エージェントログは 1 時間ごとにローテーションされ、最大 24 個のログが保存されます。

以下のコンテナエージェントの設定変数は、エージェントのデフォルトのログ記録動作を変更するために使用できます。使用可能なすべての設定パラメータの詳細については、Amazon ECS コンテナエージェントの設定 または GitHub の「Amazon ECS Agent README」を参照してください。

コンテナエージェントバージョン 1.36.0 以降では、logfmt 形式を使用した場合のログファイルは以下の例のようになります。

level=info time=2019-12-12T23:43:29Z msg="Loading configuration" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-agent:latest" module=parse.go level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-pause:0.1.0" module=parse.go level=info time=2019-12-12T23:43:29Z msg="Amazon ECS agent Version: 1.36.0, Commit: ca640387" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Creating root ecs cgroup: /ecs" module=init_linux.go level=info time=2019-12-12T23:43:29Z msg="Creating cgroup /ecs" module=cgroup_controller_linux.go level=info time=2019-12-12T23:43:29Z msg="Loading state!" module=statemanager.go level=info time=2019-12-12T23:43:29Z msg="Event stream ContainerChange start listening..." module=eventstream.go level=info time=2019-12-12T23:43:29Z msg="Restored cluster 'auto-robc'" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Restored from checkpoint file. I am running as 'arn:aws:ecs:us-west-2:0123456789:container-instance/auto-robc/3330a8a91d15464ea30662d5840164cd' in cluster 'auto-robc'" module=agent.go

JSON 形式を使用した場合のログファイルは以下の例のようになります。

{"time": "2019-11-07T22:52:02Z", "level": "info", "msg": "Starting Amazon Elastic Container Service Agent", "module": "engine.go"}

コンテナエージェントバージョン 1.35.0 以前では、ログファイルの形式は以下のようになります。

2016-08-15T15:54:41Z [INFO] Starting Agent: Amazon ECS Agent - v1.12.0 (895f3c1) 2016-08-15T15:54:41Z [INFO] Loading configuration 2016-08-15T15:54:41Z [WARN] Invalid value for task cleanup duration, will be overridden to 3h0m0s, parsed value 0, minimum threshold 1m0s 2016-08-15T15:54:41Z [INFO] Checkpointing is enabled. Attempting to load state 2016-08-15T15:54:41Z [INFO] Loading state! module="statemanager" 2016-08-15T15:54:41Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20 1.21 1.22] 2016-08-15T15:54:41Z [INFO] Registering Instance with ECS 2016-08-15T15:54:41Z [INFO] Registered! module="api client"