

# 콘솔을 사용하여 Amazon ECS 작업 정의 생성
<a name="create-task-definition"></a>

태스크 또는 서비스로 실행하는 애플리케이션을 정의할 수 있도록 태스크 정의를 생성합니다.

외부 시작 유형에 대한 작업 정의를 생성할 때 JSON 편집기를 사용하여 태스크 정의를 생성하고 `requireCapabilities` 파라미터를 `EXTERNAL`로 설정해야 합니다.

콘솔 환경을 사용하거나 JSON 파일을 지정하여 태스크 정의를 생성할 수 있습니다. JSON 편집기를 사용할 경우 Amazon Q에서 권장 사항을 제공하도록 할 수 있습니다. 자세한 내용은 [Amazon Q Developer를 사용하여 Amazon ECS 콘솔에서 태스크 정의 권장 사항 제공](using-amazon-q.md) 섹션을 참조하세요.

## JSON 검사기
<a name="json-validate-for-create"></a>

Amazon ECS 콘솔 JSON 편집기는 JSON 파일에서 다음 사항을 검사합니다.
+ 파일은 유효한 JSON 파일입니다.
+ 파일에 관련 없는 키는 없습니다.
+ 파일에 `familyName` 파라미터가 있습니다.
+ `containerDefinitions` 아래 하나 이상의 항목이 있습니다.

## CloudFormation 스택
<a name="cloudformation-stack"></a>

다음 동작은 2023년 1월 12일 이전에 새 Amazon ECS 콘솔에서 생성된 작업 정의에 적용됩니다.

작업 정의를 생성하면 Amazon ECS 콘솔은 이름이 `ECS-Console-V2-TaskDefinition-`으로 시작하는 CloudFormation 스택을 자동으로 생성합니다. AWS CLI 또는 AWS SDK를 사용하여 작업 정의를 등록 취소한 경우 작업 정의 스택을 수동으로 삭제해야 합니다. 자세한 정보는 *CloudFormation 사용 설명서*의 [스택 삭제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)를 참조하세요.

2023년 1월 12일 이후에 생성된 작업 정의에서는 CloudFormation 스택이 자동으로 생성되지 않습니다.

## 절차
<a name="create-task-procedure"></a>

------
#### [ Amazon ECS console ]

1. [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)에서 콘솔을 엽니다.

1. 탐색 창에서 **작업 정의**를 선택합니다.

1. **새 작업 정의 생성** 메뉴에서 **새 작업 정의 생성**을 선택합니다.

1. **태스크 정의 패밀리(Task definition family)**에서 태스크 정의에 대해 고유한 이름을 지정합니다.

1. **시작 유형**에서 애플리케이션 환경을 선택합니다. 콘솔 기본값은 **AWS Fargate**(서버리스)입니다. Amazon ECS는 이 값으로 작업 정의 파라미터가 인프라 유형에 유효한지 검증을 수행합니다.

