Amazon ECS 컨테이너 에이전트 - Amazon Elastic Container Service

Amazon ECS 컨테이너 에이전트

Amazon ECS 에이전트는 클러스터에 등록된 모든 컨테이너 인스턴스에서 실행되는 프로세스입니다. 컨테이너 인스턴스와 Amazon ECS 간의 통신을 용이하게 합니다.

참고

Linux 컨테이너 인스턴스에서 에이전트 컨테이너는 /lib, /lib64/proc과 같은 최상위 디렉터리를 탑재합니다. 이는 Amazon EBS 볼륨, awsvpc 네트워크 모드, Amazon ECS Service Connect 및 Amazon ECS용 FireLens 같은 ECS 기능에 필요합니다.

각 Amazon ECS 컨테이너 에이전트 버전은 서로 다른 기능 세트를 지원하며 이전 버전에 대한 버그 수정을 제공합니다. 기능한 한 최신 버전의 Amazon ECS 컨테이너 에이전트를 사용할 것이 좋습니다. 컨테이너 에이전트를 최신 버전으로 업데이트하려면 Amazon ECS 컨테이너 에이전트 업데이트 섹션을 참조하세요.

각 에이전트 릴리스에 포함된 기능 및 기능 향상을 보려면 https://github.com/aws/amazon-ecs-agent/releases를 참조하세요.

중요

신뢰할 수 있는 지표를 위한 최소 Docker 버전은 Docker 버전 v20.10.13 이상이며, Amazon ECS 최적화 AMI 20220607 이상 버전에 포함되어 있습니다.

Amazon ECS 에이전트 버전 1.20.0 이상에서는 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로 바뀌며, 컨테이너 인스턴스를 나열할 때 해당 컨테이너 인스턴스가 더 이상 보고되지 않습니다. 하지만 종료 후 한 시간 동안은 여전히 컨테이너 인스턴스 설명이 가능합니다. 한 시간이 지나면 더 이상 인스턴스 설명을 사용할 수 없습니다.

중요

인스턴스를 수동으로 드레이닝하거나 Auto Scaling 그룹 수명 주기 후크를 구축하여 인스턴스 상태를 DRAINING으로 설정할 수 있습니다. Auto Scaling 수명 주기 후크에 대한 자세한 정보는 Amazon EC2 Auto Scaling 수명 주기 후크를 참조하세요.

Amazon ECS 최적화 AMI

Amazon ECS 최적화 AMI의 Linux 변형은 Amazon Linux 2 AMI를 기반으로 사용합니다. Systems Manager Parameter Store API를 쿼리하여 각 변형에 대한 Amazon Linux 2 소스 AMI 이름을 검색할 수 있습니다. 자세한 내용은 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에 있습니다.

기본적으로 에이전트 로그는 매시간 교체되며 최대 24개의 로그가 저장됩니다.

다음은 기본 에이전트 로깅 동작을 변경하는 데 사용할 수 있는 컨테이너 에이전트 구성 변수입니다. 자세한 내용은 Amazon ECS 컨테이너 에이전트 구성 섹션을 참조하세요.

ECS_LOGFILE

예제 값: /ecs-agent.log

Linux 기본값: Null

Windows 기본값: Null

에이전트 로그를 기록할 위치입니다. Amazon ECS 최적화 AMI를 사용할 때 기본 메서드인 ecs-init를 통해 에이전트를 실행 중인 경우 컨테이너 내 경로는 호스트의 /var/log/ecs/로 외부 지정되는 /logecs-init 탑재가 됩니다.

ECS_LOGLEVEL

예제 값: crit, error, warn, info, debug

Linux 기본값: info

Windows 기본값: info

기록할 세부 정보 수준입니다.

ECS_LOGLEVEL_ON_INSTANCE

예제 값:none ,crit ,error ,warn ,info debug

Linux에서의 기본값: ECS_LOG_DRIVER가 비어 있지 않은 값으로 명시적으로 설정된 경우에는 none이고, 그 외에는 ECS_LOGLEVEL과 동일한 값

Windows에서의 기본값: ECS_LOG_DRIVER가 비어 있지 않은 값으로 명시적으로 설정된 경우에는 none이고, 그 외에는 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

컨테이너 에이전트 로그 파일을 한 시간마다 교체할지 아니면 크기를 기준으로 교체할지 결정합니다. 기본적으로 에이전트 로그 파일은 한 시간마다 교체됩니다.

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"