View a markdown version of this page

대몬 태스크 정의 - Amazon Elastic Container Service

대몬 태스크 정의

대몬 태스크 정의는 대몬의 블루프린트입니다. Amazon ECS Managed Daemons는 표준 Amazon ECS 태스크 정의와는 다른 전용 대몬 태스크 정의 리소스를 사용합니다. 대몬 태스크 정의를 등록하여 대몬의 컨테이너 이미지, 리소스 요구 사항 및 구성을 지정합니다.

대몬 태스크 정의 생성

AWS Management Console 또는 AWS CLI를 사용하여 대몬 태스크 정의를 생성할 수 있습니다.

AWS Management Console 사용

  1. Amazon ECS 콘솔을 엽니다. 탐색 창에서 대몬 태스크 정의를 선택합니다.

  2. 새 대몬 태스크 정의 생성을 선택합니다.

  3. 대몬 태스크 정의 패밀리에 고유한 이름을 입력합니다. 이름에 최대 255자의 영숫자, 하이픈 및 밑줄이 포함될 수 있습니다.

  4. (선택 사항) 태스크 역할에서는 컨테이너에서 실행 중인 애플리케이션에 권한을 부여하는 IAM 역할을 선택합니다. 컨테이너가 AWS API를 호출하지 않는 경우 비워 둡니다.

  5. (선택 사항) 태스크 실행 역할에서 ecsTaskExecutionRole을 선택합니다. Amazon ECS에서 컨테이너 이미지를 가져오고 로그를 게시하려면 이 역할이 필요합니다.

  6. (선택 사항) 태스크 크기에서 대몬에 대해 예약할 CPU 및 메모리를 지정합니다. 예: 0.25 vCPU512 MB 메모리.

  7. 컨테이너 세부 정보 구성:

    • 컨테이너 이름 - 컨테이너 이름을 입력합니다. 이름에 최대 255자의 영숫자, 하이픈 및 밑줄이 포함될 수 있습니다.

    • 필수 컨테이너 - 를 선택합니다. 각 대몬 태스크 정의에는 하나 이상의 필수 컨테이너가 필요합니다. 필수 컨테이너에 장애가 발생하면 Amazon ECS는 전체 태스크를 중지합니다.

    • 이미지 URI - Docker 이미지 URI를 입력합니다. Amazon ECR 이미지를 찾아보거나 Docker Hub 또는 기타 레지스트리의 퍼블릭 이미지를 사용할 수 있습니다.

  8. (선택 사항) 필요한 경우 리소스 할당, 상태 확인, 환경 변수, 로그 수집 및 태그를 구성합니다.

  9. 구성을 검토하고 생성을 선택합니다.

AWS CLI 사용

JSON 파일을 생성하고 register-daemon-task-definition 명령을 사용하여 대몬 태스크 정의를 등록합니다.

예제 JSON 파일:

{ "family": "my-daemon-task", "containerDefinitions": [ { "name": "daemon-container", "image": "public.ecr.aws/docker/library/busybox:latest", "essential": true, "command": ["sh", "-c", "while true; do echo 'Daemon running'; sleep 30; done"], "memoryReservation": 512 } ] }

다음 명령을 실행하여 대몬 태스크 정의 등록:

aws ecs register-daemon-task-definition --cli-input-json file://daemon-taskdef.json

대몬 태스크 정의 파라미터

대몬 태스크 정의를 등록할 때 다음 파라미터를 사용할 수 있습니다.

필수 파라미터

  • family - 태스크 정의 패밀리 이름입니다. 동일한 대몬 태스크 정의의 여러 개정을 그룹화합니다.

  • containerDefinitions - 대몬 태스크의 컨테이너를 설명하는 DaemonContainerDefinition 객체 배열입니다.

선택적 파라미터

  • cpu - 태스크 수준 CPU 단위 문자열(예: "256").

  • memory - 태스크 수준 메모리 문자열(MiB 단위, 예: "512").

  • taskRoleArn - 대몬 태스크의 컨테이너에 권한을 부여하는 IAM 역할의 ARN입니다.

  • executionRoleArn - Amazon ECS 컨테이너 에이전트가 사용자를 대신하여 AWS API를 호출하는 데 사용하는 IAM 역할의 ARN입니다(예: Amazon ECR에서 이미지 가져오기).

  • volumesDaemonVolume 객체의 배열입니다. 대몬 볼륨은 hostsourcePath를 사용한 바인드 탑재만 지원합니다. 대몬 태스크 정의는 Amazon EBS, Amazon EFS, FSx for Windows File Server, Docker 볼륨 또는 임시 스토리지를 지원하지 않습니다.

  • tags - 대몬 태스크 정의에 태그를 지정하는 키-값 페어의 배열입니다.

  • pidMode - 대몬의 PID 네임스페이스 모드를 제어합니다.

  • ipcMode - 대몬의 IPC 네임스페이스 모드를 제어합니다.