1. **운영 체제/아키텍처(Operating system/Architecture)**에서 태스크에 사용할 운영 체제와 CPU 아키텍처를 선택합니다.

   64비트 ARM 아키텍처에서 작업을 실행하려면 **Linux/ARM64**를 선택합니다. 자세한 내용은 [런타임 플랫폼](task_definition_parameters.md#runtime-platform) 섹션을 참조하세요.

   Windows 컨테이너에서 **AWS Fargate** 작업을 실행하려면 지원되는 Windows 운영 체제를 선택합니다. 자세한 내용은 [운영 체제 및 아키텍처](fargate-tasks-services.md#fargate-task-os) 섹션을 참조하세요.

1. **태스크 크기(Task size)**에서 태스크용으로 예약할 CPU 및 메모리 값을 선정합니다. CPU 값은 vCPU로 지정되고 메모리는 GB로 지정됩니다.

   다음 표에서는 Fargate에서 호스팅되는 태스크에 대해 유효한 CPU와 메모리 조합을 보여줍니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/create-task-definition.html)

   EC2 인스턴스 또는 외부 인스턴스를 사용하는 태스크의 경우 지원되는 태스크 CPU 값은 128 CPU 유닛(0.125 vCPU)에서 196,608 CPU 유닛(192 vCPU) 사이입니다.

   메모리 값을 GB 단위로 지정하려면 값 뒤에 **GB**를 입력합니다. 예를 들어 **메모리 값**을 3GB로 설정하려면 **3GB**를 입력합니다.
**참고**  
Windows 컨테이너에 대해서는 태스크 레벨 CPU와 메모리 파라미터가 무시됩니다.

1. **네트워크 모드(Network mode)**에서 사용할 네트워크 모드를 선택합니다. 기본값은 **awsvpc** 모드입니다. 자세한 내용은 [Amazon ECS 작업 배치](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)를 참조하세요.

   **브리지**를 선택하는 경우 **포트 매핑** 아래 **호스트 포트**에 컨테이너용으로 예약할 컨테이너 인스턴스의 포트 번호를 입력합니다.

1. (선택 사항) **작업 역할** 섹션을 확장하여 작업에 대한 AWS Identity and Access Management(IAM) 역할을 구성합니다.

   1. **태스크 역할(Task role)**에서 태스크에 할당할 IAM 역할을 선택합니다. 작업 IAM 역할은 작업의 컨테이너에서 AWS API 작업을 직접 호출할 수 있는 권한을 제공합니다.

   1. **작업 실행 역할**에서 역할을 선택합니다.

      작업 실행 역할을 사용하는 경우에 대한 자세한 정보는 [Amazon ECS 태스크 실행 IAM 역할](task_execution_IAM_role.md)을 참조하세요. 역할이 필요하지 않은 경우 **없음**을 선택합니다.

1. (선택 사항) **작업 배치** 섹션을 확장하여 배치 제약 조건을 추가합니다. 작업 배치 제약 조건으로 기본 제공 또는 사용자 지정 속성을 사용하여 작업 배치에 사용되는 컨테이너 인스턴스를 필터링할 수 있습니다.

1. (선택 사항) **결함 주입** 섹션을 확장하여 결함 주입을 활성화합니다. 결함 주입을 사용하면 애플리케이션이 특정 장애 시나리오에 어떻게 대응하는지 테스트할 수 있습니다.

1. 태스크 정의에서 정의할 각 컨테이너에 대해 다음 단계를 수행합니다.

   1. **이름(Name)**에 컨테이너 이름을 입력합니다.

   1. **이미지 URI(Image URI)**에서 컨테이너를 시작하는 데 사용할 이미지를 지정합니다. Amazon ECR 퍼블릭 갤러리 레지스트리의 이미지는 Amazon ECR 퍼블릭 레지스트리 이름만 사용하여 지정할 수 있습니다. 예를 들어 `public.ecr.aws/ecs/amazon-ecs-agent:latest`가 지정되면 Amazon ECR 퍼블릭 갤러리에 호스팅되는 Amazon Linux 컨테이너가 사용됩니다. 다른 모든 리포지토리의 경우 `repository-url/image:tag` 또는 `repository-url/image@digest` 형식을 사용하여 리포지토리를 지정합니다.

   1. 이미지가 Amazon ECR 외부의 프라이빗 레지스트리에 있는 경우 **프라이빗 레지스트리**에서 **에서 프라이빗 레지스트리 인증**을 켭니다. 그런 다음 **Secrets Manager ARN 또는 이름**에 보안 암호의 Amazon 리소스 이름(ARN)을 입력합니다.

   1. **필수 컨테이너**에서 작업 정의에 두 개 이상의 컨테이너가 정의되어 있으면 해당 컨테이너를 필수로 간주할지를 지정할 수 있습니다. 컨테이너가 **필수**로 표시된 경우 해당 컨테이너가 중지되면 작업도 중지됩니다. 각 태스크 정의에는 하나 이상의 필수 컨테이너가 포함되어야 합니다.

   1. 포트 매핑을 통해 컨테이너는 호스트의 포트에 액세스하여 트래픽을 송수신할 수 있습니다. **포트 매핑(Port mappings)**에서 다음 중 하나를 수행합니다.
      + **awsvpc** 네트워크 모드를 사용하는 경우 **컨테이너 포트(Container port)**와 **프로토콜(Protocol)**에서 컨테이너에 사용할 포트 매핑을 선택합니다.
      + **bridge** 네트워크 모드를 사용하는 경우 **컨테이너 포트(Container port)**와 **프로토콜(Protocol)**에서 컨테이너에 사용할 포트 매핑을 선택합니다.

      **포트 매핑 추가(Add more port mappings)**를 선택하여 추가 컨테이너 포트 매핑을 더 지정합니다.

   1. 컨테이너에 루트 파일 시스템에 대한 읽기 전용 액세스를 부여하려면 **읽기 전용 루트 파일 시스템**에서 **읽기 전용**을 선택합니다.

   1. (선택 사항) **리소스 할당 제한**의 작업 수준 값과 다른 컨테이너 수준 CPU, GPU 및 메모리 제한을 정의하려면 다음을 수행합니다.
      + **CPU**에 Amazon ECS 컨테이너 에이전트가 컨테이너에 대해 예약하는 CPU 단위 수를 입력합니다.
      + **GPU**에 컨테이너 인스턴스의 GPU 단위 수를 입력합니다.

        GPU를 지원하는 Amazon EC2 인스턴스에는 GPU당 1개의 GPU 단위가 있습니다. 자세한 내용은 [GPU 워크로드에 대한 Amazon ECS 작업 정의](ecs-gpu.md) 섹션을 참조하세요.
      + **메모리 하드 제한**에 컨테이너에 표시할 메모리 크기를 GB 단위로 입력합니다. 컨테이너가 하드 제한 을 초과하려 하면 해당 컨테이너는 중지됩니다.
      + Docker 20.10.0 이상의 대몬은 컨테이너용으로 최소 6MiB의 메모리를 예약합니다. 그러므로 컨테이너에 대해 6MiB 미만의 메모리를 지정하지 마세요.

        Docker 19.03.13-ce 이하의 대몬은 컨테이너용으로 최소 4MiB의 메모리를 예약합니다. 그러므로 컨테이너에 대해 4MiB 미만의 메모리를 지정하지 마세요.
      + **메모리 소프트 제한**에 컨테이너용으로 예약할 메모리의 소프트 제한(GB)을 입력합니다.

        시스템 메모리가 경합하는 경우 Docker는 컨테이너 메모리를 이 소프트 제한으로 유지하려고 합니다. 작업 수준 메모리를 지정하지 않은 경우, **메모리 하드 제한** 및 **메모리 소프트 제한** 중 하나 또는 모두에 0이 아닌 정수를 지정해야 합니다. 둘 다 지정하는 경우 **메모리 하드 제한**은** 메모리 소프트 제한**보다 커야 합니다.

        이 기능은 Windows 컨테이너에서 지원되지 않습니다.

   1. (선택 사항)**환경 변수** 섹션을 확장하여 컨테이너에 삽입할 환경 변수를 지정합니다. 키-값 페어를 사용하여 개별적으로 환경 변수를 지정하거나 Amazon S3 버킷에서 호스팅되는 환경 변수 파일을 지정하여 배치 단위로 환경 변수를 지정할 수 있습니다. 환경 변수 파일의 형식을 지정하는 방법에 대한 자세한 내용은 [개별 환경 변수를 Amazon ECS 컨테이너로 전달](taskdef-envfiles.md) 섹션을 참조하세요.

      비밀 스토리지에 대한 환경 변수를 지정할 때 **키**에 보안 암호 이름을 입력합니다. 그런 다음 **ValueFrom**에 Systems Manager Parameter Store 보안 암호 또는 Secrets Manager 보안 암호의 전체 ARN을 입력합니다.

   1. (선택 사항) **로그 수집 사용(Use log collection)** 옵션을 선택하여 로그 구성을 지정합니다. 사용 가능한 로그 드라이버마다 지정할 로그 드라이버 옵션이 있습니다. 기본 옵션에서는 Amazon CloudWatch Logs로 컨테이너 로그를 전송합니다. 다른 로그 드라이버 옵션은 AWS FireLens를 사용하여 구성됩니다. 자세한 내용은 [Amazon ECS 로그를 AWS 서비스 또는 AWS Partner로 전송](using_firelens.md) 섹션을 참조하세요.

      다음은 각 컨테이너 로그 대상에 대한 자세한 설명입니다.
      + **Amazon CloudWatch** - CloudWatch Logs로 컨테이너 로그를 전송하도록 작업을 구성합니다. 사용자를 대신하여 CloudWatch 로그 그룹을 생성하는 기본 로그 드라이버 옵션이 제공됩니다. 다른 로그 그룹 이름을 지정하려면 드라이버 옵션 값을 변경합니다.
      + **Splunk로 로그 내보내기** - 컨테이너 로그를 원격 서비스로 보내는 Splunk 드라이버로 전송하도록 작업을 구성합니다. Splunk 웹 서비스에 대한 URL을 입력해야 합니다. Splunk 토큰은 민감한 데이터로 취급될 수 있으므로 보안 암호 옵션으로 지정됩니다.
      + **Amazon Data Firehose로 로그 내보내기** - Firehose로 컨테이너 로그를 전송하도록 작업을 구성합니다. Firehose 전송 스트림으로 로그를 전송하는 기본 로그 드라이버 옵션이 제공됩니다. 다른 전송 스트림 이름을 지정하려면 드라이버 옵션 값을 변경합니다.
      + **Amazon Kinesis Data Streams로 로그 내보내기** - Kinesis Data Streams로 컨테이너 로그를 전송하도록 작업을 구성합니다. Kinesis Data Streams 스트림으로 로그를 전송하는 기본 로그 드라이버 옵션이 제공됩니다. 다른 스트림 이름을 지정하려면 드라이버 옵션 값을 변경합니다.
      + **Amazon OpenSearch Service로 로그 내보내기** - OpenSearch Service 도메인으로 컨테이너 로그를 전송하도록 작업을 구성합니다. 로그 드라이버 옵션이 제공되어야 합니다.
      + **Amazon S3로 로그 내보내기** - Amazon S3 버킷으로 컨테이너 로그를 전송하도록 작업을 구성합니다. 기본 로그 드라이버 옵션이 제공되지만 유효한 Amazon S3 버킷 이름을 지정해야 합니다.

   1. (선택 사항) 추가 컨테이너 파라미터를 구성합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/create-task-definition.html)

   1. (선택 사항) **컨테이너 추가(Add more containers)**를 선택하여 컨테이너를 태스크 정의에 더 추가합니다.

