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 コンテナインスタンスの起動」を参照してください。
追加情報
次のページでは、変更に関する追加情報を説明します。
-
GitHub の Amazon ECS Agent の変更ログ
-
ecs-init
アプリケーションのソースコード、エージェントをパッケージ化するためのスクリプトと構成は、エージェントリポジトリの一部になりました。ecs-init
の古いバージョンおよびパッケージについては、GitHub で「Amazon ecs-init の変更ログ」を参照してください。 -
Docker ドキュメントの「Docker Engine リリースノート
」 -
NVIDIA ドキュメントの「NVIDIA ドライバードキュメント
」
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.
および Windows インスタンスの timestamp
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
-
値の例:
crit
、error
、warn
、info
、debug
Linux のデフォルト値:
info
Windows のデフォルト値:
info
ログに記録する詳細レベル。
ECS_LOGLEVEL_ON_INSTANCE
-
値の例:
none
、crit
、error
、warn
、info
、debug
Linux のデフォルト値:
none
に明確に空でない値が設定されている場合はECS_LOG_DRIVER
、それ以外の場合はECS_LOGLEVEL
と同じ値Windows のデフォルト値:
none
に明確に空ではない値が設定されている場合はECS_LOG_DRIVER
、それ以外の場合はECS_LOGLEVEL
と同じ値ECS_LOGLEVEL
をオーバーライドして、ロギングドライバーに記録されるレベルとは別に、オンインスタンスのログファイルに記録される必要のある詳細レベルを設定するために使用できます。ロギングドライバが明確に設定されている場合、インスタンス上のログはデフォルトでオフになります。この変数で再び有効にできます。 ECS_LOG_DRIVER
-
値の例:
awslogs
、fluentd
、gelf
、json-file
、journald
、logentries
、syslog
、splunk
Linux のデフォルト値:
json-file
Windows のデフォルト値: 該当しません
エージェントコンテナが使用するロギングドライバを決定します。
ECS_LOG_ROLLOVER_TYPE
-
値の例:
size
、hourly
Linux のデフォルト値:
hourly
Windows のデフォルト値:
hourly
コンテナエージェントのログファイルを 1 時間ごとに更新するか、サイズに基づいて更新するかを決定します。デフォルトでは、エージェントのログファイルは 1 時間ごとに更新されます。
ECS_LOG_OUTPUT_FORMAT
-
値の例:
logfmt
、json
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"