네트워크 모드

대몬은 Amazon ECS가 자동으로 설정하는 특수 daemon_bridge 네트워크 모드를 사용합니다. 대몬 태스크 정의에서 네트워크 모드를 지정할 수 없습니다. 인스턴스의 모든 대몬은 단일 네트워크 네임스페이스를 공유하고 정적 대몬 브리지 IP 주소(IPv4의 경우 169.254.172.2, IPv6의 경우 fd00:ec2::172:2)를 통해 로컬에서 액세스할 수 있습니다. 애플리케이션 태스크(대몬이 아님)는 추가 네트워크 구성 없이 이 주소의 대몬과 통신할 수 있습니다.

대몬은 애플리케이션 태스크와는 별도의 네트워크 네임스페이스에서 실행되므로 대몬이 아닌 태스크는 대몬과의 포트 충돌에 대해 걱정할 필요가 없습니다. 하지만 모든 대몬 태스크는 동일한 네임스페이스를 공유하므로 동일한 인스턴스의 대몬은 동일한 포트에 바인딩할 수 없습니다. 여러 대몬을 배포할 때 각 대몬이 고유한 포트를 사용해야 합니다.

권한 있는 기능

Amazon ECS 관리형 인스턴스에서 대몬은 시스템 수준 작업에 대해 권한 있는 Linux 기능을 지원합니다. 보안 에이전트, 네트워크 모니터링 도구 및 관찰성 에이전트가 제대로 작동하려면 커널 수준 액세스가 필요한 경우가 많습니다.

다음 두 가지 방법으로 기능 권한을 부여할 수 있습니다.

전체 권한 모드는 컨테이너에 모든 Linux 기능을 부여합니다. 에이전트에 광범위한 시스템 액세스가 필요한 경우 이 옵션을 사용합니다.

{ "containerDefinitions": [{ "name": "security-daemon", "image": "my-security-agent:latest", "privileged": true }] }

개별 기능은 최소 권한 원칙에 따라 대몬에 필요한 권한만 부여합니다. linuxParameters.capabilities 필드를 사용하여 SYS_ADMIN, NET_ADMIN, SYS_PTRACE, BPF, PERFMON 등의 개별 기능을 추가합니다.

{ "containerDefinitions": [{ "name": "monitoring-daemon", "image": "my-monitoring-agent:latest", "linuxParameters": { "capabilities": { "add": ["NET_ADMIN", "SYS_PTRACE"] } } }] }

PID 및 IPC 네임스페이스 공유

Amazon ECS 관리형 인스턴스에서 대몬은 PID 및 IPC 네임스페이스 공유를 지원하여 애플리케이션 태스크 프로세스 또는 IPC 리소스에 대한 가시성이 필요한 보안 에이전트, 모니터링 도구 및 관찰성 대몬과 같은 사용 사례를 가능하게 합니다.

pidMode

유형: 문자열

필수 여부: 아니요

유효한 값: none | shared

기본값: none

대몬의 PID 네임스페이스 모드입니다. none이 지정되거나 값이 제공되지 않으면 대몬은 다른 태스크로부터 격리된 자체 PID 네임스페이스에서 실행됩니다. shared가 지정되면 대몬은 호스트 PID 네임스페이스에 조인하여 pidMode: "host"를 사용하는 비대몬 태스크나 pidMode: "shared"를 사용하는 다른 대몬에서 액세스할 수 있게 됩니다.

ipcMode

유형: 문자열

필수 여부: 아니요

유효한 값: none | shared

기본값: none

대몬의 IPC 네임스페이스 모드입니다. none이 지정되거나 값이 제공되지 않으면 대몬은 다른 태스크로부터 격리된 자체 IPC 네임스페이스에서 실행됩니다. shared가 지정되면 대몬은 호스트 IPC 네임스페이스에 조인하여 ipcMode: "host"를 사용하는 비대몬 태스크나 ipcMode: "shared"를 사용하는 다른 대몬에서 액세스할 수 있게 됩니다.