1. (선택 사항) **스토리지(Storage)** 섹션은 Fargate에 호스팅되는 작업에 대한 임시 스토리지 크기를 확장하는 데 사용됩니다. 이 섹션을 사용하여 작업에 대한 데이터 볼륨 구성을 추가할 수도 있습니다.

   1. Fargate 태스크에 대한 20 gibibytes (GiB)의 기본값인 이상으로 사용 가능한 임시 스토리지를 확장하려면 **양(Amount)**에서 값을 최대 200 GiB으로 지정합니다.

1. (선택 사항) 작업 정의에 대한 데이터 볼륨 구성을 추가하려면 **볼륨 추가**를 선택하고 다음 단계를 수행합니다.

   1. **볼륨 이름(Volume name)**에서 데이터 볼륨의 이름을 입력합니다. 데이터 볼륨 이름은 컨테이너 탑재 지점을 생성할 때 사용됩니다.

   1. **볼륨 구성**의 경우 작업 정의를 생성할 때 볼륨을 구성할지 또는 배포 중에 볼륨을 구성할지 여부를 선택합니다.
**참고**  
작업 정의를 생성할 때 구성할 수 있는 볼륨으로, 바인드 탑재, Docker, Amazon EFS 및 Amazon FSx for Windows File Server가 있습니다. 배포 시, 작업을 실행할 때 또는 서비스를 생성하거나 업데이트할 때 구성할 수 있는 볼륨으로, Amazon EBS가 있습니다.

   1. **볼륨 유형**에서 선택한 구성 유형과 호환되는 볼륨 유형을 선택하고 볼륨 유형을 구성합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/create-task-definition.html)

