Amazon ECS コンテナエージェント - Amazon Elastic Container Service

Amazon ECS コンテナエージェント

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 コンテナエージェントをアップデートする」を参照してください。

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

重要

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

バージョン 1.20.0 以降のAmazon ECSエージェントでは、1.9.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 ライフサイクルフック」を参照してください。

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 コンテナエージェントの設定」を参照してください。

ECS_LOGFILE

値の例: /ecs-agent.log

Linux のデフォルト値: Null

Windows のデフォルト値: Null

エージェントログを書き込む場所。Amazon ECS-最適化 AMI を使用する際のデフォルトの方法である ecs-init 経由でエージェントを実行している場合、コンテナ内のパスは、/log になり、ecs-init はホスト上の /var/log/ecs/ にマウントします。

ECS_LOGLEVEL

値の例:criterrorwarninfodebug

Linux のデフォルト値: info

Windows のデフォルト値: info

ログに記録する詳細レベル。

ECS_LOGLEVEL_ON_INSTANCE

値の例:nonecriterrorwarninfodebug

Linux のデフォルト値:noneに明確に空でない値が設定されている場合はECS_LOG_DRIVER、それ以外の場合はECS_LOGLEVELと同じ値

Windows のデフォルト値:noneに明確に空ではない値が設定されている場合はECS_LOG_DRIVER、それ以外の場合はECS_LOGLEVELと同じ値

ECS_LOGLEVELをオーバーライドして、ロギングドライバーに記録されるレベルとは別に、オンインスタンスのログファイルに記録される必要のある詳細レベルを設定するために使用できます。ロギングドライバが明確に設定されている場合、インスタンス上のログはデフォルトでオフになります。この変数で再び有効にできます。

ECS_LOG_DRIVER

値の例: awslogsfluentdgelfjson-filejournaldlogentriessyslogsplunk

Linux のデフォルト値: json-file

Windows のデフォルト値: 該当しません

エージェントコンテナが使用するロギングドライバを決定します。

ECS_LOG_ROLLOVER_TYPE

値の例: sizehourly

Linux のデフォルト値: hourly

Windows のデフォルト値: hourly

コンテナエージェントのログファイルを 1 時間ごとに更新するか、サイズに基づいて更新するかを決定します。デフォルトでは、エージェントのログファイルは 1 時間ごとに更新されます。

ECS_LOG_OUTPUT_FORMAT

値の例: logfmtjson

Linux のデフォルト値: logfmt

Windows のデフォルト値: logfmt

ログ出力形式を決定します。json 形式を使用すると、ログの各行は構造化された JSON マップになります。

ECS_LOG_MAX_FILE_SIZE_MB

値の例: 10

Linux のデフォルト値: 10

Windows のデフォルト値: 10

ECS_LOG_ROLLOVER_TYPE 変数を size に設定すると、この変数は、更新前のログファイルの最大サイズ (MB 単位) を決定します。ロールオーバータイプを hourly に設定すると、この変数は無視されます。

ECS_LOG_MAX_ROLL_COUNT

値の例: 24

Linux のデフォルト値: 24

Windows のデフォルト値: 24

更新済みログファイルを保持する数を決定します。この制限に達すると、より古いログファイルは削除されます。

コンテナエージェントバージョン 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"