다음 예제는 PID 및 IPC 네임스페이스 공유가 모두 활성화된 대몬 태스크 정의를 보여줍니다.

{ "family": "my-monitoring-daemon", "pidMode": "shared", "ipcMode": "shared", "containerDefinitions": [ { "name": "monitoring-agent", "image": "public.ecr.aws/my-company/monitoring-agent:latest", "essential": true } ] }

pidModeshared로 설정된 대몬과 PID 네임스페이스를 공유하려면 비대몬 태스크는 태스크 정의에 pidMode: "host"를 지정해야 합니다. 이렇게 하면 태스크의 컨테이너가 대몬의 프로세스를 보고 프로세스 모니터링, 신호 전송 등의 사용 사례를 사용할 수 있습니다.

ipcModeshared로 설정된 대몬과 IPC 네임스페이스를 공유하려면 비대몬 태스크는 태스크 정의에 ipcMode: "host"를 지정해야 합니다. 이렇게 하면 태스크의 컨테이너가 공유 메모리 세그먼트, 메시지 대기열 등의 대몬의 IPC 리소스에 액세스할 수 있습니다.

볼륨

Managed Daemons는 sourcePath가 지정된 호스트 볼륨을 사용하는 바인드 탑재를 지원합니다. 이를 통해 대몬 컨테이너는 호스트 디렉터리를 탑재하여 기본 Amazon EC2 인스턴스의 로그, 지표 및 시스템 정보에 액세스할 수 있습니다. 로그 수집 에이전트, 지표 내보내기 및 보안 스캐너는 일반적으로 이를 사용하여 호스트 수준 데이터에 대한 가시성을 확보합니다.

대몬 태스크 정의는 sourcePath에서 호스트 볼륨 사양을 지원합니다. 대몬 볼륨은 기본 컨테이너 인스턴스의 수명 주기 동안 유지됩니다.

참고

Amazon EBS volumes, Amazon EFS volumes, FSx for Windows File Server 볼륨, Docker 볼륨 및 임시 스토리지는 대몬 태스트 정의에서 지원되지 않습니다.

참고

대몬은 서로 볼륨 공유를 지원하지 않습니다. 각 대몬은 자체 독립 볼륨 구성으로 작동합니다.

다음 예제는 바인드 탑재가 있는 로그 수집기 대몬을 보여줍니다.

{ "containerDefinitions": [{ "name": "log-collector", "image": "fluent/fluentd:latest", "mountPoints": [{ "sourceVolume": "var-log", "containerPath": "/var/log" }] }], "volumes": [{ "name": "var-log", "host": { "sourcePath": "/var/log" } }] }

지원되는 컨테이너 파라미터

대몬 컨테이너 정의에서 정의하는 파라미터:

  • image(필수) - 컨테이너 이미지 URI

  • name(필수) - 컨테이너 이름

  • cpu - 컨테이너용으로 예약된 CPU 단위

  • memory / memoryReservation - 하드 및 소프트 메모리 제한

  • essential - 컨테이너의 필수 여부(기본값: true)

  • command / entryPoint - 컨테이너 명령 또는 진입점 재정의

  • environment / environmentFiles / secrets - 환경 구성

  • privileged - 권한 있는 모드에서 컨테이너 실행

  • user - 컨테이너를 실행할 사용자

  • workingDirectory - 컨테이너 내부의 작업 디렉터리

  • readonlyRootFilesystem - 읽기 전용으로 루트 파일 시스템 탑재

  • mountPoints - 볼륨 탑재 지점(호스트 및 sourcePath 포함 바인드 탑재)

  • logConfiguration - 로깅 구성(awslogs, splunk, awsfirelens 지원)

  • healthCheck - 컨테이너 상태 확인 구성

  • dependsOn - 컨테이너 시작 종속성

  • ulimits - 리소스 제한

  • systemControls - 커널 파라미터

  • linuxParameters.capabilities - 추가 또는 삭제를 위한 Linux 기능

  • linuxParameters.initProcessEnabled - 컨테이너에서 init 프로세스 실행

  • repositoryCredentials - 프라이빗 레지스트리에 대한 자격 증명

  • restartPolicy - 컨테이너 재시작 정책