1. 다른 컨테이너의 볼륨을 추가하려면 **다음 위치에서 볼륨 추가**를 선택하고 다음을 구성합니다.
   + **컨테이너**에서 컨테이너를 선택합니다.
   + **소스**에서 마운트하려는 볼륨이 있는 컨테이너를 선택합니다.
   + **읽기 전용**에서 컨테이너에 볼륨에 대한 읽기 전용 액세스가 부여되는지 선택합니다.

1. (선택 사항) AWS Distro for OpenTelemetry 통합을 사용하여 애플리케이션 추적 및 지표 수집 설정을 구성하려면 **모니터링**을 확장하고 **지표 수집 사용**을 선택하여 작업에 대한 지표를 수집하고 Amazon CloudWatch 또는 Amazon Managed Service for Prometheus로 전송합니다. 이 옵션을 선택하면 Amazon ECS는 애플리케이션 지표를 전송하도록 미리 구성된 AWS Distro for OpenTelemetry 컨테이너 사이드카를 생성합니다. 자세한 내용은 [애플리케이션 지표를 사용하여 Amazon ECS 애플리케이션 성능 상호 연관](metrics-data.md) 섹션을 참조하세요.

   1. **Amazon CloudWatch**를 선택하면 사용자 정의 애플리케이션 지표가 CloudWatch에 사용자 정의 지표로 라우팅됩니다. 자세한 정보는 [Amazon CloudWatch로 애플리케이션 지표 내보내기](application-metrics-cloudwatch.md)을 참조하세요.
**중요**  
Amazon CloudWatch로 애플리케이션 지표를 내보낼 때 필요한 권한이 있는 태스크 IAM 역할이 태스크 정의에 필요합니다. 자세한 정보는 [AWS Distro for OpenTelemetry와 Amazon CloudWatch 통합에 필요한 IAM 권한](application-metrics-cloudwatch.md#application-metrics-cloudwatch-iam)을 참조하세요.

   1. **Amazon Managed Service for Prometheus(Prometheus 라이브러리 계측)(Amazon Managed Service for Prometheus (Prometheus libraries instrumentation))**를 선택하면 태스크 수준 CPU, 메모리, 네트워크 및 스토리지 지표와 사용자 정의 애플리케이션 지표가 Amazon Managed Service for Prometheus로 라우팅됩니다. **작업 스페이스 원격 쓰기 엔드포인트**에서 Prometheus 작업 영역에 대한 원격 쓰기 엔드포인트 URL을 입력합니다. **스크레이핑 대상**에서 AWS Distro for OpenTelemetry 수집기가 지표 데이터를 스크레이핑하는 데 사용할 수 있는 호스트와 포트를 입력합니다. 자세한 내용은 [Amazon Managed Service for Prometheus로 애플리케이션 지표 내보내기](application-metrics-prometheus.md) 섹션을 참조하세요.
**중요**  
Amazon Managed Service for Prometheus로 애플리케이션 지표를 내보낼 때 필요한 권한이 있는 태스크 IAM 역할이 태스크 정의에 필요합니다. 자세한 내용은 [AWS Distro for OpenTelemetry와 Amazon Managed Service for Prometheus 통합에 필요한 IAM 권한](application-metrics-prometheus.md#application-metrics-prometheus-iam) 섹션을 참조하세요.

   1. **Amazon Managed Service for Prometheus(OpenTelemetry 계측)**를 선택하면 작업 수준 CPU, 메모리, 네트워크 및 스토리지 지표와 사용자 정의 애플리케이션 지표가 Amazon Managed Service for Prometheus로 라우팅됩니다. **작업 스페이스 원격 쓰기 엔드포인트**에서 Prometheus 작업 영역에 대한 원격 쓰기 엔드포인트 URL을 입력합니다. 자세한 내용은 [Amazon Managed Service for Prometheus로 애플리케이션 지표 내보내기](application-metrics-prometheus.md) 섹션을 참조하세요.
**중요**  
Amazon Managed Service for Prometheus로 애플리케이션 지표를 내보낼 때 필요한 권한이 있는 태스크 IAM 역할이 태스크 정의에 필요합니다. 자세한 정보는 [AWS Distro for OpenTelemetry와 Amazon Managed Service for Prometheus 통합에 필요한 IAM 권한](application-metrics-prometheus.md#application-metrics-prometheus-iam)을 참조하세요.

1. (선택 사항) **태그(Tags)** 섹션을 확장하여 태그를 키-값 페어로 태스크 정의에 추가합니다.
   + [태그 추가] **태그 추가**를 선택하고 다음을 수행합니다.
     + **키**에서 키 이름을 입력합니다.
     + **값**에 키 값을 입력합니다.
   + [태그 제거] 태그 옆에 있는 **태그 제거**를 선택합니다.

1. **생성**을 선택하여 작업 정의를 등록합니다.

------
#### [ Amazon ECS console JSON editor ]

1. [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)에서 콘솔을 엽니다.

1. 탐색 창에서 **작업 정의**를 선택합니다.

1. **새 작업 정의 생성** 메뉴에서 **JSON으로 새 작업 정의 생성**을 선택합니다.

1. JSON 편집기 상자에서 JSON 파일을 편집합니다.

   JSON은 에 지정된 유효성 검사를 통과해야[JSON 검사기](#json-validate-for-create) 합니다.

1. **생성(Create)**을 선택합니다.

------