

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 작업 정의
<a name="job_definitions"></a>

AWS Batch 작업 정의는 작업 실행 방법을 지정합니다. 각 작업은 작업 정의를 참조해야 하는 반면, 작업 정의에 지정된 대부분의 파라미터는 실행 시간에 재정의될 수 있습니다.

작업 정의에 지정되는 일부 속성은 다음과 같습니다.
+ 작업의 컨테이너에 사용할 도커 이미지
+ 컨테이너에 사용할 vCPU 수와 메모리 크기
+ 컨테이너 시작 시 컨테이너가 실행할 명령
+ 컨테이너 시작 시 컨테이너로 전달할 환경 변수(있는 경우)
+ 컨테이너에 사용해야 할 데이터 볼륨
+ 작업에서 AWS 권한에 사용해야 하는 IAM 역할(있는 경우).

**Topics**
+ [단일 노드 작업 정의 생성](create-job-definition.md)
+ [다중 노드 병렬 작업 정의 생성](create-multi-node-job-def.md)
+ [ContainerProperties를 사용하는 작업 정의 템플릿](job-definition-template.md)
+ [EcsProperties를 사용하여 작업 정의 생성](multi-container-jobs.md)
+ [awslogs 로그 드라이버 사용](using_awslogs.md)
+ [민감한 데이터 지정](specifying-sensitive-data.md)
+ [작업에 대한 프라이빗 레지스트리 인증](private-registry.md)
+ [Amazon EFS 볼륨](efs-volumes.md)
+ [작업 정의 예](example-job-definitions.md)

# 단일 노드 작업 정의 생성
<a name="create-job-definition"></a>

에서 작업을 실행하려면 먼저 작업 정의를 생성 AWS Batch해야 합니다. 이 프로세스는 단일 노드 작업과 다중 노드 병렬 작업 간에 약간 다릅니다. 이 주제에서는 특히 다중 노드 병렬 작업(*그룹 스케줄*링이라고도 함)이 아닌 AWS Batch 작업에 대한 작업 정의를 생성하는 방법을 다룹니다.

Amazon Elastic Container 리소스에서 다중 노드 병렬 작업 정의를 생성하려면 다음을 수행합니다. 자세한 내용은 [다중 노드 병렬 작업 정의 생성](create-multi-node-job-def.md) 단원을 참조하십시오.

**Topics**
+ [Amazon EC2 리소스에 단일 노드 작업 정의 생성](create-job-definition-EC2.md)
+ [Fargate 리소스에 단일 노드 작업 정의 생성](create-job-definition-Fargate.md)
+ [Amazon EKS 리소스에 단일 노드 작업 정의 생성](create-job-definition-eks.md)
+ [Amazon EC2 리소스에 다중 컨테이너에 대한 단일 노드 작업 정의 생성](create-job-definition-single-node-multi-container.md)

# Amazon EC2 리소스에 단일 노드 작업 정의 생성
<a name="create-job-definition-EC2"></a>

Amazon Elastic Compute Cloud(Amazon EC2) 리소스에서 단일 노드 작업 정의를 생성하려면 다음 단계를 완료합니다.

**Amazon EC2 리소스에 새 작업 정의를 생성하려면**

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) AWS Batch 콘솔을 엽니다.

1. 탐색 모음에서 사용할 AWS 리전 를 선택합니다.

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

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

1. **오케스트레이션 유형**으로 **Amazon Elastic Compute Cloud(Amazon EC2)**를 선택합니다.

1. **EC2 플랫폼 구성**의 경우 **다중 노드 병렬 처리 활성화**를 끕니다.

1. **이름(Name)**에 고유한 작업 정의 이름을 입력합니다. 각 이름의 최대 길이는 128자입니다. 대문자 및 소문자, 숫자, 하이픈(-) 및 밑줄(\$1)을 포함할 수 있습니다.

1. (선택 사항) **실행 제한 시간**에 제한 시간 값(초)을 입력합니다. 실행 제한 시간은 완료되지 않은 작업이 종료되기까지의 시간입니다. 시도가 제한 시간을 초과하면 중지되고 상태가 `FAILED`(으)로 변경됩니다. 자세한 내용은 [작업 제한 시간](job_timeouts.md) 단원을 참조하십시오. 최솟값은 60초입니다.

1. (선택 사항) **예약 우선 순위**를 켭니다. 0에서 100 사이의 예약 우선 순위 값을 입력합니다. 값이 높을수록 우선 순위가 높습니다.

1. (선택 사항) **작업 시도**의 경우 작업을 `RUNNABLE` 상태로 이동하려는 AWS Batch 시도 횟수를 입력합니다. 1\$110 사이의 숫자를 입력합니다.

1. (선택 사항) **재시도 전략 조건**의 경우 **종료 시 평가 추가**를 선택합니다. 파라미터 값을 하나 이상 입력한 다음 **작업**을 선택합니다. 각 조건 세트에 대해 **작업**을 **재시도** 또는 **종료**로 설정해야 합니다. 이러한 작업은 다음을 의미합니다.
   + **재시도** - 지정한 작업 시도 횟수에 도달할 때까지 AWS Batch 재시도합니다.
   + **종료** - 작업 재시도를 AWS Batch 중지합니다.
**중요**  
**종료 시 평가 추가**를 선택한 경우 하나 이상의 파라미터를 구성하고 **작업**을 선택하거나 **종료 시 평가 제거**를 선택해야 합니다.

1. (선택 사항) **태그**를 확장한 다음 **태그 추가**를 선택하여 리소스에 태그를 추가합니다. 키와 선택 값을 입력하고 **태그 추가**를 선택합니다.

1. (선택 사항) 작업 및 작업 정의에서 Amazon ECS 작업으로 태그를 전파하려면 **태그 전파**를 활성화합니다.

1. **다음 페이지**를 선택합니다.

1. **컨테이너 구성** 섹션에서:

   1. **이미지**에서 작업에 사용할 Docker 이미지를 선택합니다. 기본적으로 Docker Hub 레지스트리 내 이미지는 사용 가능합니다. 또한 `repository-url/image:tag`(을)를 사용하여 다른 리포지토리를 지정할 수도 있습니다. 각 이름의 최대 길이는 225자입니다. 여기에는 대문자와 소문자, 숫자, 하이픈(-), 밑줄(\$1), 콜론(:), 슬래시(/) 및 숫자 기호(\$1)를 사용할 수 있습니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Image`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `IMAGE` 파라미터로 매핑됩니다.
**참고**  
도커 이미지 아키텍처는 예정된 컴퓨팅 리소스의 프로세서 아키텍처와 일치해야 합니다. 예를 들어 ARM 기반 Docker 이미지는 ARM 기반 컴퓨팅 리소스에서만 실행할 수 있습니다.
      + Amazon ECR Public 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 또는 `registry/repository[@digest]` 명명 규칙을 사용합니다(예: `public.ecr.aws/registry_alias/my-web-app:latest`).
      + Amazon ECR 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 명명 규칙을 사용합니다 (예: `aws_account_id.dkr.ecr.region.amazonaws.com``/my-web-app:latest`).
      + Docker Hub의 공식 리포지토리 안의 이미지는 단일 이름을 사용합니다(예: `ubuntu` 또는 `mongo`).
      + Docker Hub 다른 리포지토리에 저장된 이미지는 조직 이름으로 한정됩니다(예: `amazon/amazon-ecs-agent`).
      + 다른 온라인 리포지토리 안의 이미지는 도메인 이름을 사용하여 추가로 한정됩니다(예: `quay.io/assemblyline/ubuntu`).

   1. **명령**에서 필드에 명령을 **JSON** 문자열 배열 형식으로 입력합니다.

      이 파라미터는 [도커 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Cmd`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `COMMAND` 파라미터로 매핑됩니다. Docker `CMD` 파라미터에 대한 자세한 정보는 [https://docs.docker.com/engine/reference/builder/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)를 참조하세요.
**참고**  
사용자는 명령에 파라미터 대체 및 자리 표시자 기본값을 사용할 수 있습니다. 자세한 내용은 [Parameters](job_definition_parameters.md#parameters) 단원을 참조하십시오.

   1. (선택 사항) **실행 역할**에서 Amazon ECS 컨테이너 에이전트에게 사용자를 대신하여 AWS API를 호출할 수 있는 권한을 부여하는 IAM 역할을 지정합니다. 이 기능은 Amazon ECS IAM 역할을 작업에 사용합니다. 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 작업 실행 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) 섹션을 참조하세요.

   1. **작업 역할 구성**에서 AWS APIs에 대한 권한이 있는 IAM 역할을 선택합니다. 이 기능은 Amazon ECS IAM 역할을 작업에 사용합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [태스크에 대한 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)을 참조하세요.
**참고**  
**Amazon Elastic Container Service 태스크 역할** 신뢰 관계를 보유한 역할만 여기 표시됩니다. AWS Batch 작업에 대한 IAM 역할 생성에 대한 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [작업에 대한 IAM 역할 및 정책 생성을 참조하세요](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role).

1. **파라미터**의 경우 **파라미터 추가**를 선택하여 파라미터 대체 플레이스홀더를 **키** 및 **값**(선택 사항) 페어로 추가합니다.

1. **환경 구성** 섹션에서:

   1. **vCPU**에서 컨테이너에 예약할 vCPU 수를 지정합니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `CpuShares`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--cpu-shares` 옵션에 매핑됩니다. 각 vCPU는 1,024개의 CPU 공유와 동일합니다. vCPU를 최소 하나 이상 지정해야 합니다.

   1. **메모리**에는 컨테이너에 사용할 수 있는 메모리 한도를 입력합니다. 컨테이너가 여기서 지정된 메모리 용량을 초과하면 해당 컨테이너가 중지됩니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Memory`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--memory` 옵션에 매핑됩니다. 한 작업에 대해 메모리를 최소한 4MiB 지정해야 합니다.
**참고**  
리소스 사용률을 극대화하려면 특정 인스턴스 유형의 작업에 메모리 우선 순위를 지정합니다. 자세한 내용은 [컴퓨팅 리소스 메모리 관리](memory-management.md) 단원을 참조하십시오.

   1. **GPU 개수**에서 컨테이너에 예약할 GPU의 개수를 선택합니다.

   1. (선택 사항) **환경 변수**의 경우 **환경 변수 추가**를 선택하여 환경 변수를 이름-값 쌍으로 추가합니다. 이러한 변수는 컨테이너로 전달됩니다.

   1. (선택 사항) **암호**의 경우 **암호 추가**를 선택하여 암호를 이름-값 쌍으로 추가합니다. 이러한 보안 암호는 컨테이너에 노출됩니다. 자세한 내용은 [LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)를 참조하세요.

1. **다음 페이지**를 선택합니다.

1. **Linux 구성** 섹션에서:

   1. **User(사용자)**에서 컨테이너 내부에서 사용할 사용자 이름을 입력합니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `User`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--user` 옵션에 매핑됩니다.

   1. (선택 사항) 호스트 인스턴스에 대한 상위 권한을 작업 컨테이너에 부여하려면 (`root` 사용자와 유사) **권한이 있음** 슬라이더를 오른쪽으로 드래그합니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Privileged`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--privileged` 옵션에 매핑됩니다.

   1. (선택 사항) 컨테이너 내에서 `init` 프로세스를 실행하려면 **init 프로세스 활성화**를 켭니다. 이 프로세스는 신호를 전달하고 결과를 받아들입니다.

1. (선택 사항) **파일 시스템 구성** 섹션에서:

   1. **읽기 전용 파일 시스템 활성화**를 켜서 볼륨에 대한 쓰기 권한을 제거합니다.

   1. **공유 메모리 크기**에 `/dev/shm` 볼륨의 크기(MiB)를 입력합니다.

   1. **최대 스왑 크기**에는 컨테이너가 사용할 수있는 총 스왑 메모리 양(MiB)을 입력합니다.

   1. **스왑 활용도**의 경우 컨테이너의 스왑 동작을 나타내는 값을 0에서 100 사이의 값으로 입력합니다. 값을 지정하지 않고 스와핑이 활성화된 경우 기본값 60이 사용됩니다. 자세한 내용은 [LinuxParameters:swappiness](https://docs.aws.amazon.com/batch/latest/APIReference/API_LinuxParameters.html#Batch-Type-LinuxParameters-swappiness)를 참조하세요.

   1. (선택 사항) **추가 구성**을 확장합니다.

   1. (선택 사항) **Tmpfs**의 경우 **tmpfs 추가**를 선택하여 `tmpfs` 마운트를 추가합니다.

   1. (선택 사항) **디바이스**의 경우 **디바이스 추가**를 선택하여 장치를 추가합니다.

      1. **컨테이너 경로**에 호스트 인스턴스에 매핑된 디바이스를 노출할 컨테이너 인스턴스의 경로를 지정합니다. 이 필드를 비워두면 호스트 경로가 컨테이너에 사용됩니다.

      1. **호스트 경로**에 호스트 인스턴스의 디바이스 경로를 지정합니다.

      1. **권한**에서 디바이스에 적용할 권한을 하나 이상 선택합니다. 사용 가능한 권한은 **읽기**, **쓰기** 및 **MKNOD입니다**.

   1. (선택 사항) **볼륨 구성**의 경우 **볼륨 추가**를 선택하여 컨테이너에 전달할 볼륨 목록을 생성합니다. 볼륨의 **이름** 및 **소스 경로**를 입력한 다음 **볼륨 추가**를 선택합니다. 또한 **EFS 활성화**를 켜도록 선택할 수도 있습니다.

   1. (선택 사항) **마운트 포인트**의 경우 **마운트 포인트 구성 추가**를 선택하여 데이터 볼륨의 마운트 포인트를 추가합니다. 소스 볼륨과 컨테이너 경로를 지정해야 합니다. 이러한 마운트 포인트는 컨테이너 인스턴스의 Docker daemon에 전달됩니다. 볼륨을 **읽기 전용**으로 설정할 수도 있습니다.

   1. (선택 사항) **Ulimits 구성**의 경우 **ulimit 추가**를 선택하여 컨테이너에 `ulimits` 값을 추가합니다. **이름**, **소프트 제한**, **하드 제한** 값을 입력한 다음 **ulimit 추가**를 선택합니다.

1. **작업 속성** 섹션에서:

   1. **실행 역할 - 조건부**에서 Amazon ECS 에이전트가 사용자를 대신하여 AWS API를 호출할 수 있도록 허용하는 역할을 선택합니다. **실행 역할** 생성에 대한 자세한 내용은 [자습서: IAM 실행 역할 생성](create-execution-role.md) 섹션을 참조하세요.

   1. **ECS 실행 명령**을 선택하여 Amazon ECS 컨테이너 쉘에 대한 직접 액세스를 허용하고 호스트 OS를 우회합니다. **태스크 역할**을 선택해야 합니다.
**중요**  
**ECS 실행** 명령을 사용하려면 파일 시스템에 대한 쓰기 권한이 있어야 합니다.

   1. **작업 역할**에서 Amazon ECS Identity and Access Management(IAM) 역할을 선택하여 컨테이너가 사용자를 대신하여 AWS API를 호출하도록 허용합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 태스크 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)을 참조하세요.

1. (선택 사항)**로깅 구성** 섹션에서:

   1. **로그 드라이버**에서 사용할 로그 드라이버를 선택합니다. 사용 가능한 로그 드라이버에 대한 자세한 내용은 [LogConfiguration:logDriver](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-logDriver)를 참조하세요.
**참고**  
기본적으로 `awslogs` 로그 드라이버가 사용됩니다.

   1. **옵션**에서 **옵션 추가**를 선택하여 옵션을 추가합니다. 이름-값 쌍을 입력한 다음 **옵션 추가**를 선택합니다.

   1. **암호**에서 **암호 추가**를 선택합니다. 이름-값 페어를 입력한 다음 **암호 추가**를 선택하여 암호를 추가합니다.
**작은 정보**  
자세한 내용은 [LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)를 참조하세요.

1. **다음 페이지**를 선택합니다.

1. **작업 정의 검토**에서 구성 단계를 검토하세요. 변경해야 하는 경우 **편집**을 선택합니다 작업을 마쳤으면 **작업 정의 생성**을 선택합니다.

# Fargate 리소스에 단일 노드 작업 정의 생성
<a name="create-job-definition-Fargate"></a>

다음 단계를 완료하여 AWS Fargate 리소스에 대한 단일 노드 작업 정의를 생성합니다.

**Fargate 리소스에서 새 작업 정의를 생성하려면**

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) AWS Batch 콘솔을 엽니다.

1. 상단 탐색 모음에서 사용할 AWS 리전 를 선택합니다.

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

1. **생성**을 선택합니다.

1. **오케스트레이션 유형**에서 **Fargate**를 선택합니다. 자세한 내용은 [Fargate 컴퓨팅 환경](fargate.md) 단원을 참조하십시오.

1. **이름(Name)**에 고유한 작업 정의 이름을 입력합니다. 각 이름의 최대 길이는 128자입니다. 대문자 및 소문자, 숫자, 하이픈(-) 및 밑줄(\$1)을 포함할 수 있습니다.

1. (선택 사항) **실행 제한 시간**에 제한 시간 값(초)을 입력합니다. 실행 제한 시간은 완료되지 않은 작업이 종료되기까지의 시간입니다. 시도가 제한 시간을 초과하면 중지되고 상태가 `FAILED`(으)로 변경됩니다. 자세한 내용은 [작업 제한 시간](job_timeouts.md) 단원을 참조하십시오. 최솟값은 60초입니다.

1. (선택 사항) **예약 우선 순위**를 켭니다. 0에서 100 사이의 예약 우선 순위 값을 입력합니다. 값이 높을수록 낮은 값보다 우선 순위가 높습니다.

1. (선택 사항) **태그**를 확장한 다음, **태그 추가**를 선택하여 리소스에 태그를 추가합니다. 작업 및 작업 정의의 태그를 전파하려면 **태그 전파 시작**을 켭니다.

1. **Fargate 플랫폼 구성** 섹션에서:

   1. **런타임 플랫폼**에서 컴퓨팅 환경 아키텍처를 선택합니다.

   1. **운영 체제 제품군**에서 컴퓨팅 환경의 운영 체제를 선택합니다.

   1. **CPU 아키텍처**에서 vCPU 아키텍처를 선택합니다.

   1. **Fargate 플랫폼 버전**에서 `LATEST` 또는 특정 런타임 환경 버전을 입력합니다.

   1. (선택 사항)**퍼블릭 IP 할당**을 켜서 Fargate 작업 네트워크 인터페이스에 퍼블릭 IP 주소를 할당합니다. 프라이빗 서브넷에서 실행 중인 작업의 경우 프라이빗 서브넷에 인터넷으로 아웃바운드 트래픽을 라우팅할 NAT 게이트웨이가 연결되어 있어야 합니다. 컨테이너 이미지를 가져올 수 있도록 이 작업을 수행하는 것이 좋습니다. 자세한 내용은 **Amazon Elastic Container Service 개발자 안내서의 [Amazon ECS 작업 네트워킹](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html)을 참조하세요.

   1. (선택 사항)**임시 스토리지**에 태스크에 할당할 임시 스토리지의 양을 입력합니다. 임시 스토리지의 용량은 21GiB에서 200GiB 사이여야 합니다. 값을 입력하지 않으면 기본적으로 20GiB의 임시 스토리지가 할당됩니다.
**참고**  
임시 스토리지에는 Fargate 플랫폼 버전 1.4 이상이 필요합니다.

   1. **실행 역할**에서 Amazon ECS 컨테이너 및 Fargate 에이전트에게 사용자를 대신하여 AWS API를 호출할 수 있는 권한을 부여하는 IAM 역할을 지정합니다. 이 기능은 태스크 기능에 Amazon ECS IAM 역할을 사용합니다. 구성 사전 조건을 포함하여 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 작업 실행 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)을 참조하세요.

   1. **작업 시도**에 AWS Batch 이 작업을 `RUNNABLE` 상태로 전환하기 시도하는 횟수를 입력합니다. 1\$110 사이의 숫자를 입력합니다.

   1. (선택 사항) **재시도 전략 조건**의 경우 **종료 시 평가 추가**를 선택합니다. 파라미터 값을 하나 이상 입력한 다음 **작업**을 선택합니다. 각 조건 세트에 대해 **작업**을 **재시도** 또는 **종료**로 설정해야 합니다. 이러한 작업은 다음을 의미합니다.
      + **재시도** - 지정한 작업 시도 횟수에 도달할 때까지 AWS Batch 재시도합니다.
      + **종료** - 작업 재시도를 AWS Batch 중지합니다.
**중요**  
**종료 시 평가 추가**를 선택한 경우 하나 이상의 파라미터를 구성하고 **작업**을 선택하거나 **종료 시 평가 제거**를 선택해야 합니다.

1. **다음 페이지**를 선택합니다.

1. **컨테이너 구성** 섹션에서:

   1. **이미지**에서 작업에 사용할 도커 이미지를 선택합니다. 기본적으로 Docker Hub 레지스트리 내 이미지는 사용 가능합니다. 또한 `repository-url/image:tag`(을)를 사용하여 다른 리포지토리를 지정할 수도 있습니다. 각 이름의 최대 길이는 225자입니다. 대문자와 소문자, 숫자, 하이픈(-), 밑줄(\$1), 콜론(:), 마침표(.), 슬래시(/) 및 숫자 기호(\$1)를 포함할 수 있습니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Image`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `IMAGE` 파라미터로 매핑됩니다.
**참고**  
도커 이미지 아키텍처는 예정된 컴퓨팅 리소스의 프로세서 아키텍처와 일치해야 합니다. 예를 들어 ARM 기반 Docker 이미지는 ARM 기반 컴퓨팅 리소스에서만 실행할 수 있습니다.
      + Amazon ECR Public 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 또는 `registry/repository[@digest]` 명명 규칙을 사용합니다(예: `public.ecr.aws/registry_alias/my-web-app:latest`).
      + Amazon ECR 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 명명 규칙을 사용합니다 (예: `aws_account_id.dkr.ecr.region.amazonaws.com``/my-web-app:latest`).
      + Docker Hub의 공식 리포지토리 안의 이미지는 단일 이름을 사용합니다(예: `ubuntu` 또는 `mongo`).
      + Docker Hub 다른 리포지토리에 저장된 이미지는 조직 이름으로 한정됩니다(예: `amazon/amazon-ecs-agent`).
      + 다른 온라인 리포지토리 안의 이미지는 도메인 이름을 사용하여 추가로 한정됩니다(예: `quay.io/assemblyline/ubuntu`).

   1. **명령**에서 필드에 명령을 JSON 문자열 배열 형식으로 입력합니다.

      이 파라미터는 [도커 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Cmd`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `COMMAND` 파라미터로 매핑됩니다. Docker `CMD` 파라미터에 대한 자세한 정보는 [https://docs.docker.com/engine/reference/builder/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)를 참조하세요.
**참고**  
사용자는 명령에 파라미터 대체 및 자리 표시자 기본값을 사용할 수 있습니다. 자세한 내용은 [Parameters](job_definition_parameters.md#parameters) 단원을 참조하십시오.

   1. (선택 사항)작업 정의에 파라미터를 이름-값 매핑으로 추가하여 작업 정의 기본값을 재정의합니다. 파라미터를 추가하려면

      1. **파라미터**에서 **파라미터 추가**를 선택하고 이름-값 쌍을 입력한 다음 **파라미터 추가**를 선택합니다.
**중요**  
**파라미터 추가**를 선택한 경우 하나 이상의 파라미터를 구성하거나 **파라미터 제거**를 선택해야 합니다.

   1. **환경 구성** 섹션에서:

      

      1. **작업 역할 구성**에서 AWS APIs에 대한 권한이 있는 IAM 역할을 선택합니다. 이 기능은 태스크 기능에 Amazon ECS IAM 역할을 사용합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [태스크에 대한 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)을 참조하세요.
**참고**  
**Amazon Elastic Container Service 태스크 역할** 신뢰 관계를 보유한 역할만 여기 표시됩니다. AWS Batch 작업에 대한 IAM 역할을 생성하는 방법에 대한 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [작업에 대한 IAM 역할 및 정책 생성을 참조하세요](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role).

      1. **vCPU**에서 컨테이너에 예약할 vCPU 수를 지정합니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `CpuShares`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--cpu-shares` 옵션에 매핑됩니다. 각 vCPU는 1,024개의 CPU 공유와 동일합니다. vCPU를 최소 하나 이상 지정해야 합니다.

      1. **메모리**에는 컨테이너에 사용할 수 있는 메모리 한도를 입력합니다. 컨테이너가 여기에 지정된 메모리를 초과하려 하면 해당 컨테이너가 중지됩니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Memory`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--memory` 옵션에 매핑됩니다. 한 작업에 대해 메모리를 최소한 4MiB 지정해야 합니다.

         GuardDuty Runtime Monitoring을 사용하는 경우 GuardDuty 보안 에이전트에 약간의 메모리 오버헤드가 있습니다. 따라서 메모리 제한에 GuardDuty 보안 에이전트의 크기가 포함되어야 합니다. GuardDuty 보안 에이전트 메모리 제한에 대한 자세한 내용은 GuardDuty 사용 설명서의 [CPU and memory limits](https://docs.aws.amazon.com/guardduty/latest/ug/prereq-runtime-monitoring-ecs-support.html#ecs-runtime-agent-cpu-memory-limits)를 참조하세요.** 모범 사례에 대한 자세한 내용은 *Amazon ECS 개발자 안내서*의 [런타임 모니터링을 활성화한 후 Fargate 작업에서 메모리 오류를 해결하는 방법](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-guard-duty-troubleshooting.html#memory-error)을 참조하세요.
**참고**  
리소스 사용률을 극대화하려면 특정 인스턴스 유형의 작업에 메모리 우선 순위를 지정합니다. 자세한 내용은 [컴퓨팅 리소스 메모리 관리](memory-management.md) 단원을 참조하십시오.

   1. (선택 사항) **환경 변수**의 경우 **환경 변수 추가**를 선택하여 환경 변수를 이름-값 쌍으로 추가합니다. 이러한 변수는 컨테이너로 전달됩니다.

   1. (선택 사항) **암호**의 경우 **암호 추가**를 선택하여 암호를 이름-값 쌍으로 추가합니다. 이러한 보안 암호는 컨테이너에 노출됩니다. 자세한 내용은 [LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)를 참조하세요.

   1. **다음 페이지**를 선택합니다.

1. (선택 사항) **Linux 구성** 섹션에서:

   1. **사용자**에서 컨테이너 내부에서 사용할 사용자 이름을 입력합니다.

   1. 컨테이너 내에서 init 프로세스를 실행하려면 **init 프로세스 활성화**를 켭니다. 이 프로세스는 신호를 전달하고 결과를 받아들입니다.

   1. **읽기 전용 파일 시스템 활성화**를 켜서 볼륨에 대한 쓰기 권한을 제거합니다.

   1. (선택 사항) **추가 구성**을 확장합니다.

   1. **마운트 포인트 구성**에서 **마운트 포인트 구성 추가**를 선택하여 데이터 볼륨의 마운트 포인트를 추가합니다. 소스 볼륨과 컨테이너 경로를 지정해야 합니다. 이러한 마운트 포인트는 컨테이너 인스턴스의 Docker daemon에 전달됩니다.

   1. **볼륨 구성**에서 **볼륨 추가**를 선택하여 컨테이너에 전달할 볼륨 목록을 생성합니다. 볼륨의 **이름** 및 **소스 경로**를 입력한 다음 **볼륨 추가**를 선택합니다.

   1. **작업 속성** 섹션에서:

      1. **실행 역할 - 조건부**에서 Amazon ECS 에이전트가 사용자를 대신하여 AWS API를 호출할 수 있도록 허용하는 역할을 선택합니다. **실행 역할** 생성에 대한 자세한 내용은 [자습서: IAM 실행 역할 생성](create-execution-role.md) 섹션을 참조하세요.

      1. **ECS 실행 명령**을 선택하여 Amazon ECS 컨테이너 쉘에 대한 직접 액세스를 허용하고 호스트 OS를 우회합니다. **태스크 역할**을 선택해야 합니다.
**중요**  
**ECS 실행** 명령을 사용하려면 파일 시스템에 대한 쓰기 권한이 있어야 합니다.

      1. **작업 역할**에서 Amazon ECS Identity and Access Management(IAM) 역할을 선택하여 컨테이너가 사용자를 대신하여 AWS API를 호출하도록 허용합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 태스크 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)을 참조하세요.

   1. **로깅 구성** 섹션에서:

      1. (선택 사항)**로그 드라이버**에서 사용할 로그 드라이버를 선택합니다. 사용 가능한 로그 드라이버에 대한 자세한 내용은 [LogConfiguration:logDriver](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-logDriver)를 참조하세요.
**참고**  
기본적으로 `awslogs` 로그 드라이버가 사용됩니다.

      1. (선택 사항)**옵션**에서 **옵션 추가**를 선택하여 옵션을 추가합니다. 이름-값 쌍을 입력한 다음 **옵션 추가**를 선택합니다.

      1. (선택 사항) **암호**에서 **암호 추가**를 선택하여 암호를 추가합니다. 이름-값 쌍을 입력한 다음 **암호 추가**를 선택합니다.
**작은 정보**  
자세한 내용은 [LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)를 참조하세요.

1. **다음 페이지**를 선택합니다.

1. **작업 정의 검토**에서 구성 단계를 검토하세요. 변경해야 하는 경우 **편집**을 선택합니다 작업을 마쳤으면 **작업 정의 생성**을 선택합니다.

# Amazon EKS 리소스에 단일 노드 작업 정의 생성
<a name="create-job-definition-eks"></a>

Amazon Elastic Kubernetes Service(Amazon EKS)에서 단일 노드 작업 정의를 생성하려면 다음 단계를 완료합니다.

**Amazon EKS 리소스에 새 작업 정의를 생성하려면**

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) AWS Batch 콘솔을 엽니다.

1. 상단 탐색 모음에서 사용할 AWS 리전 를 선택합니다.

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

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

1. **오케스트레이션 유형**으로는 **Elastic Kubernetes Service(EKS)**를 선택합니다.

1. **이름(Name)**에 고유한 작업 정의 이름을 입력합니다. 각 이름의 최대 길이는 128자입니다. 대문자 및 소문자, 숫자, 하이픈(-) 및 밑줄(\$1)을 포함할 수 있습니다.

1. (선택 사항) **실행 제한 시간**에 제한 시간 값(초)을 입력합니다. 실행 제한 시간은 완료되지 않은 작업이 종료되기까지의 시간입니다. 시도가 제한 시간을 초과하면 중지되고 상태가 `FAILED`(으)로 변경됩니다. 자세한 내용은 [작업 제한 시간](job_timeouts.md) 단원을 참조하십시오. 최솟값은 60초입니다.

1. (선택 사항) **예약 우선 순위**를 켭니다. 0에서 100 사이의 예약 우선 순위 값을 입력합니다. 값이 높을수록 낮은 값보다 우선 순위가 높습니다.

1. (선택 사항) **태그**를 확장한 다음, **태그 추가**를 선택하여 리소스에 태그를 추가합니다.

1. **다음 페이지**를 선택합니다.

1. **EKS pod 속성** 섹션에서:

   1. **서비스 계정 이름**에는 pod에서 실행되는 프로세스의 ID를 제공하는 계정을 입력합니다.

   1. Kubernetes pod 네트워크 모델을 사용하려면 **호스트 네트워크**를 켜고 수신 연결을 위한 수신 포트를 엽니다. 발신 통신에만 이 설정을 끕니다.

   1. **DNS 정책**에서 다음 중 하나를 선택합니다.
      + **값 없음(null)** - pod가 Kubernetes 환경의 DNS 설정을 무시합니다.
      + **기본값** - pod가 실행 중인 노드의 이름 확인 구성을 상속합니다.
**참고**  
DNS 정책이 지정되지 않은 경우 **기본값**은 기본 DNS 정책이 아닙니다. 대신 **ClusterFirst**가 사용됩니다.
      + **ClusterFirst** - 구성된 클러스터 도메인 접미사와 일치하지 않는 모든 DNS 쿼리가 노드에서 상속된 업스트림 이름 서버로 전달됩니다.
      + **ClusterFirstWithHostNet** – **호스트 네트워크**가 켜져 있는 경우에 사용합니다.

   1. (선택 사항) **볼륨**에서 **볼륨 추가**를 선택한 후 다음을 수행합니다.

      1. 볼륨의 **이름**을 추가합니다.

      1. (선택 사항) 호스트의 디렉터리에 대한 **호스트 경로**를 추가합니다.

      1. (선택 사항) **중간** 및 **크기 제한**을 추가하여 [Kubernetes emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)을 구성합니다.

      1. (선택 사항) 포드의 **보안 암호 이름**과 보안 암호가 **선택 사항**인지 여부를 제공합니다.

      1. (선택 사항) Kubernetes [영구 볼륨 클레임](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)을 포드에 연결할 **클레임 이름**을 정의하고 **읽기 전용**인지 여부를 정의합니다.

   1. (선택 사항) **포드 레이블**에서는 **포드 레이블 추가**를 선택한 다음 이름-값 쌍을 입력합니다.
**중요**  
포드 레이블의 접두사는`kubernetes.io/`, `k8s.io/` 또는 `batch.amazonaws.com/`을 포함할 수 없습니다.

   1. (선택 사항) **포드 주석**에서 **주석 추가**를 선택한 다음 이름-값 페어를 입력합니다.
**중요**  
포드 주석의 접두사는 `kubernetes.io/`, `k8s.io/` 또는 `batch.amazonaws.com/`을 포함할 수 없습니다.

   1. **다음 페이지**를 선택합니다.

   1. **컨테이너 구성** 섹션에서:

      1. **이름**에 컨테이너의 고유 이름을 입력합니다. 이름은 문자 또는 숫자로 시작되어야 하며 최대 63자여야 합니다. 소문자 및 대문자, 숫자, 하이픈(-)을 포함할 수 있습니다.

      1. **이미지**에서 작업에 사용할 Docker 이미지를 선택합니다. 기본적으로 Docker Hub 레지스트리 내 이미지는 사용 가능합니다. 또한 `repository-url/image:tag`(을)를 사용하여 다른 리포지토리를 지정할 수도 있습니다. 이름은 최대 255자입니다. 대문자와 소문자, 숫자, 하이픈(-), 밑줄(\$1), 콜론(:), 마침표(.), 슬래시(/) 및 숫자 기호(\$1)를 포함할 수 있습니다. 이 파라미터는 [Docker 원격 API](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Image`와 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `IMAGE` 파라미터로 매핑됩니다.
**참고**  
도커 이미지 아키텍처는 예정된 컴퓨팅 리소스의 프로세서 아키텍처와 일치해야 합니다. 예를 들어 ARM 기반 Docker 이미지는 ARM 기반 컴퓨팅 리소스에서만 실행할 수 있습니다.
         + Amazon ECR Public 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 또는 `registry/repository[@digest]` 명명 규칙을 사용합니다(예: `public.ecr.aws/registry_alias/my-web-app:latest`).
         + Amazon ECR 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 명명 규칙을 사용합니다 (예: `aws_account_id.dkr.ecr.region.amazonaws.com``/my-web-app:latest`).
         + Docker Hub의 공식 리포지토리 안의 이미지는 단일 이름을 사용합니다(예: `ubuntu` 또는 `mongo`).
         + Docker Hub 다른 리포지토리에 저장된 이미지는 조직 이름으로 한정됩니다(예: `amazon/amazon-ecs-agent`).
         + 다른 온라인 리포지토리 안의 이미지는 도메인 이름을 사용하여 추가로 한정됩니다(예: `quay.io/assemblyline/ubuntu`).

      1. (선택 사항) **이미지 풀 정책**에는 이미지를 가져오는 시기를 선택합니다.

      1. (선택 사항) **명령**에는 컨테이너에 전달할 JSON 명령을 입력합니다.

      1. (선택 사항) **인수**에는 컨테이너로 전달할 인수를 입력합니다. 인수가 제공되지 않으면 컨테이너 이미지 명령이 사용됩니다.

   1. (선택 사항) 작업 정의에 파라미터를 이름-값 매핑으로 추가하여 작업 정의 기본값을 재정의할 수 있습니다. 파라미터를 추가하려면

      1. **파라미터**에 이름-값 쌍을 입력한 다음, **파라미터 추가**를 선택합니다.
**중요**  
**파라미터 추가**를 선택한 경우 하나 이상의 파라미터를 구성하거나 **파라미터 제거**를 선택해야 합니다.

   1. **환경 구성** 섹션에서:

      1. **vCPU**에서 컨테이너에 예약할 vCPU 수를 지정합니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `CpuShares`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--cpu-shares` 옵션에 매핑됩니다. 각 vCPU는 1,024개의 CPU 공유와 동일합니다. vCPU를 최소 하나 이상 지정해야 합니다.

      1. **메모리**에는 컨테이너에 사용할 수 있는 메모리 한도를 입력합니다. 컨테이너가 여기에 지정된 메모리를 초과하려 하면 해당 컨테이너가 중지됩니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Memory`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--memory` 옵션에 매핑됩니다. 한 작업에 대해 메모리를 최소한 4MiB 지정해야 합니다.
**참고**  
리소스 사용률을 극대화하려면 특정 인스턴스 유형의 작업에 메모리 우선 순위를 지정합니다. 자세한 내용은 [컴퓨팅 리소스 메모리 관리](memory-management.md) 단원을 참조하십시오.

   1. (선택 사항) **환경 변수**의 경우 **환경 변수 추가**를 선택하여 환경 변수를 이름-값 쌍으로 추가합니다. 이러한 변수는 컨테이너로 전달됩니다.

   1. (선택 사항) **볼륨 마운트**에서

      1. **볼륨 마운트 추가**를 선택합니다.

      1. **이름**을 입력한 다음, 볼륨이 마운트된 컨테이너의 **마운트 경로**를 입력합니다. **SubPath**를 입력하여 루트 대신 참조된 볼륨 내부에서 하위 경로를 지정합니다.

      1. 볼륨에 대한 쓰기 권한을 제거하려면 **읽기 전용**을 선택합니다.

      1. **볼륨 마운트 추가**를 선택합니다.

   1. (선택 사항) **사용자로 실행**에 컨테이너 프로세스를 실행할 사용자 ID를 입력합니다.
**참고**  
컨테이너를 실행하려면 이미지에 사용자 ID가 있어야 합니다.

   1. (선택 사항) **그룹으로 실행**에 컨테이너 프로세스 런타임을 실행할 그룹 ID를 입력합니다.
**참고**  
컨테이너를 실행하려면 이미지에 그룹 ID가 있어야 합니다.

   1. (선택 사항) 작업 컨테이너에 호스트 인스턴스에 대한 승격된 권한(`root` 사용자와 비슷함)을 부여하려면 **권한이 있음** 슬라이더를 오른쪽으로 드래그합니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Privileged`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--privileged` 옵션에 매핑됩니다.

   1. (선택 사항) 루트 파일 시스템에 대한 쓰기 액세스를 제거하려면 **읽기 전용 루트 파일 시스템**을 켭니다.

   1. (선택 사항) 루트가 아닌 사용자로 pod에서 컨테이너를 실행하려면 **루트가 아닌 상태로 실행**을 켭니다.
**참고**  
**루트가 아닌 상태로 실행**이 켜져 있는 경우, kubelet은 런타임 시 이미지의 유효성을 검사하여 이미지가 UID 0으로 실행되지 않는지 확인합니다.

   1. **다음 페이지**를 선택합니다.

1. **작업 정의 검토**에서 구성 단계를 검토하세요. 변경해야 하는 경우 **편집**을 선택합니다 작업을 마쳤으면 **작업 정의 생성**을 선택합니다.

# Amazon EC2 리소스에 다중 컨테이너에 대한 단일 노드 작업 정의 생성
<a name="create-job-definition-single-node-multi-container"></a>

Amazon Elastic Compute Cloud(Amazon EC2) 리소스에서 여러 컨테이너에 대해 단일 노드 작업 정의를 생성하려면 다음 단계를 완료합니다.

**Amazon EC2 리소스에 새 작업 정의를 생성하려면**

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) AWS Batch 콘솔을 엽니다.

1. 탐색 모음에서 사용할 AWS 리전 를 선택합니다.

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

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

1. **오케스트레이션 유형**으로 **Amazon Elastic Compute Cloud(Amazon EC2)**를 선택합니다.

1. **작업 정의 구조**에서 **레거시 containerProperties 구조 사용** 프로세싱을 끕니다.

1. **EC2 플랫폼 구성**의 경우 **다중 노드 병렬 처리 활성화**를 끕니다.

1. **다음**을 선택합니다.

1. **일반 구성** 섹션에 다음을 입력합니다.

   1. **이름(Name)**에 고유한 작업 정의 이름을 입력합니다. 각 이름의 최대 길이는 128자입니다. 대문자 및 소문자, 숫자, 하이픈(-) 및 밑줄(\$1)을 포함할 수 있습니다.

   1. **실행 제한 시간 - *선택 사항***에 제한 시간 값(초)을 입력합니다. 실행 제한 시간은 완료되지 않은 작업이 종료되기까지의 시간입니다. 시도가 제한 시간을 초과하면 중지되고 상태가 `FAILED`(으)로 변경됩니다. 자세한 내용은 [작업 제한 시간](job_timeouts.md) 단원을 참조하십시오. 최솟값은 60초입니다.

   1. **예약 우선 순위 - *선택 사항***을 켭니다. 0에서 100 사이의 예약 우선 순위 값을 입력합니다. 값이 높을수록 우선 순위가 높습니다.

   1. **태그 - *선택 사항***을 확장한 다음 **태그 추가**를 선택하여 리소스에 태그를 추가합니다. 키와 선택 값을 입력하고 **태그 추가**를 선택합니다.

   1. 작업 및 작업 정의에서 Amazon ECS 태스크로 태그를 전파하려면 **태그 전파**를 켭니다.

1. **재시도 전략 - *선택 사항***에서 다음을 입력합니다.

   1. **작업 시도**에 AWS Batch 가 작업 상태를 `RUNNABLE`로 전환하기 시도하는 횟수를 입력합니다. 1\$110 사이의 숫자를 입력합니다.

   1. **재시도 전략 조건**의 경우 **종료 시 평가 추가**를 선택합니다. 파라미터 값을 하나 이상 입력한 다음 **작업**을 선택합니다. 각 조건 세트에 대해 **작업**을 **재시도** 또는 **종료**로 설정해야 합니다. 이러한 작업은 다음을 의미합니다.
      + **재시도** - 지정한 작업 시도 횟수에 도달할 때까지 AWS Batch 재시도합니다.
      + **종료** - 작업 재시도를 AWS Batch 중지합니다.
**중요**  
**종료 시 평가 추가**를 선택한 경우 하나 이상의 파라미터를 구성하고 **작업**을 선택하거나 **종료 시 평가 제거**를 선택해야 합니다.

1. **태스크 속성** 섹션에서 다음을 입력합니다.

   1. **실행 역할 - *조건부***에서 Amazon ECS 에이전트가 사용자를 대신하여 AWS API를 호출할 수 있도록 허용하는 역할을 선택합니다. **실행 역할** 생성에 대한 자세한 내용은 [자습서: IAM 실행 역할 생성](create-execution-role.md) 섹션을 참조하세요.

   1. **ECS 실행 명령**을 선택하여 Amazon ECS 컨테이너 쉘에 대한 직접 액세스를 허용하고 호스트 OS를 우회합니다. **태스크 역할**을 선택해야 합니다.
**중요**  
**ECS 실행** 명령을 사용하려면 파일 시스템에 대한 쓰기 권한이 있어야 합니다.

   1. **태스크 역할**에서 Amazon ECS Identity and Access Management(IAM) 역할을 선택하여 컨테이너가 사용자를 대신하여 AWS API를 호출하도록 허용합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 태스크 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)을 참조하세요.

   1. **IPC 모드**에서 `host`, `task` 또는 `none`을 선택합니다. `host`를 지정하면 동일한 컨테이너 인스턴스에서 호스트 IPC 모드를 지정한 태스크 내 모든 컨테이너가 동일한 IPC 리소스를 호스트 Amazon EC2 인스턴스와 공유합니다. 태스크를 지정하면 지정된 태스크 내 모든 컨테이너가 동일한 IPC 리소스를 공유합니다. 아무 것도 지정되지 않은 경우, 태스크 컨테이너 내에 있는 IPC 리소스는 프라이빗이며, 태스크 또는 컨테이너 인스턴스의 다른 컨테이너와 공유되지 않습니다. 값을 지정하지 않을 경우, IPC 리소스 네임스페이스 공유는 컨테이너 인스턴스의 Docker 대몬 설정에 따라 달라집니다.

   1. **PID 모드**에서 `host` 또는 `task`를 선택합니다. 예를 들어 사이드카 모니터링에서는 동일한 작업에서 실행 중인 다른 컨테이너에 대한 정보에 액세스하기 위해 `pidMode`가 필요할 수 있습니다. `host`를 지정하면 동일한 컨테이너 인스턴스에서 PID 모드를 지정한 태스크 내 모든 컨테이너가 동일한 프로세스 네임스페이스를 호스트 Amazon EC2 인스턴스와 공유합니다. `task`을 지정하면 지정된 태스크 내 모든 컨테이너가 동일한 프로세스 네임스페이스를 공유합니다. 값을 지정하지 않을 경우, 기본값은 각 컨테이너의 프라이빗 네임스페이스입니다.

1. **사용 가능한 리소스** 섹션에서 다음을 입력합니다.

   1. 고유한 **이름**과 **요청된 값**을 입력합니다.

   1. **소모성 리소스 추가**를 선택하여 소모성 리소스를 더 추가할 수 있습니다.

1. **스토리지** 섹션에서 다음을 입력합니다.

   1. 볼륨의 **이름** 및 **소스 경로**를 입력한 다음 **볼륨 추가**를 선택합니다. 또한 EFS 활성화를 켜도록 선택할 수도 있습니다.

   1. **볼륨 추가**를 선택하여 볼륨을 더 추가할 수 있습니다.

1. **파라미터**의 경우 **파라미터 추가**를 선택하여 파라미터 대체 플레이스홀더를 **키** 및 **값**(선택 사항) 페어로 추가합니다.

1. **다음 페이지**를 선택합니다.

1. **컨테이너 구성** 섹션에서:

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

   1. 컨테이너가 필수인 경우 **필수 컨테이너**를 활성화합니다.

   1. **이미지**에서 작업에 사용할 Docker 이미지를 선택합니다. 기본적으로 Docker Hub 레지스트리 내 이미지는 사용 가능합니다. 또한 `repository-url/image:tag`(을)를 사용하여 다른 리포지토리를 지정할 수도 있습니다. 각 이름의 최대 길이는 225자입니다. 여기에는 대문자와 소문자, 숫자, 하이픈(-), 밑줄(\$1), 콜론(:), 슬래시(/) 및 숫자 기호(\$1)를 사용할 수 있습니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Image`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `IMAGE` 파라미터로 매핑됩니다.
**참고**  
도커 이미지 아키텍처는 예정된 컴퓨팅 리소스의 프로세서 아키텍처와 일치해야 합니다. 예를 들어 ARM 기반 Docker 이미지는 ARM 기반 컴퓨팅 리소스에서만 실행할 수 있습니다.
      + Amazon ECR Public 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 또는 `registry/repository[@digest]` 명명 규칙을 사용합니다(예: `public.ecr.aws/registry_alias/my-web-app:latest`).
      + Amazon ECR 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 명명 규칙을 사용합니다 (예: `aws_account_id.dkr.ecr.region.amazonaws.com``/my-web-app:latest`).
      + Docker Hub의 공식 리포지토리 안의 이미지는 단일 이름을 사용합니다(예: `ubuntu` 또는 `mongo`).
      + Docker Hub 다른 리포지토리에 저장된 이미지는 조직 이름으로 한정됩니다(예: `amazon/amazon-ecs-agent`).
      + 다른 온라인 리포지토리 안의 이미지는 도메인 이름을 사용하여 추가로 한정됩니다(예: `quay.io/assemblyline/ubuntu`).

   1. **리소스 요구 사항**에서 다음의 각 항목을 구성합니다.

      1. **vCPU**에서 컨테이너의 CPU 수를 선택합니다.

      1. **메모리**에서 컨테이너의 메모리 양을 선택합니다.

      1. **GPU - *선택 사항***에서 컨테이너에 대한 GPU 수를 선택합니다.

   1. **User(사용자)**에서 컨테이너 내부에서 사용할 사용자 이름을 입력합니다.

   1. **읽기 전용 파일 시스템 활성화**를 켜서 볼륨에 대한 쓰기 권한을 제거합니다.

   1. **권한 부여**를 켜서 루트 사용자와 유사하게 호스트 인스턴스에서 작업 컨테이너에 승격된 권한을 부여합니다.

   1. **명령**에서 필드에 명령을 **JSON** 문자열 배열 형식으로 입력합니다.

      이 파라미터는 [도커 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Cmd`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `COMMAND` 파라미터로 매핑됩니다. Docker `CMD` 파라미터에 대한 자세한 정보는 [https://docs.docker.com/engine/reference/builder/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)를 참조하세요.
**참고**  
사용자는 명령에 파라미터 대체 및 자리 표시자 기본값을 사용할 수 있습니다. 자세한 내용은 [Parameters](job_definition_parameters.md#parameters) 단원을 참조하십시오.

   1. **리포지토리 자격 증명 - *선택 사항***에서 자격 증명을 포함하는 보안 암호의 ARN을 입력합니다.

   1. **환경 변수 - *선택 사항***에서 **환경 변수 추가**를 선택하여 컨테이너에 전달할 환경 변수를 추가합니다.

   1. **Linux 파라마티 - *선택 사항*** 섹션에서:

      1. 컨테이너 내에서 init 프로세스를 실행하려면 **init 프로세스 활성화**를 켭니다.

      1. **공유 메모리 크기**에 /dev/shm 볼륨의 크기(MiB)를 입력합니다.

      1. **최대 스왑 크기**에는 컨테이너가 사용할 수있는 총 스왑 메모리 양(MiB)을 입력합니다.

      1. **스왑 활용도**의 경우 컨테이너의 스왑 동작을 나타내는 값을 0에서 100 사이의 값으로 입력합니다. 값을 지정하지 않고 스와핑이 활성화된 경우 기본값 60이 사용됩니다.

      1. **디바이스**의 경우 **의 경우 **를 선택하여 장치를 추가합니다.

         1. **컨테이너 경로**에 호스트 인스턴스에 매핑된 디바이스를 노출할 컨테이너 인스턴스의 경로를 지정합니다. 이 필드를 비워두면 호스트 경로가 컨테이너에 사용됩니다.

         1. **호스트 경로**에 호스트 인스턴스의 디바이스 경로를 지정합니다.

         1. **권한**에서 디바이스에 적용할 권한을 하나 이상 선택합니다. 사용 가능한 권한은 **읽기**, **쓰기** 및 **MKNOD입니다**.

      1. **Tmpfs**의 경우 **tmpfs 추가**를 선택하여 `tmpfs` 마운트를 추가합니다.

   1. 
**참고**  
Firelens 로깅은 전용 컨테이너에서 수행되어야 합니다. Firelens 로깅을 구성하려면:  
전용 Firelens 컨테이너를 제외한 모든 컨테이너에서 **로깅 드라이버**를 `awsfirelens`로 설정합니다.
Firelens 컨테이너에서 **Firelens 구성 - 선택 사항** 및 **로깅 구성 - *선택 사항***을 로깅 대상으로 설정합니다.

      **Firelens 구성 - 선택 사항** 섹션에서:
**중요**  
AWS Batch 는 비 MNP, 비 FARGATE Amazon ECS 작업에 `host` 네트워크 모드를 적용합니다. Amazon ECS Firelens에는 [루트 사용자가 필요](https://github.com/aws/aws-for-fluent-bit/blob/mainline/troubleshooting/debugging.md#amazon-ecs-firelens-root-is-required)합니다. `host` 네트워크 모드를 사용하여 태스크를 실행할 때 Amazon ECS는 [더 나은 보안](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#network_mode)을 위해 루트 사용자(UID 0)를 사용하여 컨테이너를 실행하지 않을 것을 권고합니다. 따라서 Firelens 로깅이 있는 모든 비 MNP, 비 FARGATE ECS 작업은 보안 모범 사례를 충족하지 않습니다.

      1. **유형**에서 `fluentd` 또는 `fluentbit`를 선택합니다.

      1. **옵션**에 옵션의 이름/값 페어를 입력합니다. **추가 옵션**을 사용하여 **옵션**을 더 추가할 수 있습니다.

   1.  **로깅 구성 - *선택 사항*** 섹션에서:

      1. **로그 드라이버**에서 사용할 로그 드라이버를 선택합니다. 사용 가능한 로그 드라이버에 대한 자세한 내용은 [LogConfiguration:logDriver](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-logDriver)를 참조하세요.
**참고**  
기본적으로 `awslogs` 로그 드라이버가 사용됩니다.

      1. **옵션**에서 **옵션 추가**를 선택하여 옵션을 추가합니다. 이름-값 쌍을 입력한 다음 **옵션 추가**를 선택합니다.

      1. **암호**에서 **암호 추가**를 선택합니다. 이름-값 페어를 입력한 다음 **암호 추가**를 선택하여 암호를 추가합니다.
**작은 정보**  
자세한 내용은 [LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)를 참조하세요.

   1. **마운트 포인트 - *선택 사항***에서 **마운트 포인트 추가**를 선택하여 데이터 볼륨의 마운트 포인트를 추가합니다. 소스 볼륨과 컨테이너 경로를 지정해야 합니다.

   1. **보안 암호 - *선택 사항***에서 **보안 암호 추가**를 선택하여 보안 암호를 추가합니다. 이름-값 쌍을 입력한 다음 **암호 추가**를 선택합니다.
**작은 정보**  
자세한 내용은 [LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)를 참조하세요.

   1. **Ulimits - *선택 사항***에서 **ulimit 추가**를 선택하여 컨테이너에 `ulimits` 값을 추가합니다. **이름**, **소프트 제한**, **하드 제한** 값을 입력한 다음 **ulimit 추가**를 선택합니다.

   1. **종속성 - *선택 사항***에서 **컨테이너 종속성 추가**를 선택합니다. 컨테이너의 이름과 상태를 선택하여 언제 이 컨테이너가 시작되는지를 결정합니다.

1. 컨테이너가 하나만 구성된 경우에는 **컨테이너 추가**를 선택하고 새 컨테이너 구성을 완료해야 합니다. 그렇지 않으면 **다음**을 선택하여 검토합니다.

# 다중 노드 병렬 작업 정의 생성
<a name="create-multi-node-job-def"></a>

에서 작업을 실행하려면 먼저 작업 정의를 생성 AWS Batch해야 합니다. 이 프로세스는 단일 노드 작업과 다중 노드 병렬 작업 간에 약간 다릅니다. 이 주제에서는 특히 AWS Batch 다중 노드 병렬 작업(*그룹 일정*이라고도 함)에 대한 작업 정의를 생성하는 방법을 다룹니다. 자세한 내용은 [다중 노드 병렬 작업](multi-node-parallel-jobs.md) 단원을 참조하십시오.

**참고**  
AWS Fargate는 다중 노드 병렬 작업을 지원하지 않습니다.

**Topics**
+ [자습서: Amazon EC2 리소스의 다중 노드 병렬 작업 정의 생성](multi-node-job-def-ec2.md)

# 자습서: Amazon EC2 리소스의 다중 노드 병렬 작업 정의 생성
<a name="multi-node-job-def-ec2"></a>

Amazon Elastic Compute Cloud(Amazon EC2) 리소스에서 다중 노드 병렬 작업 정의를 생성합니다.

**참고**  
단일 노드 작업 정의를 생성하려면 [Amazon EC2 리소스에 단일 노드 작업 정의 생성](create-job-definition-EC2.md) 섹션을 참조하세요.**

**Amazon EC2 리소스의 다중 노드 병렬 작업 정의를 생성하려면**

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) AWS Batch 콘솔을 엽니다.

1. 탐색 모음에서 사용할 AWS 리전 를 선택합니다.

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

1. **생성**을 선택합니다.

1. **오케스트레이션 유형**으로 **Amazon Elastic Compute Cloud(Amazon EC2)**를 선택합니다.

1. **다중 노드 병렬 활성화**에서 다중 노드 병렬을 켭니다.

1. **이름(Name)**에 고유한 작업 정의 이름을 입력합니다. 이름은 최대 128자까지 포함할 수 있으며, 대문자와 소문자, 숫자, 하이픈(-), 밑줄(\$1)을 포함할 수 있습니다.

1. (선택 사항) **실행 제한 시간**에서 작업 시도의 실행을 허용할 최대 시간(초)을 지정합니다. 시도가 제한 시간을 초과하면 중지되고 상태가 `FAILED`(으)로 변경됩니다. 자세한 내용은 [작업 제한 시간](job_timeouts.md) 단원을 참조하십시오.

1. (선택 사항) **예약 우선 순위**를 켭니다. 0에서 100 사이의 예약 우선 순위 값을 입력합니다. 값이 높을수록 낮은 값보다 우선 순위가 높습니다.

1. (선택 사항) **작업 시도**의 경우 작업을 `RUNNABLE` 상태로 이동하려는 AWS Batch 시도 횟수를 입력합니다. 1\$110 사이의 숫자를 입력합니다.

1. (선택 사항) **재시도 전략 조건**의 경우 **종료 시 평가 추가**를 선택합니다. 파라미터 값을 하나 이상 입력한 다음 **작업**을 선택합니다. 각 조건 세트에 대해 **작업**을 **재시도** 또는 **종료**로 설정해야 합니다. 이러한 작업은 다음을 의미합니다.
   + **재시도** - 지정한 작업 시도 횟수에 도달할 때까지 AWS Batch 재시도합니다.
   + **종료** - 작업 재시도를 AWS Batch 중지합니다.
**중요**  
**종료 시 평가 추가**를 선택한 경우 하나 이상의 파라미터를 구성하고 **작업**을 선택하거나 **종료 시 평가 제거**를 선택해야 합니다.

1. (선택 사항) **태그**를 확장한 다음 **태그 추가**를 선택하여 리소스에 태그를 추가합니다. **태그 추가**를 선택하고 키 및 값(선택 사항)을 입력합니다. 또한 작업 및 작업 정의에서 Amazon ECS 태스크로 태그를 전파하려면 **태그 전파 시작**을 켭니다.

1. **다음 페이지**를 선택합니다.

1. **노드 수**에 작업에 사용할 총 노드 수를 입력합니다.

1. **기본 노드**에 메인 노드에 사용할 노드 인덱스를 입력합니다. 기본 노드 인덱스는 `0`입니다.

1. **인스턴스 유형**에서 인스턴스 유형을 선택합니다.
**참고**  
선택한 인스턴스 유형이 모든 노드에 적용됩니다.

1. **파라미터**의 경우 **파라미터 추가**를 선택하여 파라미터 대체 플레이스홀더를 **키** 및 **값**(선택 사항) 페어로 추가합니다.

1. **노드 범위** 섹션에서:

   1. **노드 범위 추가**를 선택합니다. 그러면 **노드 범위** 섹션이 생성됩니다.

   1. **대상 노드**에서 `range_start:range_end` 표기법을 사용하여 노드 그룹의 범위를 지정합니다.

      작업에 지정한 노드 수에 대해 최대 다섯 개의 노드 범위를 생성할 수 있습니다. 노드 범위는 노드의 인덱스 값을 사용하며 노드 인덱스는 0에서 시작됩니다. 최종 노드 그룹의 범위 끝 인덱스 값이 지정한 노드 수보다 하나 작아야 합니다. 예를 들어, 10개의 노드를 지정하고 단일 노드 그룹을 사용하려고 한다고 가정해 보겠습니다. 그러면 최종 범위는 9입니다.

   1. **이미지**에서 작업에 사용할 Docker 이미지를 선택합니다. 기본적으로 Docker Hub 레지스트리 내 이미지는 사용 가능합니다. 또한 `repository-url/image:tag`(을)를 사용하여 다른 리포지토리를 지정할 수도 있습니다. 이름은 최대 225자입니다. 여기에는 대문자와 소문자, 숫자, 하이픈(-), 밑줄(\$1), 콜론(:), 슬래시(/) 및 숫자 기호(\$1)를 사용할 수 있습니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Image`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `IMAGE` 파라미터로 매핑됩니다.
**참고**  
도커 이미지 아키텍처는 예정된 컴퓨팅 리소스의 프로세서 아키텍처와 일치해야 합니다. 예를 들어 ARM 기반 Docker 이미지는 ARM 기반 컴퓨팅 리소스에서만 실행할 수 있습니다.
      + Amazon ECR Public 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 또는 `registry/repository[@digest]` 명명 규칙을 사용합니다(예: `public.ecr.aws/registry_alias/my-web-app:latest`).
      + Amazon ECR 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 명명 규칙을 사용합니다. 예: `aws_account_id.dkr.ecr.region.amazonaws.com``/my-web-app:latest`
      + Docker Hub의 공식 리포지토리 안의 이미지는 단일 이름을 사용합니다(예: `ubuntu` 또는 `mongo`).
      + Docker Hub 다른 리포지토리에 저장된 이미지는 조직 이름으로 한정됩니다(예: `amazon/amazon-ecs-agent`).
      + 다른 온라인 리포지토리 안의 이미지는 도메인 이름을 사용하여 추가로 한정됩니다(예: `quay.io/assemblyline/ubuntu`).

   1. **명령**에서 필드에 명령을 **JSON** 문자열 배열 형식으로 입력합니다.

      이 파라미터는 [도커 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Cmd`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `COMMAND` 파라미터로 매핑됩니다. Docker `CMD` 파라미터에 대한 자세한 정보는 [https://docs.docker.com/engine/reference/builder/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)를 참조하세요.
**참고**  
사용자는 명령에 파라미터 대체 및 자리 표시자 기본값을 사용할 수 있습니다. 자세한 내용은 [Parameters](job_definition_parameters.md#parameters) 단원을 참조하십시오.

   1. **vCPU(vCPUs)**에서 컨테이너에 예약할 vCPU 수를 지정합니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `CpuShares`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--cpu-shares` 옵션에 매핑됩니다. 각 vCPU는 1,024개의 CPU 공유와 동일합니다. vCPU를 최소 하나 이상 지정해야 합니다.

   1. **메모리**에서 작업 컨테이너에 제공할 메모리의 하드 제한(MiB)을 지정합니다. 컨테이너가 여기에 지정된 메모리를 초과하려 하면 해당 컨테이너가 중지됩니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Memory`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--memory` 옵션에 매핑됩니다. 한 작업에 대해 메모리를 최소한 4MiB 지정해야 합니다.
**참고**  
리소스 사용률을 최대화하기 위해 특정 인스턴스 유형에 대해 작업에 최대한 많은 메모리를 제공할 수 있습니다. 자세한 내용은 [컴퓨팅 리소스 메모리 관리](memory-management.md) 단원을 참조하십시오.

   1. (선택 사항)**GPU 수**에서 작업에서 사용할 GPU 수를 지정합니다. 작업은 컨테이너에서 해당 컨테이너에 고정된 특정 GPU 수로 실행됩니다.

   1. (선택 사항) **작업 역할**에서 작업의 컨테이너에 AWS APIs. 이 기능은 태스크 기능에 Amazon ECS IAM 역할을 사용합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*에서 [작업에 대한 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) 섹션을 참조하세요.
**참고**  
Fargate 리소스에서 실행되는 작업의 경우, 작업 역할이 필요합니다.
**참고**  
**Amazon Elastic Container Service 태스크 역할** 신뢰 관계를 보유한 역할만 여기 표시됩니다. AWS Batch 작업에 대한 IAM 역할 생성에 대한 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [작업에 대한 IAM 역할 및 정책 생성을 참조하세요](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role).

   1. (선택 사항) **실행 역할**에서 Amazon ECS 컨테이너 에이전트에게 사용자를 대신하여 AWS API를 호출할 수 있는 권한을 부여하는 IAM 역할을 지정합니다. 이 기능은 작업 기능에 Amazon ECS IAM 역할을 사용합니다. 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 작업 실행 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) 섹션을 참조하세요.

1. (선택 사항) **추가 구성**을 확장합니다.

   1. **환경 변수**에서 **환경 변수 추가**를 선택하여 환경 변수를 이름-값 쌍으로 추가합니다. 이러한 변수는 컨테이너로 전달됩니다.

   1. **작업 역할 구성**의 경우 작업의 컨테이너에 AWS APIs. 이 기능은 태스크 기능에 Amazon ECS IAM 역할을 사용합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*에서 [작업에 대한 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) 섹션을 참조하세요.
**참고**  
Fargate 리소스에서 실행되는 작업의 경우, 작업 역할이 필요합니다.
**참고**  
**Amazon Elastic Container Service 태스크 역할** 신뢰 관계를 보유한 역할만 여기 표시됩니다. AWS Batch 작업에 대한 IAM 역할을 생성하는 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*에서 [작업에 대한 IAM 역할 및 정책 생성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role) 섹션을 참조하세요.

   1. **실행 역할**에서 Amazon ECS 컨테이너 에이전트에게 사용자를 대신하여 AWS API를 호출할 수 있는 권한을 부여하는 IAM 역할을 지정합니다. 이 기능은 작업 기능에 Amazon ECS IAM 역할을 사용합니다. 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 작업 실행 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) 섹션을 참조하세요.

1. **보안 구성** 섹션에서:

   1. (선택 사항)작업 컨테이너에 호스트 인스턴스에 대한 승격된 권한(`root` 사용자와 비슷함)을 부여하려면 **권한이 있음(Privileged)**을 선택합니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Privileged`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--privileged` 옵션에 매핑됩니다.

   1. (선택 사항)**사용자**에서 컨테이너 내부에서 사용할 사용자 이름을 입력합니다. 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `User`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--user` 옵션에 매핑됩니다.

   1. (선택 사항) **암호**의 경우 **암호 추가**를 선택하여 암호를 이름-값 쌍으로 추가합니다. 이러한 보안 암호는 컨테이너에 노출됩니다. 자세한 내용은 [LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)를 참조하세요.

1. **Linux 구성** 섹션에서:

   1. **읽기 전용 파일 시스템 활성화**를 켜서 볼륨에 대한 쓰기 권한을 제거합니다.

   1. (선택 사항)컨테이너 내에서 `init` 프로세스를 실행하려면 **init 프로세스 활성화**를 켭니다. 이 프로세스는 신호를 전달하고 결과를 받아들입니다.

   1. **공유 메모리 크기**에 `/dev/shm` 볼륨의 크기(MiB)를 입력합니다.

   1. **최대 스왑 크기**에는 컨테이너가 사용할 수있는 총 스왑 메모리 양(MiB)을 입력합니다.

   1. **스왑 활용도**의 경우 컨테이너의 스왑 동작을 나타내는 값을 0에서 100 사이의 값으로 입력합니다. 값을 지정하지 않고 스왑을 활성화한 경우 기본적으로 60으로 설정됩니다. 자세한 내용은 [LinuxParameters:swappiness](https://docs.aws.amazon.com/batch/latest/APIReference/API_LinuxParameters.html#Batch-Type-LinuxParameters-swappiness)를 참조하세요.

   1. (선택 사항) **디바이스**의 경우 **디바이스 추가**를 선택하여 장치를 추가합니다.

      1. **컨테이너 경로**에 호스트 인스턴스에 매핑된 디바이스를 노출할 컨테이너 인스턴스의 경로를 지정합니다. 이 필드를 비워두면 호스트 경로가 컨테이너에 사용됩니다.

      1. **호스트 경로**에 호스트 인스턴스의 디바이스 경로를 지정합니다.

      1. **권한**에서 디바이스에 적용할 권한을 하나 이상 선택합니다. 사용 가능한 권한은 **읽기**, **쓰기** 및 **MKNOD입니다**.

1. (선택 사항) **마운트 포인트**의 경우 **마운트 포인트 구성 추가**를 선택하여 데이터 볼륨의 마운트 포인트를 추가합니다. 소스 볼륨과 컨테이너 경로를 지정해야 합니다. 이러한 마운트 포인트는 컨테이너 인스턴스의 Docker 대몬(daemon)으로 전달됩니다. 볼륨을 **읽기 전용**으로 설정할 수도 있습니다.

1. (선택 사항) **Ulimits 구성**의 경우 **ulimit 추가**를 선택하여 컨테이너에 `ulimits` 값을 추가합니다. **이름**, **소프트 제한**, **하드 제한** 값을 입력한 다음 **ulimit 추가**를 선택합니다.

1. (선택 사항) **볼륨 구성**의 경우 **볼륨 추가**를 선택하여 컨테이너에 전달할 볼륨 목록을 생성합니다. 볼륨의 **이름** 및 **소스 경로**를 입력한 다음 **볼륨 추가**를 선택합니다. 또한 **EFS 활성화**를 켜도록 선택할 수도 있습니다.

1. (선택 사항) **Tmpfs**의 경우 **tmpfs 추가**를 선택하여 `tmpfs` 마운트를 추가합니다.

1. **태스크 속성** 섹션에서:

   1. **실행 역할 - 조건부**에서 Amazon ECS 에이전트가 사용자를 대신하여 AWS API를 호출할 수 있도록 허용하는 역할을 선택합니다. **실행 역할** 생성에 대한 자세한 내용은 [자습서: IAM 실행 역할 생성](create-execution-role.md) 섹션을 참조하세요.

   1. 
**중요**  
**ECS 실행 명령**을 사용하려면 컴퓨팅 환경이 [다중 노드 병렬 작업을 위한 컴퓨팅 환경 고려 사항](mnp-ce.md)을 충족해야 합니다.

      **ECS 실행 명령**을 선택하여 Amazon ECS 컨테이너 쉘에 대한 직접 액세스를 허용하고 호스트 OS를 우회합니다. **태스크 역할**을 선택해야 합니다.
**중요**  
**ECS 실행** 명령을 사용하려면 파일 시스템에 대한 쓰기 권한이 있어야 합니다.

   1. **작업 역할**에서 Amazon ECS Identity and Access Management(IAM) 역할을 선택하여 컨테이너가 사용자를 대신하여 AWS API를 호출하도록 허용합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 태스크 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)을 참조하세요.

1. (선택 사항)**로깅 구성** 섹션에서:

   1. **로그 드라이버**에서 사용할 로그 드라이버를 선택합니다. 사용 가능한 로그 드라이버에 대한 자세한 내용은 [LogConfiguration:logDriver](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-logDriver)를 참조하세요.
**참고**  
기본적으로 `awslogs` 로그 드라이버가 사용됩니다.

   1. **옵션**에서 **옵션 추가**를 선택하여 옵션을 추가합니다. 이름-값 쌍을 입력한 다음 **옵션 추가**를 선택합니다.

   1. **암호**에서 **암호 추가**를 선택합니다. 이름-값 페어를 입력한 다음 **암호 추가**를 선택하여 암호를 추가합니다.
**작은 정보**  
자세한 내용은 [LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)를 참조하세요.

1. **다음 페이지**를 선택합니다.

1. **작업 정의 검토**에서 구성 단계를 검토하세요. 변경해야 하는 경우 **편집**을 선택합니다 작업을 마쳤으면 **작업 정의 생성**을 선택합니다.

# ContainerProperties를 사용하는 작업 정의 템플릿
<a name="job-definition-template"></a>

다음은 단일 컨테이너가 포함된 빈 작업 정의 템플릿입니다. 이 템플릿을 사용하여 작업 정의를 생성한 다음, 파일에 저장하여 AWS CLI `--cli-input-json` 옵션과 함께 사용할 수 있습니다. 이러한 파라미터에 대한 자세한 내용은 [JobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_JobDefinition.html)을 참조하세요.

**참고**  
다음 AWS CLI 명령을 사용하여 단일 컨테이너 작업 정의 템플릿을 생성할 수 있습니다.  

```
$ aws batch register-job-definition --generate-cli-skeleton
```

```
{
    "jobDefinitionName": "",
    "type": "container",
    "parameters": {
        "KeyName": ""
    },
    "schedulingPriority": 0,
    "containerProperties": {
        "image": "",
        "vcpus": 0,
        "memory": 0,
        "command": [
            ""
        ],
        "jobRoleArn": "",
        "executionRoleArn": "",
        "volumes": [
            {
                "host": {
                    "sourcePath": ""
                },
                "name": "",
                "efsVolumeConfiguration": {
                    "fileSystemId": "",
                    "rootDirectory": "",
                    "transitEncryption": "ENABLED",
                    "transitEncryptionPort": 0,
                    "authorizationConfig": {
                        "accessPointId": "",
                        "iam": "DISABLED"
                    }
                }
            }
        ],
        "environment": [
            {
                "name": "",
                "value": ""
            }
        ],
        "mountPoints": [
            {
                "containerPath": "",
                "readOnly": true,
                "sourceVolume": ""
            }
        ],
        "readonlyRootFilesystem": true,
        "privileged": true,
        "ulimits": [
            {
                "hardLimit": 0,
                "name": "",
                "softLimit": 0
            }
        ],
        "user": "",
        "instanceType": "",
        "resourceRequirements": [
            {
                "value": "",
                "type": "MEMORY"
            }
        ],
        "linuxParameters": {
            "devices": [
                {
                    "hostPath": "",
                    "containerPath": "",
                    "permissions": [
                        "WRITE"
                    ]
                }
            ],
            "initProcessEnabled": true,
            "sharedMemorySize": 0,
            "tmpfs": [
                {
                    "containerPath": "",
                    "size": 0,
                    "mountOptions": [
                        ""
                    ]
                }
            ],
            "maxSwap": 0,
            "swappiness": 0
        },
        "logConfiguration": {
            "logDriver": "syslog",
            "options": {
                "KeyName": ""
            },
            "secretOptions": [
                {
                    "name": "",
                    "valueFrom": ""
                }
            ]
        },
        "secrets": [
            {
                "name": "",
                "valueFrom": ""
            }
        ],
        "networkConfiguration": {
            "assignPublicIp": "DISABLED"
        },
        "fargatePlatformConfiguration": {
            "platformVersion": ""
        }
    },
    "nodeProperties": {
        "numNodes": 0,
        "mainNode": 0,
        "nodeRangeProperties": [
            {
                "targetNodes": "",
                "container": {
                    "image": "",
                    "vcpus": 0,
                    "memory": 0,
                    "command": [
                        ""
                    ],
                    "jobRoleArn": "",
                    "executionRoleArn": "",
                    "volumes": [
                        {
                            "host": {
                                "sourcePath": ""
                            },
                            "name": "",
                            "efsVolumeConfiguration": {
                                "fileSystemId": "",
                                "rootDirectory": "",
                                "transitEncryption": "DISABLED",
                                "transitEncryptionPort": 0,
                                "authorizationConfig": {
                                    "accessPointId": "",
                                    "iam": "ENABLED"
                                }
                            }
                        }
                    ],
                    "environment": [
                        {
                            "name": "",
                            "value": ""
                        }
                    ],
                    "mountPoints": [
                        {
                            "containerPath": "",
                            "readOnly": true,
                            "sourceVolume": ""
                        }
                    ],
                    "readonlyRootFilesystem": true,
                    "privileged": true,
                    "ulimits": [
                        {
                            "hardLimit": 0,
                            "name": "",
                            "softLimit": 0
                        }
                    ],
                    "user": "",
                    "instanceType": "",
                    "resourceRequirements": [
                        {
                            "value": "",
                            "type": "MEMORY"
                        }
                    ],
                    "linuxParameters": {
                        "devices": [
                            {
                                "hostPath": "",
                                "containerPath": "",
                                "permissions": [
                                    "WRITE"
                                ]
                            }
                        ],
                        "initProcessEnabled": true,
                        "sharedMemorySize": 0,
                        "tmpfs": [
                            {
                                "containerPath": "",
                                "size": 0,
                                "mountOptions": [
                                    ""
                                ]
                            }
                        ],
                        "maxSwap": 0,
                        "swappiness": 0
                    },
                    "logConfiguration": {
                        "logDriver": "awslogs",
                        "options": {
                            "KeyName": ""
                        },
                        "secretOptions": [
                            {
                                "name": "",
                                "valueFrom": ""
                            }
                        ]
                    },
                    "secrets": [
                        {
                            "name": "",
                            "valueFrom": ""
                        }
                    ],
                    "networkConfiguration": {
                        "assignPublicIp": "DISABLED"
                    },
                    "fargatePlatformConfiguration": {
                        "platformVersion": ""
                    }
                }
            }
        ]
    },
    "retryStrategy": {
        "attempts": 0,
        "evaluateOnExit": [
            {
                "onStatusReason": "",
                "onReason": "",
                "onExitCode": "",
                "action": "RETRY"
            }
        ]
    },
    "propagateTags": true,
    "timeout": {
        "attemptDurationSeconds": 0
    },
    "tags": {
        "KeyName": ""
    },
    "platformCapabilities": [
        "EC2"
    ],
    "eksProperties": {
        "podProperties": {
            "serviceAccountName": "",
            "hostNetwork": true,
            "dnsPolicy": "",
            "containers": [
                {
                    "name": "",
                    "image": "",
                    "imagePullPolicy": "",
                    "command": [
                        ""
                    ],
                    "args": [
                        ""
                    ],
                    "env": [
                        {
                            "name": "",
                            "value": ""
                        }
                    ],
                    "resources": {
                        "limits": {
                            "KeyName": ""
                        },
                        "requests": {
                            "KeyName": ""
                        }
                    },
                    "volumeMounts": [
                        {
                            "name": "",
                            "mountPath": "",
                            "readOnly": true
                        }
                    ],
                    "securityContext": {
                        "runAsUser": 0,
                        "runAsGroup": 0,
                        "privileged": true,
                        "readOnlyRootFilesystem": true,
                        "runAsNonRoot": true
                    }
                }
            ],
            "volumes": [
                {
                    "name": "",
                    "hostPath": {
                        "path": ""
                    },
                    "emptyDir": {
                        "medium": "",
                        "sizeLimit": ""
                    },
                    "secret": {
                        "secretName": "",
                        "optional": true
                    }
                }
            ]
        }
    }
}
```

# ContainerProperties에 대한 작업 정의 파라미터
<a name="job_definition_parameters"></a>

[https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html)를 사용하는 작업 정의는 여러 부분으로 나뉩니다.
+ 작업 정의 이름
+ 작업 정의의 유형
+ 파라미터 대체 자리 표시자 기본값
+ 작업에 대한 컨테이너 속성
+ Amazon EKS 리소스에서 실행되는 작업에 필요한 작업 정의의 Amazon EKS 속성
+ 다중 노드 병렬 작업에 필요한 노드 속성
+ Fargate 리소스에서 작업을 실행하는 데 필요한 플랫폼 기능
+ 작업 정의의 기본 태그 전파 세부 정보
+ 작업 정의의 기본 재시도 전략
+ 작업 정의의 기본 예약 우선 순위
+ 작업 정의의 기본 태그
+ 작업 정의의 기본 제한 시간

**Contents**
+ [작업 정의 이름](#jobDefinitionName)
+ [유형](#type)
+ [Parameters](#parameters)
+ [컨테이너 속성](#containerProperties)
+ [Amazon EKS 속성](#job-definition-parameters-eks-properties)
+ [플랫폼 기능](#job-definition-parameters-platform-capabilities)
+ [태그 전파](#job-definition-parameters-propagate-tags)
+ [노드 속성](#nodeProperties)
+ [재시도 전략](#retryStrategy)
+ [예약 우선 순위](#job-definition-parameters-schedulingPriority)
+ [태그](#job-definition-parameters-tags)
+ [Timeout](#timeout)

## 작업 정의 이름
<a name="jobDefinitionName"></a>

`jobDefinitionName`  
작업 정의를 등록할 때 이름을 지정합니다. 각 이름의 최대 길이는 128자입니다. 대문자 및 소문자, 숫자, 하이픈(-) 및 밑줄(\$1)을 포함할 수 있습니다. 이 이름으로 등록된 첫 번째 작업 정의에는 버전 번호 1이 부여됩니다. 그런 다음 같은 이름으로 등록되는 작업 정의는 버전 번호가 하나씩 증가하여 부여됩니다.  
유형: 문자열  
필수 항목 여부: 예

## 유형
<a name="type"></a>

`type`  
작업 정의를 등록할 때 작업 유형을 지정합니다. 작업이 Fargate 리소스에서 실행되는 경우 `multinode`는 지원되지 않습니다. 다중 노드 병렬 작업에 대한 자세한 내용은 [다중 노드 병렬 작업 정의 생성](create-multi-node-job-def.md) 섹션을 참조하세요.  
유형: 문자열  
유효한 값: `container` \$1 `multinode`  
필수 여부: 예

## Parameters
<a name="parameters"></a>

`parameters`  
작업을 제출할 때 자리 표시자를 교체하거나 기본 작업 정의 파라미터를 재정의하는 파라미터를 지정할 수 있습니다. 작업 제출 요청의 파라미터는 작업 정의의 기본값보다 우선합니다. 즉, 동일한 형식을 사용하는 여러 작업에 동일한 작업 정의를 사용할 수 있습니다. 또한 제출 시 명령의 값을 프로그래밍 방식으로 변경할 수 있습니다.  
유형: 문자열 대 문자열 맵  
필수 여부: 아니요  
작업 정의를 등록할 때 작업 컨테이너 속성의 `command` 필드에 파라미터 대체 자리 표시자를 사용할 수 있습니다. 구문은 다음과 같습니다.  

```
"command": [
    "ffmpeg",
    "-i",
    "Ref::inputfile",
    "-c",
    "Ref::codec",
    "-o",
    "Ref::outputfile"
]
```
위의 예에서는 명령에 `Ref::inputfile`, `Ref::codec`, `Ref::outputfile` 파라미터 대체 자리 표시자가 있습니다. 작업 정의의 `parameters` 객체를 사용하여 이러한 자리 표시자의 기본값을 설정할 수 있습니다. 예를 들어, `Ref::codec` 자리 표시자의 기본값을 설정하려면 작업 정의에 다음을 지정합니다.  

```
"parameters" : {"codec" : "mp4"}
```
이 작업 정의를 실행하기 위해 제출하면 컨테이너 명령의 `Ref::codec` 인수가 기본값인 `mp4`로 대체됩니다.

## 컨테이너 속성
<a name="containerProperties"></a>

작업 정의를 등록할 때, 작업 배치 시 컨테이너 인스턴스의 도커 대몬(daemon)으로 전달되는 컨테이너 속성 목록을 지정합니다. 다음과 같은 컨테이너 속성을 작업 정의에 사용할 수 있습니다. 단일 노드 작업의 경우 이러한 컨테이너 속성은 작업 정의 수준에서 설정됩니다. 다중 노드 병렬 작업의 경우 컨테이너 속성은 각 노드 그룹에 대해 [노드 속성](#nodeProperties) 수준에서 설정됩니다.

`command`  
컨테이너로 전달되는 명령입니다. 이 파라미터는 [도커 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Cmd`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `COMMAND` 파라미터로 매핑됩니다. 도커 `CMD` 파라미터에 대한 자세한 정보는 [https://docs.docker.com/engine/reference/builder/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)를 참조하세요.  

```
"command": ["string", ...]
```
유형: 문자열 배열  
필수 여부: 아니요

`environment`  
컨테이너로 전달할 환경 변수입니다. 이 파라미터는 [Docker 원격 API](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Env`와 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--env` 옵션에 매핑됩니다.  
자격 증명 데이터와 같은 민감한 정보에 대해서는 일반 텍스트 환경 변수를 사용하지 않는 것이 좋습니다.
환경 변수는 '`AWS_BATCH`'로 시작할 수 없습니다. 이 이름 지정 규칙은 AWS Batch 서비스가 설정하는 변수용으로 예약되어 있습니다.
유형: 키-값 쌍 배열  
필수 여부: 아니요    
`name`  
환경 변수의 이름입니다.  
유형: 문자열  
필수 항목 여부: `environment` 사용 시, 예  
`value`  
환경 변수의 값입니다.  
유형: 문자열  
필수 항목 여부: `environment` 사용 시, 예

```
"environment" : [
    { "name" : "envName1", "value" : "envValue1" },
    { "name" : "envName2", "value" : "envValue2" }
]
```

`executionRoleArn`  
작업 정의를 등록할 때 IAM 역할을 지정할 수 있습니다. 역할은 해당 정책에 지정된 API 작업을 호출할 수 있는 권한을 Amazon ECS 컨테이너 에이전트에 제공합니다. Fargate 리소스에서 실행되는 작업은 실행 역할을 제공해야 합니다. 자세한 내용은 [AWS Batch IAM 실행 역할](execution-IAM-role.md) 섹션을 참조하세요.  
유형: 문자열  
필수 여부: 아니요

`fargatePlatformConfiguration`  
Fargate 리소스에서 실행되는 작업에 대한 플랫폼 구성입니다. EC2 리소스에서 실행되는 작업에는 이 파라미터를 지정하지 않아야 합니다.  
유형: [FargatePlatformConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_FargatePlatformConfiguration.html) 객체  
필수 여부: 아니요    
`platformVersion`  
AWS Fargate 플랫폼 버전은 작업에 사용하거나 승인된 최신 버전의 AWS Fargate 플랫폼을 사용하는 데 `LATEST`가 사용됩니다.  
유형: 문자열  
기본값: `LATEST`  
필수 여부: 아니요

`image`  
작업을 시작하는 데 사용되는 이미지입니다. 이 문자열은 Docker 대몬으로 직접 전달됩니다. Docker Hub 레지스트리 내 이미지는 기본적으로 사용 가능합니다. 또한 `repository-url/image:tag`(을)를 사용하여 다른 리포지토리를 지정할 수도 있습니다. 최대 255개의 문자(대문자 및 소문자), 숫자, 하이픈, 밑줄, 콜론, 마침표, 슬래시 및 부호가 허용됩니다. 이 파라미터는 [Docker 원격 API](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Image`와 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)의 `IMAGE` 파라미터로 매핑됩니다.  
도커 이미지 아키텍처는 예정된 컴퓨팅 리소스의 프로세서 아키텍처와 일치해야 합니다. 예를 들어, ARM 기반 도커 이미지는 ARM 기반 컴퓨팅 리소스에서만 실행될 수 있습니다.
+ Amazon ECR Public 리포지토리에 있는 이미지는 전체 `registry/repository[:tag]` 또는 `registry/repository[@digest]` 명명 규칙을 사용합니다(예: `public.ecr.aws/registry_alias/my-web-app:latest`).
+ Amazon ECR 리포지토리에 있는 이미지는 전체 `registry/repository:[tag]` 명명 규칙을 사용합니다. 예를 들면 `aws_account_id.dkr.ecr.region.amazonaws.com``/my-web-app:latest`와 같습니다.
+ Docker Hub 공식 리포지토리 안의 이미지는 단일 이름을 사용합니다(예: `ubuntu` 또는 `mongo`).
+ Docker Hub의 다른 리포지토리에 저장된 이미지는 조직 이름으로 한정됩니다(예: `amazon/amazon-ecs-agent`).
+ 다른 온라인 리포지토리 안의 이미지는 도메인 이름을 사용하여 추가로 한정됩니다(예: `quay.io/assemblyline/ubuntu`).
유형: 문자열  
필수 항목 여부: 예

`instanceType`  
다중 노드 병렬 작업에 사용할 인스턴스 유형입니다. 다중 노드 병렬 작업에 있는 모든 노드 그룹은 동일한 인스턴스 유형을 사용해야 합니다. 이 파라미터는 단일 노드 컨테이너 작업이나 Fargate 리소스에서 실행되는 작업에는 적용할 수 없습니다.  
유형: 문자열  
필수 여부: 아니요

`jobRoleArn`  
작업 정의를 등록할 때 IAM 역할을 지정할 수 있습니다. 역할은 해당 정책에 지정된 API 작업을 호출할 수 있는 권한을 작업 컨테이너에 제공합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [태스크에 대한 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)을 참조하세요.  
유형: 문자열  
필수 여부: 아니요

`linuxParameters`  
컨테이너에 적용되는 Linux 수정(예: 디바이스 매핑에 대한 세부 정보)  

```
"linuxParameters": {
    "devices": [
        {
            "hostPath": "string",
            "containerPath": "string",
            "permissions": [
                "READ", "WRITE", "MKNOD"
            ]
        }
    ],
    "initProcessEnabled": true|false,
    "sharedMemorySize": 0,
    "tmpfs": [
        {
            "containerPath": "string",
            "size": integer,
            "mountOptions": [
                "string"
            ]
        }
    ],
    "maxSwap": integer,
    "swappiness": integer
}
```
유형: [LinuxParameters](https://docs.aws.amazon.com/batch/latest/APIReference/API_LinuxParameters.html) 객체  
필수 여부: 아니요    
`devices`  
컨테이너에 매핑되는 디바이스 목록 이 파라미터는 도커 원격 API[https://docs.docker.com/engine/api/v1.38/](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Devices` 및 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--device` 옵션에 매핑됩니다.  
이 파라미터는 Fargate 리소스에서 실행되는 작업에는 적용되지 않습니다.
유형: [Device](https://docs.aws.amazon.com/batch/latest/APIReference/API_Device.html) 객체 배열  
필수 여부: 아니요    
`hostPath`  
호스트 컨테이너 인스턴스에서 사용 가능한 디바이스가 있는 경로입니다.  
유형: 문자열  
필수 항목 여부: 예  
`containerPath`  
디바이스가 컨테이너에 노출되는 경로입니다. 지정하지 않으면 호스트 경로와 동일한 경로에 노출됩니다.  
유형: 문자열  
필수 여부: 아니요  
`permissions`  
컨테이너의 디바이스에 대한 권한입니다. 지정하지 않으면 권한이`READ`, `WRITE`, 및 `MKNOD`로 설정됩니다.  
유형: 문자열 배열  
필수 여부: 아니요  
유효한 값: `READ` \$1 `WRITE` \$1 `MKNOD`  
`initProcessEnabled`  
true로 설정된 경우 신호를 전달하고 프로세스의 결과를 받아들이는 컨테이너 내에서 `init` 프로세스를 실행합니다. 이 파라미터는 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--init` 옵션에 매핑됩니다. 이 파라미터를 사용하려면 컨테이너 인스턴스에서 Docker 원격 API 버전 1.25 이상을 사용해야 합니다. 컨테이너 인스턴스의 도커 원격 API 버전을 확인하려면, 컨테이너 인스턴스에 로그인한 후 `sudo docker version | grep "Server API version"` 명령을 실행합니다.  
유형: 부울  
필수 여부: 아니요  
`maxSwap`  
작업이 사용할 수 있는 총 스왑 메모리 양(MiB)입니다. 이 파라미터는 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--memory-swap` 옵션으로 변환되며 컨테이너 메모리의 합계에 `maxSwap` 값을 더한 값이 됩니다. 자세한 내용을 알아보려면 도커 설명서의 [`--memory-swap` 세부 정보](https://docs.docker.com/config/containers/resource_constraints/#--memory-swap-details)를 참조하세요.  
`maxSwap`의 `0` 값이 지정되면 컨테이너는 스왑을 사용하지 않습니다. 허용되는 값은 `0` 또는 양수입니다. `maxSwap` 파라미터를 생략하면 컨테이너는 실행되는 컨테이너 인스턴스에 대한 스왑 구성을 사용합니다. `maxSwap` 매개 변수를 사용하려면 `swappiness` 값을 설정해야 합니다.  
이 파라미터는 Fargate 리소스에서 실행되는 작업에는 적용되지 않습니다.
유형: Integer  
필수 여부: 아니요  
`sharedMemorySize`  
`/dev/shm` 볼륨의 크기 값(MiB)입니다. 이 파라미터는 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--shm-size` 옵션에 매핑됩니다.  
이 파라미터는 Fargate 리소스에서 실행되는 작업에는 적용되지 않습니다.
유형: Integer  
필수 여부: 아니요  
`swappiness`  
이를 통해 컨테이너의 메모리 스왑 동작을 조정할 수 있습니다. `0`의 `swappiness` 값은 절대적으로 필요한 경우가 아니면 스왑이 일어나지 않도록 합니다. `100`의 `swappiness` 값은 페이지가 적극적으로 스와핑되도록 합니다. 허용되는 값은 `0`과 `100` 사이의 숫자입니다. `swappiness` 파라미터를 지정하지 않으면 `60`의 기본값이 사용됩니다. `maxSwap` 값이 지정되지 않은 경우 이 파라미터는 무시됩니다. `maxSwap`가 0으로 설정된 경우 컨테이너는 스왑을 사용하지 않습니다. 이 파라미터는 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--memory-swappiness` 옵션에 매핑됩니다.  
컨테이너별 스왑 구성을 사용하는 경우 다음을 고려하세요.  
+ 컨테이너를 사용하려면 컨테이너 인스턴스에서 스왑 공간을 활성화하고 할당해야 합니다.
**참고**  
Amazon ECS에 최적화된 AMI에는 기본적으로 스왑이 활성화되어 있지 않습니다. 이 기능을 사용하려면 인스턴스에서 스왑을 활성화해야합니다. 자세한 내용은 **Amazon EC2사용자 안내서의 [인스턴스 스토어 스왑 볼륨](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html) 또는 [스왑 파일을 사용하여 Amazon EC2 인스턴스에서 스왑 스페이스로 작동하도록 메모리를 할당하려면 어떻게 해야 하나요?](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-memory-swap-file/)를 참조하세요.
+ 스왑 공간 파라미터는 EC2 리소스를 사용하는 작업 정의에 대해서만 지원됩니다.
+ `maxSwap` 및 `swappiness` 파라미터가 작업 정의에서 생략된 경우 각 컨테이너의 기본 `swappiness` 값은 60입니다. 총 스왑 사용량은 컨테이너 메모리 예약의 두 배로 제한됩니다.
이 파라미터는 Fargate 리소스에서 실행되는 작업에는 적용되지 않습니다.
유형: Integer  
필수 여부: 아니요  
`tmpfs`  
tmpfs 마운트의 컨테이너 경로, 마운트 옵션 및 크기입니다.  
유형: [Tmpfs](https://docs.aws.amazon.com/batch/latest/APIReference/API_Tmpfs.html) 객체 배열  
이 파라미터는 Fargate 리소스에서 실행되는 작업에는 적용되지 않습니다.
필수 여부: 아니요    
`containerPath`  
tmpfs 볼륨을 마운트할 컨테이너의 절대 파일 경로입니다.  
유형: 문자열  
필수 항목 여부: 예  
`mountOptions`  
tmpfs 볼륨 마운트 옵션의 목록입니다.  
유효한 값: "`defaults`" \$1 "`ro`" \$1 "`rw`" \$1 "`suid`" \$1 "`nosuid`" \$1 "`dev`" \$1 "`nodev`" \$1 "`exec`" \$1 "`noexec`" \$1 "`sync`" \$1 "`async`" \$1 "`dirsync`" \$1 "`remount`" \$1 "`mand`" \$1 "`nomand`" \$1 "`atime`" \$1 "`noatime`" \$1 "`diratime`" \$1 "`nodiratime`" \$1 "`bind`" \$1 "`rbind`" \$1 "`unbindable`" \$1 "`runbindable`" \$1 "`private`" \$1 "`rprivate`" \$1 "`shared`" \$1 "`rshared`" \$1 "`slave`" \$1 "`rslave`" \$1 "`relatime`" \$1 "`norelatime`" \$1 "`strictatime`" \$1 "`nostrictatime`" \$1 "`mode`" \$1 "`uid`" \$1 "`gid`" \$1 "`nr_inodes`" \$1 "`nr_blocks`" \$1 "`mpol`"  
유형: 문자열 배열  
필수 여부: 아니요  
`size`  
tmpfs 볼륨의 크기(MiB)입니다.  
유형: 정수  
필수 여부: 예

`logConfiguration`  
작업의 로그 구성 사양입니다.  
이 파라미터는 도커 원격 API[https://docs.docker.com/engine/api/v1.38/](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `LogConfig` 및 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--log-driver` 옵션에 매핑됩니다. 기본적으로 컨테이너는 도커 대몬이 사용하는 것과 동일한 로깅 드라이버를 사용합니다. 하지만 컨테이너는 이 파라미터를 사용하여 컨테이너 정의에 로그 드라이버를 지정함으로써 도커 대몬(daemon)과 다른 로깅 드라이버를 사용할 수 있습니다. 컨테이너에 다른 로깅 드라이버를 사용하려면 컨테이너 인스턴스 또는 원격 로그 서버에 로그 시스템이 올바르게 구성되어야 원격 로깅 옵션을 제공할 수 있습니다. 지원되는 다양한 로그 드라이버 옵션에 대한 자세한 정보는 Docker 설명서의 [로깅 드라이버 구성](https://docs.docker.com/engine/admin/logging/overview/)을 참조하세요.  
현재 AWS Batch는 도커 대몬(daemon)에서 사용 가능한 로깅 드라이버의 하위 세트를 지원합니다([LogConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html) 데이터 유형에 표시됨).
이 파라미터를 사용하려면 컨테이너 인스턴스에서 Docker 원격 API 버전 1.18 이상을 사용해야 합니다. 컨테이너 인스턴스의 도커 원격 API 버전을 확인하려면, 컨테이너 인스턴스에 로그인한 후 `sudo docker version | grep "Server API version"` 명령을 실행합니다.  

```
"logConfiguration": {
    "devices": [
        {
            "logDriver": "string",
            "options": {
                "optionName1" : "optionValue1",
                "optionName2" : "optionValue2"
            }
            "secretOptions": [
              {
                  "name" : "secretOptionName1",
                  "valueFrom" : "secretOptionArn1"
              },
              {
                  "name" : "secretOptionName2",
                  "valueFrom" : "secretOptionArn2"
              }
            ]
        }
    ]
}
```
유형: [LogConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html) 객체  
필수 여부: 아니요    
`logDriver`  
작업에 사용할 로그 드라이버입니다. 기본적으로 AWS Batch는 `awslogs` 로그 드라이버를 활성화합니다. 이 파라미터에 대해 나열된 유효한 값은 Amazon ECS 컨테이너 에이전트가 기본적으로 통신할 수 있는 로그 드라이버입니다.  
이 파라미터는 도커 원격 API[https://docs.docker.com/engine/api/v1.38/](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `LogConfig` 및 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--log-driver` 옵션에 매핑됩니다. 기본적으로 작업은 도커 대몬(daemon)이 사용하는 것과 동일한 로깅 드라이버를 사용합니다. 하지만 작업은 이 파라미터를 사용하여 작업 정의에 로그 드라이버를 지정함으로써 도커 대몬(daemon)과 다른 로깅 드라이버를 사용할 수 있습니다. 작업에 다른 로깅 드라이버를 지정하려면 컴퓨팅 환경의 컨테이너 인스턴스에 로그 시스템이 구성되어야 합니다. 또는 원격 로깅 옵션을 제공하도록 다른 로그 서버에 구성할 수도 있습니다. 지원되는 다양한 로그 드라이버 옵션에 대한 자세한 정보는 Docker 설명서의 [로깅 드라이버 구성](https://docs.docker.com/engine/admin/logging/overview/)을 참조하세요.  
현재 AWS Batch는 Docker 대몬(daemon)에서 사용 가능한 로깅 드라이버의 하위 집합을 지원합니다. 향후의 Amazon ECS 컨테이너 에이전트 릴리스에서 로그 드라이버가 추가될 예정입니다.
지원되는 로그 드라이버는 `awslogs`, `fluentd`, `gelf`, `json-file`, `journald`, `logentries`, `syslog`, `splunk`입니다.  
Fargate 리소스에서 실행되는 작업은 `awslogs` 및 `splunk` 로그 드라이버로 제한됩니다.
이 파라미터를 사용하려면 컨테이너 인스턴스에서 Docker 원격 API 버전 1.18 이상을 사용해야 합니다. 컨테이너 인스턴스의 도커 원격 API 버전을 확인하려면, 컨테이너 인스턴스에 로그인한 후 `sudo docker version | grep "Server API version"` 명령을 실행합니다.  
컨테이너 인스턴스에서 실행되는 Amazon ECS 컨테이너 에이전트는 `ECS_AVAILABLE_LOGGING_DRIVERS` 환경 변수를 사용하여 해당 인스턴스에서 사용 가능한 로깅 드라이버를 등록해야 합니다. 그렇지 않으면 해당 인스턴스에 배치된 컨테이너가 이러한 로그 구성 옵션을 사용할 수 없습니다. 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 컨테이너 에이전트 구성](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html)을 참조하세요.  
`awslogs`  
Amazon CloudWatch Logs 로깅 드라이버를 지정합니다. 자세한 내용은 [awslogs 로그 드라이버 사용](using_awslogs.md) 섹션 및 도커 설명서의 [Amazon CloudWatch Logs 로깅 드라이버](https://docs.docker.com/config/containers/logging/awslogs/)를 참조하세요.  
`fluentd`  
Fluentd 로깅 드라이버를 지정합니다. 사용법 및 옵션을 포함한 자세한 내용은 도커 설명서의 [Fluentd 로깅 드라이버](https://docs.docker.com/config/containers/logging/fluentd/)를 참조하세요.  
`gelf`  
GELF(Graylog Extended Format) 로깅 드라이버를 지정합니다. 사용법 및 옵션을 포함한 자세한 내용은 도커 설명서의 [Graylog Extended Format 로깅 드라이버](https://docs.docker.com/config/containers/logging/gelf/)를 참조하세요.  
`journald`  
저널드 로깅 드라이버를 지정합니다. 사용법 및 옵션을 포함한 자세한 내용은 도커 설명서의 [Journald 로깅 드라이버](https://docs.docker.com/config/containers/logging/journald/)를 참조하세요.  
`json-file`  
JSON 파일 로깅 드라이버를 지정합니다. 사용법 및 옵션을 포함한 자세한 내용은 도커 설명서의 [JSON 파일 로깅 드라이버](https://docs.docker.com/config/containers/logging/json-file/)를 참조하세요.  
`splunk`  
Splunk 로깅 드라이버를 지정합니다. 사용법 및 옵션을 포함한 자세한 내용은 도커 설명서의 [Splunk 로깅 드라이버](https://docs.docker.com/config/containers/logging/splunk/)를 참조하세요.  
`syslog`  
syslog 로깅 드라이버를 지정합니다. 사용법 및 옵션을 포함한 자세한 내용은 도커 설명서의 [Syslog 로깅 드라이버](https://docs.docker.com/config/containers/logging/syslog/)를 참조하세요.
유형: 문자열  
필수 항목 여부: 예  
유효한 값: `awslogs` \$1 `fluentd` \$1 `gelf` \$1 `journald` \$1 `json-file` \$1 `splunk` \$1 `syslog`  
위 목록에는 포함되지 않았지만 Amazon ECS 컨테이너 에이전트와 함께 사용하려는 사용자 지정 드라이버가 있는 경우 [GitHub에서 사용 가능](https://github.com/aws/amazon-ecs-agent)한 Amazon ECS 컨테이너 에이전트 프로젝트를 해당 드라이버와 함께 작동하도록 사용자 지정할 수 있습니다. 포함하고 싶은 변경에 대해서는 풀 요청을 제출할 것을 권장합니다. 하지만 Amazon Web Services는 현재 이 소프트웨어의 변경된 사본을 실행하는 요청을 지원하지 않습니다.  
`options`  
작업의 지정 로그 드라이버에 전송하는 로그 구성 옵션입니다.  
이 파라미터를 사용하려면 컨테이너 인스턴스에서 Docker 원격 API 버전 1.19 이상을 사용해야 합니다.  
유형: 문자열 대 문자열 맵  
필수 여부: 아니요  
`secretOptions`  
로그 구성에 전달할 암호를 나타내는 객체입니다. 자세한 내용은 [민감한 데이터 지정](specifying-sensitive-data.md) 섹션을 참조하세요.  
유형: 객체 배열  
필수 여부: 아니요    
`name`  
작업에서 설정할 로그 드라이버 옵션의 이름입니다.  
유형: 문자열  
필수 항목 여부: 예  
`valueFrom`  
컨테이너의 로그 구성에 노출할 암호의 Amazon 리소스 이름(ARN)입니다. 지원되는 값은 Secrets Manager 암호의 전체 ARN이거나 혹은 SSM Parameter Store 내 파라미터의 전체 ARN입니다.  
SSM Parameter Store 파라미터가 현재 실행 중인 태스크와 동일한 AWS 리전에 있는 경우 파라미터의 전체 ARN 또는 이름을 사용할 수 있습니다. 파라미터가 다른 리전에 있다면 전체 ARN을 지정해야 합니다.
유형: 문자열  
필수 항목 여부: 예

`memory`  
*이 파라미터는 더 이상 사용되지 않으므로 대신 `resourceRequirements`를 사용합니다.*  
작업에 예약된 메모리의 MiB 수입니다.  
`resourceRequirements`를 사용하는 방법의 예로, 작업 정의에 다음과 유사한 구문이 포함되어 있는지 살펴보겠습니다.  

```
"containerProperties": {
  "memory": 512
}
```
`resourceRequirements`를 사용하는 동등한 구문은 다음과 같습니다.  

```
"containerProperties": {
  "resourceRequirements": [
    {
      "type": "MEMORY",
      "value": "512"
    }
  ]
}
```
유형: 정수  
필수 여부: 예

`mountPoints`  
컨테이너에서 데이터 볼륨의 탑재 지점입니다. 이 파라미터는 [Docker 원격 API](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Volumes`와 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--volume` 옵션에 매핑됩니다.  

```
"mountPoints": [
                {
                  "sourceVolume": "string",
                  "containerPath": "string",
                  "readOnly": true|false
                }
              ]
```
유형: 객체 배열  
필수 여부: 아니요    
`sourceVolume`  
탑재할 볼륨의 이름입니다.  
유형: 문자열  
필수 항목 여부: `mountPoints` 사용 시, 예  
`containerPath`  
호스트 볼륨을 마운트할 컨테이너의 경로입니다.  
유형: 문자열  
필수 항목 여부: `mountPoints` 사용 시, 예  
`readOnly`  
이 값이 `true`일 경우 컨테이너에는 볼륨에 대한 읽기 전용 액세스가 부여됩니다. 이 값이 `false`일 경우 컨테이너는 볼륨에 쓸 수 있습니다.  
유형: 부울  
필수 여부: 아니요  
기본값: False

`networkConfiguration`  
Fargate 리소스에서 실행되는 작업에 대한 네트워크 구성입니다. EC2 리소스에서 실행되는 작업에는 이 파라미터를 지정하지 않아야 합니다.  

```
"networkConfiguration": { 
   "assignPublicIp": "string"
}
```
유형: 객체 배열  
필수 여부: 아니요    
`assignPublicIp`  
작업에 퍼블릭 IP 주소가 있는지 여부를 나타냅니다. 이는 작업에 아웃바운드 네트워크 액세스가 필요한 경우 필요합니다.  
유형: 문자열  
유효한 값: `ENABLED` \$1 `DISABLED`  
필수 여부: 아니요  
기본값: `DISABLED`

`privileged`  
이 파라미터가 true일 경우 컨테이너에는 호스트 컨테이너 인스턴스에 대한 승격된 권한을 부여받습니다(`root` 사용자와 비슷함). 이 파라미터는 [Docker 원격 API(Docker Remote API)](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성(Create a container)](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Privileged`(와)과 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--privileged` 옵션에 매핑됩니다. 이 파라미터는 Fargate 리소스에서 실행되는 작업에는 적용되지 않습니다. 입력하지 않거나 false로 지정합니다.  

```
"privileged": true|false
```
유형: 부울  
필수 여부: 아니요

`readonlyRootFilesystem`  
이 파라미터가 true일 경우 컨테이너에는 루트 파일 시스템에 대한 읽기 전용 액세스가 부여됩니다. 이 파라미터는 [Docker 원격 API](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `ReadonlyRootfs`와 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--read-only` 옵션에 매핑됩니다.  

```
"readonlyRootFilesystem": true|false
```
유형: 부울  
필수 여부: 아니요

`resourceRequirements`  
컨테이너에 할당할 리소스의 유형 및 양입니다. 지원되는 리소스에는 `GPU``MEMORY` 및 `VCPU`이 포함됩니다.  

```
"resourceRequirements" : [
  {
    "type": "GPU",
    "value": "number"
  }
]
```
유형: 객체 배열  
필수 여부: 아니요    
`type`  
컨테이너에 할당할 리소스 유형입니다. 지원되는 리소스에는 `GPU``MEMORY` 및 `VCPU`이 포함됩니다.  
유형: 문자열  
필수 항목 여부: `resourceRequirements` 사용 시, 예  
`value`  
컨테이너에 대해 예약할 지정된 자원의 수량입니다. 값은 지정된 `type`에 따라 다릅니다.    
type="GPU"  
컨테이너용으로 예약할 물리적 GPU의 개수입니다. 작업의 모든 컨테이너에 예약된 GPU 수는 작업이 실행되는 컴퓨팅 리소스에서 사용할 수 있는 GPU 수를 초과할 수 없습니다.  
type="MEMORY"  
컨테이너에 표시할 메모리의 하드 제한(MiB)입니다. 컨테이너가 여기서 지정된 메모리를 초과하려 하면 해당 컨테이너가 중지됩니다. 이 파라미터는 도커 원격 API[https://docs.docker.com/engine/api/v1.38/](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Memory` 및 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--memory` 옵션에 매핑됩니다. 한 작업에 대해 메모리를 최소한 4MiB 지정해야 합니다. 이것은 필수이지만 다중 노드 병렬(MNP) 작업의 경우 여러 위치에서 지정할 수 있습니다. 각 노드에 대해 한 번 이상 지정해야 합니다. 이 파라미터는 도커 원격 API[https://docs.docker.com/engine/api/v1.38/](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Memory` 및 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--memory` 옵션에 매핑됩니다.  
특정 인스턴스 유형에 대해 작업에 가능한 한 많은 메모리를 제공하여 리소스 사용률을 최대화하려는 경우 [컴퓨팅 리소스 메모리 관리](memory-management.md) 섹션을 참조하세요.
Fargate 리소스에서 실행되는 작업의 경우 `value`는 지원되는 값 중 하나와 일치해야 합니다. 또한 `VCPU` 값은 해당 메모리 값에 지원되는 값 중 하나여야 합니다.      
<a name="Fargate-memory-vcpu"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/batch/latest/userguide/job_definition_parameters.html)  
type="VCPU"  
작업에 예약된 vCPU 개수입니다. 이 파라미터는 [도커 원격 API](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `CpuShares` 및 [docker run](https://docs.docker.com/engine/reference/run/)에 대한 `--cpu-shares` 옵션에 매핑됩니다. 각 vCPU는 1,024개의 CPU 공유와 동일합니다. EC2 리소스에서 실행되는 작업의 경우 하나 이상의 vCPU를 지정해야 합니다. 이것은 필수이지만 여러 위치에서 지정할 수 있습니다. 각 노드에 대해 한 번 이상 지정해야 합니다.  
Fargate 리소스에서 실행되는 작업의 경우 `value`는 지원되는 값 중 하나와 일치해야 하며 `MEMORY` 값은 해당 VCPU 값에 대해 지원되는 값 중 하나여야 합니다. 지원되는 값은 0.25, 0.5, 1, 2, 4, 8 및 16입니다.  
Fargate 온디맨드 vCPU 리소스 수 할당량의 기본값은 vCPU 6개입니다. Fargate 할당량에 대한 자세한 내용은 *Amazon Web Services 일반 참조*의 [AWS Fargate 할당량](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html#service-quotas-fargate)을 참조하세요.
유형: 문자열  
필수 항목 여부: `resourceRequirements` 사용 시, 예

`secrets`  
환경 변수로 노출되는 작업의 암호입니다. 자세한 내용은 [민감한 데이터 지정](specifying-sensitive-data.md) 섹션을 참조하세요.  

```
"secrets": [
    {
      "name": "secretName1",
      "valueFrom": "secretArn1"
    },
    {
      "name": "secretName2",
      "valueFrom": "secretArn2"
    }
    ...
]
```
유형: 객체 배열  
필수 여부: 아니요    
`name`  
암호가 포함된 환경 변수의 이름입니다.  
유형: 문자열  
필수 항목 여부: `secrets` 사용 시, 예  
  
`valueFrom`  
컨테이너에 노출될 암호입니다. 지원되는 값은 Secrets Manager 암호의 전체 Amazon 리소스 이름(ARN)이거나 혹은 SSM Parameter Store 내 파라미터의 전체 ARN입니다.  
SSM Parameter Store 파라미터가 시작 중인 작업과 동일한 AWS 리전에 있는 경우 파라미터의 전체 ARN 또는 이름을 사용할 수 있습니다. 파라미터가 다른 리전에 있다면 전체 ARN을 지정해야 합니다.
유형: 문자열  
필수 항목 여부: `secrets` 사용 시, 예

`ulimits`  
컨테이너에 설정할 `ulimits` 값의 목록입니다. 이 파라미터는 [Docker 원격 API](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `Ulimits`와 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--ulimit` 옵션에 매핑됩니다.  

```
"ulimits": [
  {
    "name": string,
    "softLimit": integer,
    "hardLimit": integer
  }
  ...
]
```
유형: 객체 배열  
필수 여부: 아니요    
`name`  
`type`의 `ulimit`입니다.  
유형: 문자열  
필수 항목 여부: `ulimits` 사용 시, 예  
  
`hardLimit`  
`ulimit` 유형의 하드 제한입니다.  
유형: 정수  
필수 항목 여부: `ulimits` 사용 시, 예  
  
`softLimit`  
`ulimit` 유형의 소프트 제한입니다.  
유형: 정수  
필수 항목 여부: `ulimits` 사용 시, 예  


`user`  
컨테이너 내부에서 사용할 사용자 이름입니다. 이 파라미터는 [Docker 원격 API](https://docs.docker.com/engine/api/v1.38/)의 [컨테이너 생성](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) 섹션에 있는 `User`와 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)에 대한 `--user` 옵션에 매핑됩니다.  

```
"user": "string"
```
유형: 문자열  
필수 여부: 아니요

`vcpus`  
*이 파라미터는 더 이상 사용되지 않으므로 대신 `resourceRequirements`를 사용합니다.*  
컨테이너에 예약된 vCPU 개수입니다.  
`resourceRequirements`를 사용하는 방법의 예로, 작업 정의에 다음과 비슷한 줄이 포함되어 있는 경우  

```
"containerProperties": {
  "vcpus": 2
}
```
`resourceRequirements`를 사용하는 동등한 줄은 다음과 같습니다.  

```
"containerProperties": {
  "resourceRequirements": [
    {
      "type": "VCPU",
      "value": "2"
    }
  ]
}
```
유형: 정수  
필수 여부: 예

`volumes`  
작업 정의를 등록할 때 컨테이너 인스턴스의 도커 대몬(daemon)으로 전달되는 볼륨 목록을 지정할 수 있습니다. 컨테이너 속성에는 다음 파라미터를 사용할 수 있습니다.  

```
"volumes": [
  {
    "name": "string",
    "host": {
      "sourcePath": "string"
    },
    "efsVolumeConfiguration": {
      "authorizationConfig": {
        "accessPointId": "string",
        "iam": "string"
      },
      "fileSystemId": "string",
      "rootDirectory": "string",
      "transitEncryption": "string",
      "transitEncryptionPort": number
    }
  }
]
```  
`name`  
볼륨의 이름입니다. 최대 255개의 문자(대문자 및 소문자), 숫자, 하이픈 및 밑줄이 허용됩니다. 이 이름은 컨테이너 정의 `mountPoints`의 `sourceVolume` 파라미터에서 참조됩니다.  
유형: 문자열  
필수 여부: 아니요  
`host`  
`host` 파라미터의 콘텐츠는 데이터 볼륨이 호스트 컨테이너 인스턴스에서 지속되는지 여부와 저장 위치를 결정합니다. `host` 파라미터가 비어 있으면 도커 대몬(daemon)이 데이터 볼륨의 호스트 경로를 할당합니다. 그러나 연결된 컨테이너의 실행이 중지된 후에는 데이터 유지가 보장되지 않습니다.  
이 파라미터는 Fargate 리소스에서 실행되는 작업에는 적용되지 않습니다.
유형: 객체  
필수 여부: 아니요    
`sourcePath`  
컨테이너에 제공되는 호스트 컨테이너 인스턴스의 경로입니다. 이 파라미터가 비어 있으면 Docker 대몬이 사용자 대신 호스트 경로를 할당합니다.  
`host` 파라미터에 `sourcePath` 파일 위치가 들어 있으면, 사용자가 수동으로 삭제하지 않는 한 데이터 볼륨이 호스트 컨테이너 인스턴스 상에 지정된 위치를 유지합니다. `sourcePath` 값이 호스트 컨테이너 인스턴스에 없을 경우 도커 대몬(daemon)이 해당 경로를 생성합니다. 해당 위치가 있을 경우 소스 경로 폴더의 콘텐츠를 내보냅니다.  
유형: 문자열  
필수 여부: 아니요  
`efsVolumeConfiguration`  
이 파라미터는 태스크 저장을 위해 Amazon Elastic File System 파일 시스템을 사용할 때 지정됩니다. 자세한 내용은 [Amazon EFS 볼륨](efs-volumes.md) 섹션을 참조하세요.  
유형: 객체  
필수 여부: 아니요    
`authorizationConfig`  
Amazon EFS 파일 시스템에 대한 권한 부여 구성 세부 정보입니다.  
유형: 문자열  
필수 여부: 아니요    
`accessPointId`  
사용할 Amazon EFS 액세스 포인트 ID입니다. 액세스 포인트를 지정하는 경우 `EFSVolumeConfiguration`에 지정된 루트 디렉터리 값을 생략하거나 `/`로 설정해야 합니다. 그러면 EFS 액세스 포인트에 설정된 경로가 적용됩니다. 액세스 포인트를 사용하는 경우 `EFSVolumeConfiguration`에서 전송 중 데이터 암호화를 활성화해야 합니다. 자세한 정보는 *Amazon Elastic File System 사용 설명서*의 [Amazon EFS 액세스 포인트 태스크를](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html) 참조세요.  
유형: 문자열  
필수 여부: 아니요  
`iam`  
Amazon EFS 파일 시스템을 탑재할 때 작업 정의에 정의된 AWS Batch 작업 IAM 역할을 사용할지 여부를 결정합니다. 활성화된 경우 `EFSVolumeConfiguration`에서 전송 중 데이터 암호화를 활성화해야 합니다. 이 파라미터가 누락되면 `DISABLED`의 기본값이 사용됩니다. 자세한 내용은 [Amazon EFS 액세스 포인트 사용](efs-volumes.md#efs-volume-accesspoints) 섹션을 참조하세요.  
유형: 문자열  
유효한 값: `ENABLED` \$1 `DISABLED`  
필수 여부: 아니요  
`fileSystemId`  
사용할 Amazon EFS 파일 시스템 ID입니다.  
유형: 문자열  
필수 여부: 아니요  
`rootDirectory`  
호스트 내의 루트 디렉터리로 탑재할 Amazon EFS 파일 시스템 내 디렉터리입니다. 이 파라미터가 생략되면 Amazon EFS 볼륨의 루트가 사용됩니다. `/`를 지정하면 이 파라미터를 생략하는 것과 동일한 효과가 있습니다. 최대 길이는 4,096자입니다.  
`authorizationConfig`에서 EFS 액세스 포인트를 지정하는 경우 루트 디렉터리 파라미터를 생략하거나 `/`로 설정해야 합니다. 그러면 Amazon EFS 액세스 포인트에 설정된 경로가 적용됩니다.
유형: 문자열  
필수 여부: 아니요  
`transitEncryption`  
암호화에서 Amazon ECS 호스트와 Amazon EFS 서버 간 전송 중 Amazon EFS 데이터를 활성화할지 여부를 결정합니다. Amazon EFS IAM 권한 부여를 사용하는 경우 전송 중 데이터 암호화를 활성화해야 합니다. 이 파라미터가 누락되면 `DISABLED`의 기본값이 사용됩니다. 자세한 내용을 알아보려면 *Amazon Elastic File System 사용 설명서*의 [전송 중 데이터 암호화](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)를 참조하세요.  
유형: 문자열  
유효한 값: `ENABLED` \$1 `DISABLED`  
필수 여부: 아니요  
`transitEncryptionPort`  
Amazon ECS 호스트와 Amazon EFS 서버 간에 암호화된 데이터를 전송할 때 사용할 포트입니다. 전송 중 데이터 암호화 포트를 지정하지 않으면 Amazon EFS 탑재 헬퍼가 사용하는 포트 선택 전략이 사용됩니다. 이 값은 0\$165,535여야 합니다. 자세한 정보는 *Amazon Elastic File System 사용 설명서*의 [EFS 탑재 헬퍼](https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html)를 참조하세요.  
유형: Integer  
필수 여부: 아니요

## Amazon EKS 속성
<a name="job-definition-parameters-eks-properties"></a>

Amazon EKS 기반 작업과 관련된 다양한 속성이 있는 객체입니다. Amazon ECS 기반 작업 정의에 지정해서는 안 됩니다.

`podProperties`  
작업의 Kubernetes 포드 리소스에 대한 속성입니다.  
유형: [EksPodProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html) 객체  
필수 여부: 아니요    
`containers`  
Amazon EKS 포드에서 사용되는 컨테이너의 속성입니다.  
유형: [EksContainer](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainer.html) 객체  
필수 여부: 아니요    
`args`  
진입점에 대한 인수 배열입니다. 지정하지 않으면 컨테이너 이미지의 `CMD`가 사용됩니다. 이는 Kubernetes에서 [포드](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/)의 [진입점](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#entrypoint) 부분에 있는 `args` 멤버에 해당합니다. 환경 변수 참조는 컨테이너의 환경을 사용하여 확장됩니다.  
참조된 환경 변수가 존재하지 않는 경우 명령의 참조는 변경되지 않습니다. 예를 들어, 참조가 '`$(NAME1)`'이고 `NAME1` 환경 변수가 존재하지 않는 경우 명령 문자열은 '`$(NAME1)`'로 유지됩니다 `$$`는 `$`로 바뀌고 결과 문자열은 확장되지 않습니다. 예를 들어, `$$(VAR_NAME)`은 `VAR_NAME` 환경 변수의 존재 여부에 관계없이 `$(VAR_NAME)`으로 전달됩니다. 자세한 내용은 *Dockerfile 참조*의 [CMD](https://docs.docker.com/engine/reference/builder/#cmd)와 *Kubernetes 문서*의 [포드에 대한 명령 및 인자 정의](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/)를 참조하세요.  
유형: 문자열 배열  
필수 여부: 아니요  
`command`  
컨테이너의 진입점입니다. 쉘 내에서는 실행되지 않습니다. 지정하지 않으면 컨테이너 이미지의 `ENTRYPOINT`가 사용됩니다. 환경 변수 참조는 컨테이너의 환경을 사용하여 확장됩니다.  
참조된 환경 변수가 존재하지 않는 경우 명령의 참조는 변경되지 않습니다. 예를 들어, 참조가 '`$(NAME1)`'이고 `NAME1` 환경 변수가 존재하지 않는 경우 명령 문자열은 '`$(NAME1)`'로 유지됩니다 '`$$`'는 `$`로 바뀌고 결과 문자열은 확장되지 않습니다. 예를 들어, `$$(VAR_NAME)`은 `VAR_NAME` 환경 변수의 존재 여부에 관계없이 `$(VAR_NAME)`으로 전달됩니다. 진입점은 업데이트할 수 없습니다. 자세한 내용은 *Dockerfile 참조*의 [진입점](https://docs.docker.com/engine/reference/builder/#entrypoint)과 *Kubernetes 문서*의 [컨테이너에 대한 명령 및 인자 정의](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/)와 [진입점](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#entrypoint)을 참조하세요.  
유형: 문자열 배열  
필수 여부: 아니요  
`env`  
컨테이너로 전달할 환경 변수입니다.  
환경 변수는 '`AWS_BATCH`'로 시작할 수 없습니다. 이 이름 지정 규칙은 AWS Batch가 설정하는 변수용으로 예약되어 있습니다.
유형: [EksContainerEnvironmentVariable](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerEnvironmentVariable.html) 객체 배열  
필수 여부: 아니요    
`name`  
환경 변수의 이름입니다.  
유형: 문자열  
필수 항목 여부: 예  
`value`  
환경 변수의 값입니다.  
유형: 문자열  
필수 여부: 아니요  
`image`  
컨테이너를 시작하는 데 사용되는 도커 이미지입니다.  
유형: 문자열  
필수 항목 여부: 예  
`imagePullPolicy`  
컨테이너에 대한 이미지 가져오기 정책입니다. 지원되는 값은 `Always`, `IfNotPresent` 및 `Never`입니다. 이 파라미터의 기본값은 `IfNotPresent`입니다. 그러나 `:latest` 태그가 지정된 경우 `Always`로 기본 설정됩니다. 자세한 내용은 *Kubernetes 문서*의 [이미지 업데이트](https://kubernetes.io/docs/concepts/containers/images/#updating-images)를 참조하세요.  
유형: 문자열  
필수 여부: 아니요  
`name`  
컨테이너의 이름입니다. 이름을 지정하지 않으면 기본 이름 '`Default`'가 사용됩니다. 포드의 컨테이너마다 고유한 이름이 있어야 합니다.  
유형: 문자열  
필수 여부: 아니요  
`resources`  
컨테이너에 할당할 리소스의 유형 및 양입니다. 지원되는 리소스에는 `memory``cpu` 및 `nvidia.com/gpu`이 포함됩니다. 자세한 내용은 *Kubernetes 문서*의 [포드 및 컨테이너 리소스 관리](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/)를 참조하세요.  
유형: [EksContainerResourceRequirements](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerResourceRequirements.html) 객체  
필수 여부: 아니요    
`limits`  
컨테이너용으로 예약할 리소스의 유형 및 수량입니다. 값은 지정된 `name`에 따라 다릅니다. `limits` 또는 `requests` 객체를 사용하여 리소스를 요청할 수 있습니다.    
메모리  
정수를 사용하는 컨테이너의 메모리 하드 제한(MiB)으로 접미사는 'Mi'입니다. 컨테이너가 지정된 메모리를 초과하려 하면 해당 컨테이너가 중지됩니다. 작업에 대해 최소 4MiB의 메모리를 지정해야 합니다. `limits`, `requests` 또는 둘 다에 `memory`를 지정할 수 있습니다. `memory`가 두 곳 모두에 지정된 경우 `limits`에 지정된 값이 `requests`에 지정된 값과 같아야 합니다.  
리소스 활용도를 극대화하려면 사용 중인 특정 인스턴스 유형에 대해 가능한 한 많은 메모리를 작업에 제공합니다. 자세한 방법은 [컴퓨팅 리소스 메모리 관리](memory-management.md)을 참조하세요.  
cpu  
컨테이너용으로 예약된 CPU 개수입니다. 값은 `0.25`의 짝수 배수여야 합니다. `limits`, `requests` 또는 둘 다에 `cpu`를 지정할 수 있습니다. `cpu`가 두 곳 모두에 지정된 경우 `limits`에 지정된 값이 `requests`에 지정된 값 이상이어야 합니다.  
nvidia.com/gpu  
컨테이너용으로 예약된 GPU 개수입니다. 값은 정수여야 합니다. `limits`, `requests` 또는 둘 다에 `memory`를 지정할 수 있습니다. `memory`가 두 곳 모두에 지정된 경우 `limits`에 지정된 값이 `requests`에 지정된 값과 같아야 합니다.
유형: 문자열 간 맵  
값 길이 제약 조건: 최소 길이는 1. 최대 길이는 256.  
필수 여부: 아니요  
`requests`  
컨테이너에 요청할 리소스의 유형 및 수량입니다. 값은 지정된 `name`에 따라 다릅니다. `limits` 또는 `requests` 객체를 사용하여 리소스를 요청할 수 있습니다.    
메모리  
정수를 사용하는 컨테이너의 메모리 하드 제한(MiB)으로 접미사는 'Mi'입니다. 컨테이너가 지정된 메모리를 초과하려 하면 해당 컨테이너가 중지됩니다. 작업에 대해 최소 4MiB의 메모리를 지정해야 합니다. `limits`, `requests` 또는 둘 다에 `memory`를 지정할 수 있습니다. `memory`가 둘 다에 지정된 경우 `limits`에 지정된 값이 `requests`에 지정된 값과 같아야 합니다.  
특정 인스턴스 유형에 대해 작업에 가능한 한 많은 메모리를 제공하여 리소스 사용률을 최대화하려는 경우 [컴퓨팅 리소스 메모리 관리](memory-management.md) 섹션을 참조하세요.  
cpu  
컨테이너용으로 예약된 CPU 개수입니다. 값은 `0.25`의 짝수 배수여야 합니다. `limits`, `requests` 또는 둘 다에 `cpu`를 지정할 수 있습니다. `cpu`가 둘 다에 지정된 경우 `limits`에 지정된 값이 `requests`에 지정된 값 이상이어야 합니다.  
nvidia.com/gpu  
컨테이너용으로 예약된 GPU 개수입니다. 값은 정수여야 합니다. `limits`, `requests` 또는 둘 다에 `nvidia.com/gpu`를 지정할 수 있습니다. `nvidia.com/gpu`가 둘 다에 지정된 경우 `limits`에 지정된 값이 `requests`에 지정된 값과 같아야 합니다.
유형: 문자열 간 맵  
값 길이 제약 조건: 최소 길이는 1. 최대 길이는 256.  
필수 여부: 아니요  
`securityContext`  
작업의 보안 컨텍스트입니다. 자세한 내용은 *Kubernetes 문서*의 [포드 또는 컨테이너에 대한 보안 컨텍스트 구성](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)을 참조하세요.  
유형: [EksContainerSecurityContext](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerSecurityContext.html) 객체  
필수 여부: 아니요    
`privileged`  
이 파라미터가 `true`일 경우 컨테이너에는 호스트 컨테이너 인스턴스에 대한 승격된 권한이 부여됩니다. 권한 수준은 `root` 사용자 권한과 유사합니다. 기본값은 `false`입니다. 이 파라미터는 *Kubernetes 문서*의 [권한이 있는 포드 보안 정책](https://kubernetes.io/docs/concepts/security/pod-security-policy/#privileged)에 있는 `privileged` 정책에 매핑됩니다.  
유형: 부울  
필수 여부: 아니요  
`readOnlyRootFilesystem`  
이 파라미터가 `true`일 경우 컨테이너에는 루트 파일 시스템에 대한 읽기 전용 액세스가 부여됩니다. 기본값은 `false`입니다. 이 파라미터는 *Kubernetes 문서*의 [볼륨 및 파일 시스템 포드 보안 정책](https://kubernetes.io/docs/concepts/security/pod-security-policy/#volumes-and-file-systems)에 있는 `ReadOnlyRootFilesystem` 정책에 매핑됩니다.  
유형: 부울  
필수 여부: 아니요  
`runAsGroup`  
이 파라미터를 지정하면 지정된 그룹 ID(`gid`)로 컨테이너가 실행됩니다. 이 파라미터를 지정하지 않으면 기본값은 이미지 메타데이터에 지정된 그룹입니다. 이 파라미터는 *Kubernetes 문서*의 [사용자 및 그룹 포드 보안 정책](https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups)에 있는 `RunAsGroup` 및 `MustRunAs` 정책에 매핑됩니다.  
유형: Long  
필수 여부: 아니요  
`runAsNonRoot`  
이 파라미터를 지정하면 컨테이너는 `uid`가 0이 아닌 사용자로 실행됩니다. 이 파라미터를 지정하지 않으면 해당 규칙이 적용됩니다. 이 파라미터는 *Kubernetes 문서*의 [사용자 및 그룹 포드 보안 정책](https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups)에 있는 `RunAsUser` 및 `MustRunAsNonRoot` 정책에 매핑됩니다.  
유형: Long  
필수 여부: 아니요  
`runAsUser`  
이 파라미터를 지정하면 지정된 사용자 ID(`uid`)로 컨테이너가 실행됩니다. 이 파라미터를 지정하지 않으면 기본값은 이미지 메타데이터에 지정된 사용자입니다. 이 파라미터는 *Kubernetes 문서*의 [사용자 및 그룹 포드 보안 정책](https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups)에 있는 `RunAsUser` 및 `MustRanAs` 정책에 매핑됩니다.  
유형: Long  
필수 여부: 아니요  
`volumeMounts`  
Amazon EKS 작업의 컨테이너에 볼륨이 마운트됩니다. Kubernetes의 볼륨 및 볼륨 마운트에 대한 자세한 내용은 *Kubernetes 문서*의 [볼륨](https://kubernetes.io/docs/concepts/storage/volumes/)을 참조하세요.  
유형: [EksContainerVolumeMount](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerVolumeMount.html) 객체 배열  
필수 여부: 아니요    
`mountPath`  
볼륨이 마운트되는 컨테이너의 경로입니다.  
유형: 문자열  
필수 여부: 아니요  
`name`  
볼륨 마운트의 이름입니다. 포드에 있는 볼륨 중 하나의 이름과 일치해야 합니다.  
유형: 문자열  
필수 여부: 아니요  
`readOnly`  
이 값이 `true`일 경우 컨테이너에는 볼륨에 대한 읽기 전용 액세스가 부여됩니다. 그렇지 않으면 컨테이너가 볼륨에 쓸 수 있습니다. 기본값은 `false`입니다.  
유형: 부울  
필수 여부: 아니요  
`dnsPolicy`  
포드의 DNS 정책입니다. 기본값은 `ClusterFirst`입니다. `hostNetwork` 파라미터가 지정되지 않은 경우 기본값은 `ClusterFirstWithHostNet`입니다. `ClusterFirst`는 구성된 클러스터 도메인 접미사와 일치하지 않는 모든 DNS 쿼리가 노드에서 상속된 업스트림 이름 서버로 전달됨을 나타냅니다. [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html) API 작업에서 `dnsPolicy`에 대해 지정된 값이 없으면 [DescribeJobDefinitions](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobDefinitions.html) 또는 [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) API 작업에서 `dnsPolicy`에 대한 값이 반환되지 않습니다. 포드 사양 설정에는 `hostNetwork` 파라미터 값에 따라 `ClusterFirst` 또는 `ClusterFirstWithHostNet`이 포함됩니다. 자세한 내용은 *Kubernetes 문서*의 [포드 DNS 정책](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy)을 참조하세요.  
유효한 값: `Default` \$1 `ClusterFirst` \$1 `ClusterFirstWithHostNet`  
유형: 문자열  
필수 여부: 아니요  
`hostNetwork`  
포드가 호스트의 네트워크 IP 주소를 사용하는지 여부를 나타냅니다. 기본값은 `true`입니다. 이를 `false`로 설정하면 Kubernetes 포드 네트워킹 모델이 활성화됩니다. 대부분의 AWS Batch 워크로드는 송신 전용이며 수신 연결에 대해 포드마다 IP 할당 오버헤드가 필요하지 않습니다. 자세한 내용은 *Kubernetes 문서*의 [호스트 네임스페이스](https://kubernetes.io/docs/concepts/security/pod-security-policy/#host-namespaces)와 [포드 네트워킹](https://kubernetes.io/docs/concepts/workloads/pods/#pod-networking)을 참조하세요.  
유형: 부울  
필수 여부: 아니요  
`serviceAccountName`  
포드를 실행하는 데 사용되는 서비스 계정의 이름입니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [Kubernetes 서비스 계정](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html)과 [IAM 역할을 수임하도록 Kubernetes 서비스 계정 구성](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html) 및 *Kubernetes 문서*의 [포드에 대한 서비스 계정 구성](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/)을 참조하세요.  
유형: 문자열  
필수 여부: 아니요  
`volumes`  
Amazon EKS 리소스를 사용하는 작업 정의에 대한 볼륨을 지정합니다.  
유형: [EKSVolume](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksVolume.html) 객체 배열  
필수 여부: 아니요    
emptyDir  
Kubernetes `emptyDir` 볼륨의 구성을 지정합니다. `emptyDir` 볼륨은 포드가 노드에 할당될 때 처음 생성됩니다. 포드가 해당 노드에서 실행되는 한 존재합니다. `emptyDir` 볼륨은 처음에는 비어 있습니다. 포드의 모든 컨테이너는 `emptyDir` 볼륨의 파일을 읽고 쓸 수 있습니다. 그러나 `emptyDir` 볼륨은 각 컨테이너에서 동일하거나 다른 경로에 마운트될 수 있습니다. 어떤 이유로든 포드가 노드에서 제거되면 `emptyDir`의 데이터는 영구적으로 삭제됩니다. 자세한 내용은 *Kubernetes 문서*의 [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)를 참조하세요.  
유형: [EksEmptyDir](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksEmptyDir.html) 객체  
필수 여부: 아니요    
medium  
볼륨을 저장할 매체입니다. 기본값은 노드의 스토리지를 사용하는 빈 문자열입니다.    
""  
**(기본값)** 노드의 디스크 스토리지를 사용합니다.  
"Memory"  
노드의 RAM이 지원하는 `tmpfs` 볼륨을 사용합니다. 노드가 재부팅되면 볼륨의 콘텐츠가 손실되고 볼륨의 모든 스토리지는 컨테이너의 메모리 제한에 포함됩니다.
유형: 문자열  
필수 여부: 아니요  
sizeLimit  
볼륨의 최대 크기입니다. 기본적으로 최대 크기는 정의되어 있지 않습니다.  
유형: 문자열  
길이 제약 조건: 최소 길이는 1입니다. 최대 길이는 256.  
필수 여부: 아니요  
hostPath  
Kubernetes `hostPath` 볼륨의 구성을 지정합니다. `hostPath` 볼륨은 호스트 노드의 파일 시스템에 있는 기존 파일 또는 디렉터리를 포드에 마운트합니다. 자세한 내용은 *Kubernetes 문서*의 [hostPath](https://kubernetes.io/docs/concepts/storage/volumes/#hostpath)를 참조하세요.  
유형: [EksHostPath](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksHostPath.html) 객체  
필수 여부: 아니요    
경로  
포드의 컨테이너에 마운트할 호스트의 파일 또는 디렉터리 경로입니다.  
유형: 문자열  
필수 여부: 아니요  
name  
볼륨의 이름입니다. 이름은 DNS 하위 도메인 이름으로 허용되어야 합니다. 자세한 내용은 *Kubernetes 문서*의 [DNS 서브도메인 이름](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names)을 참조하세요.  
유형: 문자열  
필수 항목 여부: 예  
보안 암호  
Kubernetes `secret` 볼륨의 구성을 지정합니다. 자세한 내용은 *Kubernetes 설명서*의 [암호](https://kubernetes.io/docs/concepts/storage/volumes/#secret)를 참조하세요.  
유형: [EksSecret](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksSecret.html) 객체  
필수 여부: 아니요    
선택 사항  
암호 또는 암호 키를 정의해야 하는지 여부를 지정합니다.  
유형: 부울  
필수 여부: 아니요  
secretName  
암호의 이름입니다. 이름은 DNS 하위 도메인 이름으로 허용되어야 합니다. 자세한 내용은 *Kubernetes 문서*의 [DNS 서브도메인 이름](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names)을 참조하세요.  
유형: 문자열  
필수 항목 여부: 예

## 플랫폼 기능
<a name="job-definition-parameters-platform-capabilities"></a>

`platformCapabilities`  
작업 정의에 필요한 플랫폼 기능입니다. 값을 지정하지 않은 경우 기본값은 `EC2`입니다. Fargate 리소스에서 실행되는 작업에는 `FARGATE`가 지정됩니다.  
작업이 Amazon EKS 리소스에서 실행되는 경우, `platformCapabilities`를 지정하지 않아야 합니다.
유형: 문자열  
유효한 값: `EC2` \$1 `FARGATE`  
필수 여부: 아니요

## 태그 전파
<a name="job-definition-parameters-propagate-tags"></a>

`propagateTags`  
작업 또는 작업 정의에서 해당 Amazon ECS 작업으로 태그를 전파할지 여부를 지정합니다. 값을 지정하지 않으면 태그가 전파되지 않습니다. 태그는 작업이 생성될 때만 작업에 전파될 수 있습니다. 이름이 같은 태그의 경우 작업 태그가 작업 정의 태그보다 우선합니다. 작업 및 작업 정의의 결합된 태그의 총 수가 50개를 넘으면 작업이 `FAILED` 상태로 전환됩니다.  
작업이 Amazon EKS 리소스에서 실행되는 경우, `propagateTags`를 지정하지 않아야 합니다.
유형: 부울  
필수 여부: 아니요

## 노드 속성
<a name="nodeProperties"></a>

`nodeProperties`  
다중 노드 병렬 작업 정의를 등록할 때 노드 속성의 목록을 지정해야 합니다. 이러한 노드 속성은 작업에 사용할 노드 수, 주 노드 인덱스 및 사용할 다양한 노드 범위를 정의합니다. 작업이 Fargate 리소스에서 실행되는 경우, `nodeProperties`를 지정할 수 없습니다. 대신 `containerProperties`를 사용합니다. 다음과 같은 노드 속성을 작업 정의에 사용할 수 있습니다. 자세한 내용은 [다중 노드 병렬 작업](multi-node-parallel-jobs.md) 섹션을 참조하세요.  
작업이 Amazon EKS 리소스에서 실행되는 경우, `nodeProperties`를 지정하지 않아야 합니다.
유형: [NodeProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeProperties.html) 객체  
필수 여부: 아니요    
`mainNode`  
다중 노드 병렬 작업의 기본 노드에 대한 노드 인덱스를 지정합니다. 이 노드 인덱스 값은 노드 수보다 적어야 합니다.  
유형: 정수  
필수 여부: 예  
`numNodes`  
다중 노드 병렬 작업과 연결된 노드 수입니다.  
유형: 정수  
필수 여부: 예  
`nodeRangeProperties`  
노드 범위 및 다중 노드 병렬 작업과 연결된 해당 속성의 목록입니다.  
노드 그룹은 모두 동일한 컨테이너 속성을 공유하는 작업 노드의 동일한 그룹입니다. AWS Batch를 사용하여 각 작업에 대해 최대 5개의 개별 노드 그룹을 지정할 수 있습니다.
유형: [NodeRangeProperty](https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeRangeProperty.html) 객체의 배열  
필수 여부: 예    
`targetNodes`  
노드 인덱스 값을 사용하는 노드의 범위입니다. `0:3`의 범위는 인덱스 값이 `0`-`3`인 노드를 나타냅니다. 시작 범위 값이 생략되면(`:n`) 이 범위를 시작하는 데 0이 사용됩니다. 종료 범위 값이 생략되면(`n:`) 가능한 최고 노드 인덱스가 범위를 종료하는 데 사용됩니다. 누적 노드 범위는 모든 노드(`0:n`)를 고려해야 합니다. 노드 범위를 중첩할 수 있습니다(예: `0:10` 및 `4:5`). 이 경우 `4:5` 범위 속성이 `0:10` 속성을 재정의합니다.  
유형: 문자열  
필수 여부: 아니요  
`container`  
노드 범위에 대한 컨테이너 세부 정보입니다. 자세한 내용은 [컨테이너 속성](#containerProperties) 섹션을 참조하세요.  
유형: [ContainerProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html) 객체   
필수 여부: 아니요

## 재시도 전략
<a name="retryStrategy"></a>

`retryStrategy`  
작업 정의를 등록할 때 해당 작업 정의로 제출하여 실패한 작업에 대해 재시도 전략을 지정할 수도 있습니다. [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) 작업 중에 지정된 모든 재시도 전략은 여기에 정의된 재시도 전략을 재정의합니다. 기본적으로 각 작업은 한 번 재시도됩니다. 시도를 두 번 이상으로 지정하면 작업이 실패할 경우 작업이 재시도됩니다. 실패한 시도의 예로는 작업이 0이 아닌 종료 코드를 반환하거나 컨테이너 인스턴스가 종료되는 경우를 들 수 있습니다. 자세한 내용은 [작업 자동 재시도](job_retries.md) 섹션을 참조하세요.  
유형: [RetryStrategy](https://docs.aws.amazon.com/batch/latest/APIReference/API_RetryStrategy.html) 객체  
필수 여부: 아니요    
`attempts`  
작업이 `RUNNABLE` 상태로 이동하는 횟수입니다. 1부터 10까지 시도 횟수를 지정할 수 있습니다. `attempts`가 1보다 크면 작업이 실패할 경우 작업이 `RUNNABLE` 상태로 될 때까지 작업이 재시도됩니다.  

```
"attempts": integer
```
유형: Integer  
필수 여부: 아니요  
`evaluateOnExit`  
작업이 다시 시도되거나 실패하는 조건을 지정하는 최대 5개의 객체 배열입니다. 이 파라미터를 지정하면 `attempts` 파라미터도 지정해야 합니다. `evaluateOnExit`를 지정했지만 일치하는 항목이 없는 경우 작업이 다시 시도됩니다.  

```
"evaluateOnExit": [
   {
      "action": "string",
      "onExitCode": "string",
      "onReason": "string",
      "onStatusReason": "string"
   }
]
```
유형: [EvaluateOnExit](https://docs.aws.amazon.com/batch/latest/APIReference/API_EvaluateOnExit.html) 객체 배열  
필수 여부: 아니요    
`action`  
지정된 모든 조건 (`onStatusReason`, `onReason` 및 `onExitCode`) 이 충족되는 경우 수행할 작업을 지정합니다. 값은 대/소문자를 구분하지 않습니다.  
유형: 문자열  
필수 항목 여부: 예  
유효한 값: `RETRY` \$1 `EXIT`  
`onExitCode`  
작업에 대해 반환된 `ExitCode`의 십진수 표현과 일치하는 glob 패턴을 포함합니다. 패턴의 최대 길이는 512자입니다. 숫자만 포함할 수 있습니다. 문자나 특수 문자를 포함할 수 없습니다. 선택적으로 별표 (\$1) 로 끝날 수 있으므로 문자열의 시작 부분 만 정확히 일치해야합니다.  
유형: 문자열  
필수 여부: 아니요  
`onReason`  
작업에 대해 반환된 `Reason`와 일치하는 glob 패턴을 포함합니다. 패턴의 최대 길이는 512자입니다. 문자, 숫자, 마침표(.), 콜론(:) 및 공백(공백, 탭)을 포함할 수 있습니다. 선택적으로 별표 (\$1) 로 끝날 수 있으므로 문자열의 시작 부분 만 정확히 일치해야합니다.  
유형: 문자열  
필수 여부: 아니요  
`onStatusReason`  
작업에 대해 반환된 `StatusReason`와 일치하는 glob 패턴을 포함합니다. 패턴의 최대 길이는 512자입니다. 문자, 숫자, 마침표(.), 콜론(:) 및 공백(공백, 탭)을 포함할 수 있습니다. 선택적으로 별표 (\$1) 로 끝날 수 있으므로 문자열의 시작 부분 만 정확히 일치해야합니다.  
유형: 문자열  
필수 여부: 아니요

## 예약 우선 순위
<a name="job-definition-parameters-schedulingPriority"></a>

`schedulingPriority`  
이 작업 정의와 함께 제출된 작업의 예약 우선 순위입니다. 이는 공정 공유 정책이 있는 작업 대기열의 작업에만 영향을 줍니다. 예약 우선순위가 높은 작업이 예약 우선순위가 낮은 작업보다 먼저 예약됩니다.  
지원되는 최솟값은 0이고, 지원되는 최댓값은 9999입니다.  
유형: Integer  
필수 여부: 아니요

## 태그
<a name="job-definition-parameters-tags"></a>

`tags`  
작업 정의와 연결할 키-값 쌍 태그. 자세한 내용은 [AWS Batch 리소스 태깅](using-tags.md) 섹션을 참조하세요.  
유형: 문자열 대 문자열 맵  
필수 항목 여부: 아니요

## Timeout
<a name="timeout"></a>

`timeout`  
작업이 더 오래 실행되면 AWS Batch(이)가 작업을 종료하도록 작업의 제한 시간을 구성할 수 있습니다. 자세한 내용은 [작업 제한 시간](job_timeouts.md) 섹션을 참조하세요. 제한 시간으로 인해 작업이 종료되면 재시도되지 않습니다. [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) 작업 중에 지정된 모든 제한 시간 구성은 여기에 정의된 제한 시간 구성을 재정의합니다. 자세한 내용은 [작업 제한 시간](job_timeouts.md) 섹션을 참조하세요.  
유형: [JobTimeout](https://docs.aws.amazon.com/batch/latest/APIReference/API_JobTimeout.html) 객체  
필수 여부: 아니요    
`attemptDurationSeconds`  
AWS Batch가 완료되지 않은 작업을 종료할 때까지의 기간(초)(작업 시도의 `startedAt` 타임스탬프에서 측정됨)입니다. 제한 시간의 최소 값은 60초입니다.  
배열 작업의 경우 상위 배열 작업이 아닌 하위 작업에 제한 시간이 적용됩니다.  
다중 노드 병렬(MNP) 작업의 경우 개별 노드가 아닌 전체 작업에 제한 시간이 적용됩니다.  
유형: Integer  
필수 여부: 아니요

# EcsProperties를 사용하여 작업 정의 생성
<a name="multi-container-jobs"></a>

를 사용하는 AWS Batch 작업 정의를 사용하면 별도의 컨테이너에서 하드웨어, 센서, 3D 환경 및 기타 시뮬레이션을 모델링[https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html)할 수 있습니다. 이 기능을 사용하여 워크로드 구성 요소를 논리적으로 구성하고 기본 애플리케이션과 분리할 수 있습니다. 이 기능은 Amazon Elastic Container Service(Amazon ECS), Amazon Elastic Kubernetes Service(Amazon EKS) 및 AWS Batch 에서와 함께 사용할 수 있습니다 AWS Fargate.

## `ContainerProperties` 및 `EcsProperties` 작업 정의
<a name="containerpropertions-vs-ecsproperties"></a>

사용 사례에 따라 [https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html) 또는 [https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html) 작업 정의를 사용하도록 선택할 수 있습니다. 상위 수준에서를 사용하여 AWS Batch 작업을 실행하는 `EcsProperties` 것은를 사용하여 작업을 실행하는 것과 유사합니다`ContainerProperties`.

`ContainerProperties`를 사용하는 레거시 작업 정의 구조는 계속 지원됩니다. 현재 이 구조를 사용하는 워크플로가 있는 경우 워크플로를 계속 실행할 수 있습니다.

주요 차이점은 작업 정의에 `EcsProperties` 기반 정의를 수용할 새 객체가 추가되었다는 것입니다.

예를 들어 Amazon ECS 및 Fargate에서 `ContainerProperties`를 사용하는 작업 정의의 구조는 다음과 같습니다.

```
{
   "containerProperties": {
     ...
     "image": "my_ecr_image1",
     ...
  },
...
}
```

Amazon ECS 및 Fargate에서 `EcsProperties`를 사용하는 작업 정의의 구조는 다음과 같습니다.

```
{
  "ecsProperties": {
    "taskProperties": [{
      "containers": [
        { 
          ...
          "image": "my_ecr_image1",
          ...
        },
        { 
          ...
          "image": "my_ecr_image2",
          ...
        },
```

## AWS Batch APIs에 대한 일반 변경 사항
<a name="multi-container-general"></a>

다음은 `ContainerProperties`를 사용할 때와 `EcsProperties` API 데이터 유형을 사용할 때의 몇 가지 주요 차이점에 대한 간략한 설명입니다.
+ `ContainerProperties` 내에서 사용되는 많은 파라미터가 `TaskContainerProperties` 내에 표시됩니다. 몇 가지 예는 `command`, `image`, `privileged`, `secrets` 및 `users`입니다. 모두 [TaskContainerProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html)에서 찾을 수 있습니다.
+ 일부 `TaskContainerProperties` 파라미터에는 레거시 구조에 기능적 등가물이 없습니다. 몇 가지 예는 `dependsOn`, `essential`, `name`, `ipcMode` 및 `pidMode`입니다. 자세한 내용은 [EcsTaskDetails](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskDetails.html) 및 [TaskContainerProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html)를 참조하세요.

  또한 일부 `ContainerProperties` 파라미터에는 `EcsProperties` 구조에 등가물 또는 애플리케이션이 없습니다. [https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html#Batch-Type-EcsProperties-taskProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html#Batch-Type-EcsProperties-taskProperties)에서 새 객체가 최대 10개의 요소를 수용할 수 있도록 `container`가 `containers`로 대체되었습니다. 자세한 내용은 [RegisterJobDefinition:containerProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-containerProperties) 및 [EcsTaskProperties:containers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html)를 참조하세요.
+ `taskRoleArn`은 기능면에서 `jobRoleArn`과 동일합니다. 자세한 내용은 [EcsTaskProperties:taskRoleArn](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html) 및 [ContainerProperties:jobRoleArn](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html)을 참조하세요.
+ `EcsProperties` 구조에 컨테이너를 1개에서 10개까지 포함할 수 있습니다. 자세한 내용은 [EcsTaskProperties:containers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html)를 참조하세요.
+ `taskProperties` 및 instanceTypes 객체는 배열이지만 현재는 하나의 요소만 수용합니다. 예를 들어 [EcsProperties:taskProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html) 및 [NodeRangeProperty:instanceTypes](https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeRangeProperty.html)가 있습니다.

## Amazon ECS용 다중 컨테이너 작업 정의
<a name="multi-container-ecs-updates"></a>

Amazon ECS의 다중 컨테이너 구조를 수용하기 위해 일부 API 데이터 유형이 다릅니다. 예:
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-ecsProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-ecsProperties)는 단일 컨테이너 정의에서 `containerProperties`와 동일한 수준입니다. 자세한 내용은AWS Batch API 참조 안내서의 [EcsProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html)를 참조하세요.**
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html#Batch-Type-EcsProperties-taskProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html#Batch-Type-EcsProperties-taskProperties)에는 Amazon ECS 작업에 대해 정의된 속성이 포함되어 있습니다. 자세한 내용은AWS Batch API 참조 안내서의 [EcsProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsProperties.html)를 참조하세요.**
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html#Batch-Type-EcsTaskProperties-containers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html#Batch-Type-EcsTaskProperties-containers)는 단일 컨테이너 정의에서 `containerProperties`와 유사한 정보를 포함합니다. 주요 차이점은 `containers`를 사용하면 최대 10개의 컨테이너를 정의할 수 있다는 점입니다. 자세한 내용은 *AWS Batch API 참조 안내서*의 [ECSTaskProperties:containers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EcsTaskProperties.html)를 참조하세요.
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-essential](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-essential) 파라미터는 컨테이너가 작업에 미치는 영향을 나타냅니다. 작업이 진행되려면 모든 필수 컨테이너가 성공적으로 완료(0으로 종료)되어야 합니다. 필수로 표시된 컨테이너가 실패(0이 아닌 상태로 종료)하면 작업이 실패합니다.

  기본값은 `true`이며 적어도 하나의 컨테이너가 `essential`로 표시되어야 합니다. 자세한 내용은AWS Batch API 참조 안내서의 [https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-essential](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-essential) 섹션을 참조하세요.**
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-dependsOn](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-dependsOn) 파라미터를 사용하여 컨테이너 종속성 목록을 정의할 수 있습니다. 자세한 내용은AWS Batch API 참조 안내서의 [https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-dependsOn](https://docs.aws.amazon.com/batch/latest/APIReference/API_TaskContainerProperties.html#Batch-Type-TaskContainerProperties-dependsOn) 섹션을 참조하세요.**
**참고**  
`dependsOn` 목록의 복잡성과 관련 컨테이너 런타임은 작업의 시작 시간에 영향을 미칠 수 있습니다. 종속성을 실행하는 데 오랜 시간이 걸리는 경우 작업이 완료될 때까지 `STARTING` 상태가 유지됩니다.

`ecsProperties` 및 구조에 대한 자세한 내용은 [ecsProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-ecsProperties)에 대한 [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#API_RegisterJobDefinition_RequestBody) 요청 구문을 참조하세요.

## Amazon EKS에 대한 다중 컨테이너 작업 정의
<a name="multi-container-eks-updates"></a>

Amazon EKS의 다중 컨테이너 구조를 수용하기 위해 일부 API 데이터 유형이 다릅니다. 예:
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainer.html#Batch-Type-EksContainer-name](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainer.html#Batch-Type-EksContainer-name)은 컨테이너의 고유 식별자입니다. 이 객체는 단일 컨테이너에는 필요하지 않으며 포드에 여러 컨테이너를 정의할 때 필요합니다. `name`이 단일 컨테이너에 정의되지 않은 경우 기본 이름인 `default`가 적용됩니다.
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html#Batch-Type-EksPodProperties-initContainers](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html#Batch-Type-EksPodProperties-initContainers)는 [eksPodProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html) 데이터 유형 내에 정의됩니다. 이들은 애플리케이션 컨테이너 전에 실행되며, 항상 완료될 때까지 실행되고, 다음 컨테이너가 시작되기 전에 성공적으로 완료되어야 합니다.

  이러한 컨테이너는 Amazon EKS Connector 에이전트에 등록되며 Amazon Elastic Kubernetes Service 백엔드 데이터 스토어에 등록 정보를 유지합니다. `initContainers` 객체는 최대 10개의 요소를 수용할 수 있습니다. 자세한 내용은 Kubernetes 설명서의 [Init Containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)를 참조하세요.**
**참고**  
`initContainers` 객체는 작업의 시작 시간에 영향을 미칠 수 있습니다. `initContainers`를 실행하는 데 오랜 시간이 걸리는 경우 작업이 완료될 때까지 `STARTING` 상태가 유지됩니다.
+ [https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html#Batch-Type-EksPodProperties-shareProcessNamespace](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html#Batch-Type-EksPodProperties-shareProcessNamespace)는 포드의 컨테이너가 동일한 프로세스 네임스페이스를 공유할 수 있는지 여부를 나타냅니다. 기본값은 `false`입니다. 이 값을 `true`로 설정하여 컨테이너가 동일한 포드에 위치한 다른 컨테이너의 프로세스를 보고 신호를 보낼 수 있게 합니다.
+ 모든 컨테이너가 중요합니다. 작업이 성공하려면 모든 컨테이너가 성공적으로 완료(0으로 종료)되어야 합니다. 컨테이너 하나가 실패하면(0이 아닌 값으로 종료) 작업이 실패합니다.

`eksProperties` 및 구조에 대한 자세한 내용은 [eksProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#Batch-RegisterJobDefinition-request-eksProperties)에 대한 [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html#API_RegisterJobDefinition_RequestBody) 요청 구문을 참조하세요.

# 참조: EcsProperties를 사용하는 AWS Batch 작업 시나리오
<a name="multi-container-jobs-scenarios"></a>

`EcsProperties`를 사용하는 AWS Batch 작업 정의를 필요에 따라 구성하는 방법을 설명하기 위해 이 주제에서는 다음 [https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html) 페이로드를 제공합니다. 이러한 예제를 파일로 복사하고 필요에 맞게 사용자 지정한 다음 AWS Command Line Interface(AWS CLI)를 사용하여 `RegisterJobDefinition`을 호출할 수 있습니다.

## Amazon EC2의 Amazon ECS에 대한 AWS Batch 작업
<a name="multi-container-scenario-on-ec2"></a>

다음은 Amazon Elastic Compute Cloud의 Amazon Elastic Container Service에 대한 AWS Batch 작업의 예입니다.

```
{
    "jobDefinitionName": "multicontainer-ecs-ec2",
    "type": "container",
    "ecsProperties": {
        "taskProperties": [
          {
            "containers": [
              {
                "name": "c1",
                "essential": false,
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "2"
                  },
                  {
                    "type": "MEMORY",
                    "value": "4096"
                  }
                ]
              },
              {
                "name": "c2",
                "essential": false,
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "2"
                  },
                  {
                    "type": "MEMORY",
                    "value": "4096"
                  }
                ]
              },
              {
                "name": "c3",
                "essential": true,
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "firelensConfiguration": {
                  "type": "fluentbit",
                  "options": {
                    "enable-ecs-log-metadata": "true"
                  }
                 },
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "6"
                  },
                  {
                    "type": "MEMORY",
                    "value": "12288"
                  }
                ]
              }
            ]
          }
        ]
  }
}
```

## Fargate의 Amazon ECS에 대한 AWS Batch 작업
<a name="multi-containers-ecs-on-fargate"></a>

다음은 AWS Fargate의 Amazon Elastic Container Service에 대한 AWS Batch 작업의 예입니다.

```
{
    "jobDefinitionName": "multicontainer-ecs-fargate",
    "type": "container",
    "platformCapabilities": [
        "FARGATE"
    ],
    "ecsProperties": {
        "taskProperties": [
          {
            "containers": [
              {
                "name": "c1",
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "2"
                  },
                  {
                    "type": "MEMORY",
                    "value": "4096"
                  }
                ]
              },
              {
                "name": "c2",
                "essential": true,
                "command": [
                  "echo",
                  "hello world"
                ],
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "resourceRequirements": [
                  {
                    "type": "VCPU",
                    "value": "6"
                  },
                  {
                    "type": "MEMORY",
                    "value": "12288"
                  }
                ]
              }
            ],
            "executionRoleArn": "arn:aws:iam::1112223333:role/ecsTaskExecutionRole"
          }
        ]
  }
}
```

## Amazon EKS에 대한 AWS Batch 작업
<a name="multi-containers-eks-example"></a>

다음은 Amazon Elastic Kubernetes Service에 대한 AWS Batch 작업의 예입니다.

```
{
  "jobDefinitionName": "multicontainer-eks",
  "type": "container",
  "eksProperties": {
    "podProperties": {
      "shareProcessNamespace": true,
      "initContainers": [
        {
          "name": "init-container",
          "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
          "command": [
            "echo"
          ],
          "args": [
            "hello world"
          ],
          "resources": {
            "requests": {
              "cpu": "1",
              "memory": "512Mi"
            }
          }
        },
        {
          "name": "init-container-2",
          "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
          "command": [
            "echo",
            "my second init container"
          ],
          "resources": {
            "requests": {
              "cpu": "1",
              "memory": "512Mi"
            }
          }
        }
      ],
      "containers": [
        {
          "name": "c1",
          "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
          "command": [
            "echo world"
         ],
          "resources": {
            "requests": {
              "cpu": "1",
              "memory": "512Mi"
            }
          }
        },
        {
          "name": "sleep-container",
          "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
          "command": [
            "sleep",
            "20"
          ],
          "resources": {
            "requests": {
              "cpu": "1",
              "memory": "512Mi"
            }
          }
        }
      ]
    }
  }
}
```

## 노드당 여러 컨테이너가 있는 MNP AWS Batch 작업
<a name="multi-container-ecs-mnp"></a>

다음은 노드당 여러 컨테이너가 있는 다중 노드 병렬(MNP) AWS Batch 작업의 예입니다.

```
{
  "jobDefinitionName": "multicontainer-mnp",
  "type": "multinode",
  "nodeProperties": {
    "numNodes": 6,
    "mainNode": 0,
    "nodeRangeProperties": [
      {
        "targetNodes": "0:5",
        "ecsProperties": {
          "taskProperties": [
            {
              "containers": [
                {
                  "name": "range05-c1",
                  "command": [
                    "echo",
                    "hello world"
                  ],
                  "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                  "resourceRequirements": [
                    {
                      "type": "VCPU",
                      "value": "2"
                    },
                    {
                      "type": "MEMORY",
                      "value": "4096"
                    }
                  ]
                },
                {
                  "name": "range05-c2",
                  "command": [
                    "echo",
                    "hello world"
                  ],
                  "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                  "resourceRequirements": [
                    {
                      "type": "VCPU",
                      "value": "2"
                    },
                    {
                      "type": "MEMORY",
                      "value": "4096"
                    }
                  ]
                }
              ]
            }
          ]
        }
      }
    ]
  }
}
```

# awslogs 로그 드라이버 사용
<a name="using_awslogs"></a>

기본적으로는 `awslogs` 로그 드라이버가 CloudWatch Logs로 로그 정보를 전송할 수 있도록 AWS Batch 합니다. 이 기능을 사용하면 사용자는 편리한 위치에서 자신의 컨테이너에서 다양한 로그를 볼 수 있으며, 컨테이너 로그가 컨테이너 인스턴스에서 디스크 공간을 차지하는 것이 방지됩니다. 이 주제는 작업 정의에서 `awslogs` 로그 드라이버의 구성을 도와줍니다.

**참고**  
 AWS Batch 콘솔에서 작업 정의를 생성할 때 **로깅 구성** 섹션에서 `awslogs` 로그 드라이버를 구성할 수 있습니다.

**참고**  
작업 컨테이너가 로깅하는 정보 유형은 대부분 `ENTRYPOINT` 명령에 따라 결정됩니다. 기본적으로 수집되는 로그는 컨테이너를 로컬에서 실행했을 때 일반적으로 대화식 터미널에 표시되는 명령 출력으로 `STDOUT` 및 `STDERR` I/O 스트림을 나타냅니다. `awslogs` 로그 드라이버는 이러한 로그를 Docker에서 CloudWatch Logs로 전달하는 역할만 합니다. 다른 파일 데이터 또는 스트림을 수집할 수 있는 대체 방법을 포함해 Docker 로그가 처리되는 방식에 대한 자세한 정보는 Docker 설명서에서 [컨테이너 또는 서비스 로그 보기](https://docs.docker.com/config/containers/logging/) 섹션을 참조하세요.

컨테이너 인스턴스에서 CloudWatch 로그로 시스템 로그를 전송하려면 [에서 CloudWatch Logs 사용 AWS Batch](using_cloudwatch_logs.md) 섹션을 참조하세요. CloudWatch Logs에 대한 자세한 정보는 *Amazon CloudWatch Logs 사용 설명서*의 [로그 파일 모니터링](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html) 및 [CloudWatch Logs 할당량](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)을 참조하세요.

## AWS Batch JobDefiniton 데이터 형식의 awslogs 로그 드라이버 옵션
<a name="create_awslogs_logdriver_options"></a>

`awslogs` 로그 드라이버는 AWS Batch 작업 정의에서 다음 옵션을 지원합니다. 자세한 내용은 Docker 문서의 [CloudWatch 로그 로깅 드라이버](https://docs.docker.com/config/containers/logging/awslogs/)를 참조하세요.

`awslogs-region`  
필수 여부: 아니요  
`awslogs` 로그 드라이버가 Docker 로그를 전송할 리전을 지정합니다. 기본적으로 사용되는 리전은 작업에 사용되는 리전과 동일합니다. 사용자는 여러 리전 작업의 모든 로그를 CloudWatch 로그의 단일 리전으로 전송할 수 있습니다. 이렇게 하면 한 위치에서 모든 작업을 볼 수 있습니다. 또는, 리전별로 구분하여 세분화할 수 있습니다. 그러나 이 옵션을 선택할 경우, 지정한 로그 그룹이 지정한 리전에 위치하는지 확인해야 하세요.

`awslogs-group`  
필수 항목 여부: 선택 사항  
`awslogs-group` 옵션을 사용하면 사용자는 `awslogs` 로그 드라이버가 로그 스트림을 전송할 로그 그룹을 지정할 수 있습니다. 지정되지 않은 경우 `aws/batch/job`이 사용됩니다.

`awslogs-stream-prefix`  
필수 항목 여부: 선택 사항  
`awslogs-stream-prefix` 옵션을 사용하면 로그 스트림을 컨테이너가 속한 AWS Batch 작업의 지정된 접두사 및 Amazon ECS 작업 ID와 연결할 수 있습니다. 이 옵션을 사용하여 접두사를 지정하는 경우 로그 스트림은 다음 형식을 취합니다.  

```
prefix-name/default/ecs-task-id
```

`awslogs-datetime-format`  
필수 여부: 아니요  
이 옵션은 Python `strftime` 형식의 여러 줄 시작 패턴을 정의합니다. 로그 메시지는 패턴과 일치하는 하나의 라인과 패턴과 일치하지 않는 나머지 라인으로 이루어져 있습니다. 따라서 일치하는 줄은 로그 메시지 간의 구분 기호입니다.  
이 형식을 사용하는 사용 사례의 한 예는 스택 덤프와 같은 출력을 구문 분석하는 것이며, 그렇지 않으면 여러 항목에 기록될 수 있습니다. 올바른 패턴을 통해 단일 항목으로 캡처할 수 있습니다.  
자세한 내용은 [awslogs-datetime-format](https://docs.docker.com/config/containers/logging/awslogs/#awslogs-datetime-format)을 참조하세요.  
`awslogs-datetime-format`과 `awslogs-multiline-pattern`이 모두 구성된 경우, 이 옵션은 항상 우선순위를 갖습니다.  
여러 줄 로깅은 모든 로그 메시지의 정규식 구문 분석 및 일치 태스크를 수행합니다. 이는 로깅 성능에 부정적인 영향을 줄 수 있습니다.

`awslogs-multiline-pattern`  
필수 여부: 아니요  
이 옵션은 정규식을 사용하여 여러 줄 시작 패턴을 정의합니다. 로그 메시지는 패턴과 일치하는 하나의 라인과 패턴과 일치하지 않는 나머지 라인으로 이루어져 있습니다. 따라서 일치하는 라인은 로그 메시지 간의 구분 기호입니다.  
자세한 내용은 Docker 설명서의 [awslogs-multiline-pattern](https://docs.docker.com/config/containers/logging/awslogs/#awslogs-multiline-pattern)을 참조하세요.  
이 옵션은 `awslogs-datetime-format`을 구성하는 경우에 무시됩니다.  
여러 줄 로깅은 모든 로그 메시지의 정규식 구문 분석 및 일치 태스크를 수행합니다. 이는 로깅 성능에 부정적인 영향을 줄 수 있습니다.

`awslogs-create-group`  
필수 여부: 아니요  
로그 그룹을 자동으로 생성할지를 지정합니다. 이 옵션이 지정되지 않은 경우 기본적으로 `false`로 설정됩니다.  
이 옵션은 권장되지 않습니다. 각 작업에서 로그 그룹을 생성하려고 시도하면 작업이 실패할 가능성이 높아지므로 CloudWatch [Logs](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html) CreateLoggroup API 작업을 사용하여 로그 그룹을 미리 생성하는 것이 좋습니다.
`awslogs-create-group`을 사용하기 전에 실행 역할에 대한 IAM 정책이 `logs:CreateLogGroup` 권한을 포함해야 합니다

## 작업 정의에서 로그 구성 지정
<a name="specify-log-config"></a>

기본적으로는 `awslogs` 로그 드라이버를 AWS Batch 활성화합니다. 이 섹션에서는 작업의 `awslogs` 로그 구성을 사용자 지정하는 방법을 설명합니다. 자세한 내용은 [단일 노드 작업 정의 생성](create-job-definition.md) 단원을 참조하십시오.

다음 로그 구성 JSON 스니펫에는 각 작업에 지정된 `logConfiguration` 개체가 있습니다. 하나는 `awslogs-wordpress`라는 로그 그룹에 로그를 보내는 WordPress 작업용이고 다른 하나는 `awslogs-mysql`이라는 로그 그룹에 로그를 보내는 MySQL 컨테이너용입니다. 두 컨테이너 모두 `awslogs-example` 로그 스트림 접두사를 사용합니다.

```
"logConfiguration": {
    "logDriver": "awslogs",
    "options": {
        "awslogs-group": "awslogs-wordpress",
        "awslogs-stream-prefix": "awslogs-example"
    }
}
```

```
"logConfiguration": {
    "logDriver": "awslogs",
    "options": {
        "awslogs-group": "awslogs-mysql",
        "awslogs-stream-prefix": "awslogs-example"
    }
}
```

 AWS Batch 콘솔에서 `wordpress` 작업 정의에 대한 로그 구성은 다음 이미지와 같이 지정됩니다.

![\[Log configuration interface showing awslogs driver with group and stream prefix options.\]](http://docs.aws.amazon.com/ko_kr/batch/latest/userguide/images/awslogs-console-config.png)


작업 정의 로그 구성에 `awslogs` 로그 드라이버로 태스크 정의를 등록하면 사용자는 CloudWatch 로그로 로그 전송을 시작할 수 있는 작업 정의를 가진 작업을 제출할 수 있습니다. 자세한 내용은 [자습서: 작업 제출](submit_job.md) 단원을 참조하십시오.

# 민감한 데이터 지정
<a name="specifying-sensitive-data"></a>

를 사용하면 민감한 데이터를 보안 암호 또는 AWS Systems Manager 파라미터 스토어 파라미터에 AWS Secrets Manager 저장한 다음 작업 정의에서 참조하여 작업에 민감한 데이터를 주입할 AWS Batch수 있습니다.

암호는 다음과 같은 방법으로 작업에 노출될 수 있습니다.
+ 환경 변수로 민감한 데이터를 컨테이너에 삽입하려면 `secrets` 작업 정의 파라미터를 사용하세요.
+ 작업의 로그 구성에서 중요한 정보를 참조하려면 `secretOptions` 작업 정의 파라미터를 사용하세요.

**Topics**
+ [Secrets Manager를 사용하여 민감한 데이터 지정](specifying-sensitive-data-secrets.md)
+ [Systems Manager Parameter Store를 사용하여 민감한 데이터 지정](specifying-sensitive-data-parameters.md)

# Secrets Manager를 사용하여 민감한 데이터 지정
<a name="specifying-sensitive-data-secrets"></a>

를 사용하면 민감한 데이터를 AWS Secrets Manager 보안 암호에 저장한 다음 작업 정의에서 참조하여 작업에 민감한 데이터를 주입할 AWS Batch수 있습니다. Secrets Manager 암호에 저장된 민감한 데이터는 환경 변수 또는 로그 구성의 일부로 작업에 노출될 수 있습니다.

비밀을 환경 변수로 주입하는 경우 주입할 비밀의 JSON 키 또는 버전을 지정할 수 있습니다. 이 프로세스는 작업에 노출되는 중요한 데이터를 제어하는 데 도움이 됩니다. 보안 버전 관리에 대한 자세한 정보는 *AWS Secrets Manager 사용 설명서*의 [AWS Secrets Manager의 주요 개념 및 용어](https://docs.aws.amazon.com/secretsmanager/latest/userguide/terms-concepts.html#term_secret)를 참조하세요.

## Secrets Manager를 사용하여 민감한 데이터 지정 시 고려할 사항
<a name="secrets-considerations"></a>

Secrets Manager를 사용하여 작업에 대한 민감한 데이터를 지정할 때 다음 사항을 고려해야 합니다.
+ 보안 암호의 특정 JSON 키 또는 버전을 사용하여 보안 암호를 주입하려면 컴퓨팅 환경의 컨테이너 인스턴스에 Amazon ECS 컨테이너 에이전트 버전 1.37.0 이상이 있어야 합니다. 그러나 최신 컨테이너 에이전트 버전을 사용하는 것이 좋습니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 내용은 [Amazon Elastic Container Service 개발자 안내서](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)의 *Amazon ECS 컨테이너 에이전트 업데이트*를 참조하세요.

  보안 정보의 전체 내용을 환경 변수로 주입하거나 로그 구성에 보안 정보를 주입하려면 컨테이너 인스턴스에 컨테이너 에이전트 버전 1.23.0 이상이 있어야 합니다.
+ [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) API의 `SecretString` 파라미터로 생성된 암호이며 텍스트 데이터를 저장하는 암호만이 지원됩니다. [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html) API의 `SecretBinary` 파라미터로 생성된 암호이며 바이너리 데이터를 저장하는 암호는 지원되지 않습니다.
+ Secrets Manager 암호를 참조하여 작업에 대한 민감한 데이터를 검색하는 작업 정의를 사용할 때, 인터페이스 VPC 엔드포인트도 사용하는 경우 Secrets Manager에 대한 인터페이스 VPC 엔드포인트를 생성해야 합니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [VPC 엔드포인트와 함께 Secrets Manager 사용](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html)을 참조하세요.
+ 작업이 처음 시작될 때 해당 작업에 중요한 정보가 주입됩니다. 암호가 이후에 업데이트되거나 교체되면 작업이 업데이트된 값을 자동으로 받지 않습니다. 서비스가 업데이트된 암호 값으로 새 작업을 강제로 시작하도록 하려면 새 작업을 시작해야 합니다.

## AWS Batch 보안 암호에 필요한 IAM 권한
<a name="secrets-iam"></a>

이 기능을 사용하려면 실행 역할이 있어야 하며 작업 정의에서 해당 역할을 참조해야 합니다. 이렇게 하면 컨테이너 에이전트가 필요한 Secrets Manager 리소스를 가져올 수 있습니다. 자세한 내용은 [AWS Batch IAM 실행 역할](execution-IAM-role.md) 단원을 참조하십시오.

생성하는 Secretes Manger 암호에 액세스 권한을 부여하려면 다음 권한을 인라인 정책으로 실행 역할에 수동으로 추가하세요. 자세한 내용은 *IAM 사용 설명서*의 [IAM 정책 추가 및 제거](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)를 참조하세요.
+ `secretsmanager:GetSecretValue`–Secrets Manager 암호를 참조하는 경우에 필요합니다.
+ `kms:Decrypt`암호가 사용자 지정 KMS 키를 사용하고 기본 키를 사용하지 않는 경우에 필요합니다. 사용자 지정 키의 ARN을 리소스로 추가해야 합니다.

다음 예제에서는 인라인 정책이 필수 권한을 추가합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-2:777777777777:secret:<secret_name>",
                "arn:aws:kms:us-east-2:777777777777:key/<key_id>"
            ]
        }
    ]
}
```

------

## 민감한 데이터를 환경 변수로 삽입
<a name="secrets-envvar"></a>

작업 정의 내에서 다음을 지정할 수 있습니다.
+ 작업에 설정할 환경 변수의 이름을 포함하는 `secrets` 객체
+ Secrets Manager 암호의 Amazon 리소스 이름(ARN)
+ 작업에 제공할 중요한 데이터를 포함하는 추가 파라미터

다음 예제에서는 Secrets Manager 암호에 대해 지정해야 하는 전체 구문을 보여 줍니다.

```
arn:aws:secretsmanager:region:aws_account_id:secret:secret-name:json-key:version-stage:version-id
```

다음 섹션에서는 추가 파라미터에 대해 설명합니다. 이 파라미터는 선택 사항입니다. 그러나 사용하지 않는 경우 기본값을 사용하려면 콜론(`:`)을 포함시켜야 합니다. 추가 컨텍스트에 대한 예제가 아래에 나와 있습니다.

`json-key`  
환경 변수 값으로 설정할 값과 함께 키-값 쌍의 키 이름을 지정합니다. JSON 형식의 값만 지원됩니다. JSON 키를 지정하지 않으면 암호의 전체 내용이 사용됩니다.

`version-stage`  
사용할 암호 버전의 스테이징 레이블을 지정합니다. 버전 스테이징 레이블이 지정된 경우 버전 ID를 지정할 수 없습니다. 버전 단계가 지정되지 않은 경우 기본 동작은 `AWSCURRENT` 스테이징 레이블을 사용하여 암호를 검색하는 것입니다.  
스테이징 레이블은 암호가 업데이트되거나 교체되는 경우 암호의 여러 버전을 추적하는 데 사용됩니다. 암호의 각 버전에는 하나 이상의 스테이징 레이블과 ID가 있습니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [AWS Secrets Manager에 대한 주요 용어 및 개념](https://docs.aws.amazon.com/secretsmanager/latest/userguide/terms-concepts.html#term_secret)을 참조하세요.

`version-id`  
사용하고자 하는 암호 버전의 고유 식별자를 지정합니다. 버전 ID가 지정된 경우 버전 스테이징 레이블을 지정할 수 없습니다. 버전 ID가 지정되지 않은 경우 기본 동작은 `AWSCURRENT` 스테이징 레이블을 사용하여 암호를 검색하는 것입니다.  
버전 ID는 암호가 업데이트되거나 교체되는 경우 암호의 여러 버전을 추적하는 데 사용됩니다. 암호의 각 버전에는 ID가 있습니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [AWS Secrets Manager에 대한 주요 용어 및 개념](https://docs.aws.amazon.com/secretsmanager/latest/userguide/terms-concepts.html#term_secret)을 참조하세요.

### 컨테이너 정의 예제
<a name="secrets-examples"></a>

다음 예제에서는 컨테이너 정의에서 Secretes Manager 암호를 참조할 수 있는 방법을 보여 줍니다.

**Example 전체 암호 참조**  
다음은 Secret Manager 암호의 전체 텍스트를 참조할 때 형식을 나타내는 태스크 정의의 조각입니다.  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf"
    }]
  }]
}
```

**Example 암호 내에서 특정 키 참조**  
다음은 보안 암호의 내용을 관련 버전 스테이징 레이블 및 버전 ID와 함께 표시하는 [>get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html) 명령의 출력 예를 보여 줍니다.  

```
{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "VersionId": "871d9eca-18aa-46a9-8785-981dd39ab30c",
    "SecretString": "{\"username1\":\"password1\",\"username2\":\"password2\",\"username3\":\"password3\"}",
    "VersionStages": [
        "AWSCURRENT"
    ],
    "CreatedDate": 1581968848.921
}
```
ARN 끝에 키 이름을 지정하여 컨테이너 정의에서 이전 출력의 특정 키를 참조합니다.  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::"
    }]
  }]
}
```

**Example 특정 비밀 버전 참조**  
다음은 보안 암호의 암호화되지 않은 내용을 모든 버전의 암호에 대한 메타데이터와 함께 표시하는 [>describe-secret](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html) 명령의 출력 예입니다.  

```
{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "Description": "Example of a secret containing application authorization data.",
    "RotationEnabled": false,
    "LastChangedDate": 1581968848.926,
    "LastAccessedDate": 1581897600.0,
    "Tags": [],
    "VersionIdsToStages": {
        "871d9eca-18aa-46a9-8785-981dd39ab30c": [
            "AWSCURRENT"
        ],
        "9d4cb84b-ad69-40c0-a0ab-cead36b967e8": [
            "AWSPREVIOUS"
        ]
    }
}
```
ARN 끝에 키 이름을 지정하여 컨테이너 정의에서 이전 출력의 특정 버전 스테이징 레이블을 참조합니다.  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::AWSPREVIOUS:"
    }]
  }]
}
```
ARN 끝에 키 이름을 지정하여 컨테이너 정의에서 이전 출력의 특정 버전 ID를 참조합니다.  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::9d4cb84b-ad69-40c0-a0ab-cead36b967e8"
    }]
  }]
}
```

**Example 암호의 특정 키 및 버전 스테이징 레이블 참조**  
다음은 암호 내 특정 키와 특정 버전 스테이징 레이블을 모두 참조하는 방법을 보여줍니다.  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1:AWSPREVIOUS:"
    }]
  }]
}
```
특정 키 및 버전 ID를 지정하려면 다음 구문을 사용합니다.  

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::9d4cb84b-ad69-40c0-a0ab-cead36b967e8"
    }]
  }]
}
```

## 로그 구성에 민감한 데이터 삽입
<a name="secrets-logconfig"></a>

작업 정의 내에서 `logConfiguration`을 지정할 때 컨테이너에 설정할 로그 드라이버 옵션의 이름과 컨테이너에 제공할 민감한 데이터가 들어있는 Secret Manager 암호의 전체 ARN을 사용하여 `secretOptions`를 지정할 수 있습니다.

다음은 Secrets Manager 암호를 참조할 때 형식을 나타내는 작업 정의의 조각입니다.

```
{
  "containerProperties": [{
    "logConfiguration": [{
      "logDriver": "splunk",
      "options": {
        "splunk-url": "https://cloud.splunk.com:8080"
      },
      "secretOptions": [{
        "name": "splunk-token",
        "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf"
      }]
    }]
  }]
}
```

## AWS Secrets Manager 보안 암호 생성
<a name="secrets-create-secret"></a>

Secrets Manager 콘솔을 사용하여 민감한 데이터에 대한 암호를 생성할 수 있습니다. 자세한 정보는 *AWS Secrets Manager 사용 설명서*의 [기본 암호 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)을 참조하세요.

**기본 암호를 생성하는 방법**

Secrets Manager를 사용하여 민감한 데이터에 대한 암호를 생성합니다.

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

1. **새 비밀 저장**을 선택합니다.

1. **암호 유형 선택**에서 **다른 유형의 암호**를 선택합니다.

1. 사용자 지정 암호의 세부 정보를 **키** 및 **값** 쌍으로 지정합니다. 예를 들어 `UserName`이라는 키를 지정한 다음 그 값으로 적절한 사용자 이름을 입력할 수 있습니다. `Password`라는 이름으로 두 번째 키를 추가하고 그 값으로 암호 텍스트를 추가합니다. 또한 데이터베이스 이름, 서버 주소, TCP 포트 등에 해당하는 항목을 추가할 수도 있습니다. 필요한 정보를 저장하는 데 필요한 만큼 많은 쌍을 추가할 수 있습니다.

   또는 **일반 텍스트** 탭을 선택하고 원하는 방식으로 암호 값을 입력할 수 있습니다.

1. 보안 AWS KMS 암호의 보호된 텍스트를 암호화하는 데 사용할 암호화 키를 선택합니다. 암호화 키를 선택하지 않으면 Secrets Manager에서는 계정에 대한 기본 키가 있는지 확인하고 있는 경우 해당 키를 사용합니다. 기본 키가 없는 경우 Secrets Manager에서는 자동으로 하나를 생성합니다. 또한 **새 키 추가**를 선택하여 이 암호에 대한 사용자 지정 KMS를 생성할 수 있습니다. KMS 키를 생성하려면 계정에 KMS 키를 생성할 권한이 있어야 합니다.

1. **다음**을 선택합니다.

1. **암호 이름**으로 **production/MyAwesomeAppSecret** 또는 **development/TestSecret** 같은 선택 경로와 이름을 입력하고, **다음**을 선택합니다. 필요한 경우 설명을 추가하면 나중에 이 암호의 용도를 기억하는 데 도움이 됩니다.

   암호 이름은 ASCII 문자, 숫자 또는 다음 문자 중 하나가 되어야 합니다. /\$1\$1=.@-

1. (선택 사항) 이때, 암호에 대한 교체를 구성할 수 있습니다. 이 절차에서는 **자동 회전 비활성화** 상태로 두고 **다음**을 선택합니다.

   새 보안 암호 또는 기존 보안 암호에 대한 교체를 구성하는 방법에 대한 자세한 내용은 [AWS Secrets Manager 보안 암호 교체를 참조하세요](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html).

1. 설정을 검토한 다음 **암호 저장**을 선택하여 Secrets Manager에 새 암호로 입력한 모든 항목을 저장합니다.

# Systems Manager Parameter Store를 사용하여 민감한 데이터 지정
<a name="specifying-sensitive-data-parameters"></a>

를 사용하면 Parameter Store 파라미터에 AWS Systems Manager 민감한 데이터를 저장한 다음 컨테이너 정의에서 참조하여 컨테이너에 민감한 데이터를 주입할 AWS Batch수 있습니다.

**Topics**
+ [Systems Manager Parameter Store를 사용하여 민감한 데이터 지정 시 고려할 사항](#secrets--parameterstore-considerations)
+ [AWS Batch 보안 암호에 필요한 IAM 권한](#secrets-iam-parameters)
+ [민감한 데이터를 환경 변수로 삽입](#secrets-envvar-parameters)
+ [로그 구성에 민감한 데이터 삽입](#secrets-logconfig-parameters)
+ [AWS Systems Manager 파라미터 스토어 파라미터 생성](#secrets-create-parameter)

## Systems Manager Parameter Store를 사용하여 민감한 데이터 지정 시 고려할 사항
<a name="secrets--parameterstore-considerations"></a>

Systems Manager 파라미터 스토어 파라미터를 사용하여 컨테이너에 민감한 데이터를 지정할 때 다음 사항을 고려해야 합니다.
+ 이 기능을 사용하려면 컨테이너 인스턴스에 컨테이너 에이전트의 버전 1.23.0 이상이 필요합니다. 그러나 최신 컨테이너 에이전트 버전을 사용하는 것이 좋습니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 내용은 [Amazon Elastic Container Service 개발자 안내서](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)의 *Amazon ECS 컨테이너 에이전트 업데이트*를 참조하세요.
+ 컨테이너가 처음 시작될 때 작업의 해당 컨테이너에 민감한 데이터가 주입됩니다. 암호 또는 파라미터 스토어 파라미터가 이후에 업데이트되거나 교체되면 컨테이너가 업데이트된 값을 자동으로 받지 않습니다. 업데이트된 암호로 새 작업을 강제로 시작하려면 새 작업을 시작해야 합니다.

## AWS Batch 보안 암호에 필요한 IAM 권한
<a name="secrets-iam-parameters"></a>

이 기능을 사용하려면 실행 역할이 있어야 하며 작업 정의에서 해당 역할을 참조해야 합니다. 이렇게 하면 Amazon ECS 컨테이너 에이전트가 필요한 AWS Systems Manager 리소스를 가져올 수 있습니다. 자세한 내용은 [AWS Batch IAM 실행 역할](execution-IAM-role.md) 단원을 참조하십시오.

생성한 AWS Systems Manager 파라미터 스토어 파라미터에 대한 액세스를 제공하려면 다음 권한을 실행 역할에 인라인 정책으로 수동으로 추가합니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 정책 추가 및 제거](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)를 참조하세요.
+ `ssm:GetParameters` ― 태스크 정의에서 Systems Manager 파라미터 스토어 파라미터를 참조하는 경우에 필요합니다.
+ `secretsmanager:GetSecretValue` ― Secrets Manager 암호를 직접 참조하는 경우 또는 Systems Manager 파라미터 스토어 파라미터가 태스크 정의에서 Secrets Manager 암호를 참조하는 경우에 필요합니다.
+ `kms:Decrypt` ― 암호가 사용자 지정 KMS 키를 사용하고 기본 키를 사용하지 않는 경우에 필요합니다. 사용자 지정 키의 ARN을 리소스로 추가해야 합니다.

다음 예제에서는 인라인 정책이 필수 권한을 추가합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters",
                "secretsmanager:GetSecretValue",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-2:999999999999:parameter/<parameter_name>",
                "arn:aws:secretsmanager:us-east-2:999999999999:secret:<secret_name>",
                "arn:aws:kms:us-east-2:999999999999:key/<key_id>"
            ]
        }
    ]
}
```

------

## 민감한 데이터를 환경 변수로 삽입
<a name="secrets-envvar-parameters"></a>

컨테이너 정의 내에서 컨테이너에 설정할 환경 변수의 이름으로 `secrets`(을)를 지정하여 컨테이너에 제공할 민감한 데이터가 들어있는 Systems Manager 파라미터 스토어 파라미터의 전체 ARN을 지정합니다.

다음은 Systems Manager 파라미터 스토어 파라미터를 참조할 때 형식을 나타내는 태스크 정의의 조각입니다. Systems Manager 파라미터 스토어 파라미터가 현재 실행 중인 태스크와 동일한 리전에 있는 경우, 파라미터의 전체 ARN 또는 이름을 사용할 수 있습니다. 파라미터가 다른 리전에 있다면 전체 ARN을 지정해야 합니다.

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
    }]
  }]
}
```

## 로그 구성에 민감한 데이터 삽입
<a name="secrets-logconfig-parameters"></a>

컨테이너 정의 내에서, `logConfiguration`을 정의할 때 컨테이너에 설정할 로그 드라이버 옵션의 이름과 컨테이너에 제공할 민감한 데이터가 들어있는 Systems Manager 파라미터 스토어 파라미터의 전체 ARN을 사용하여 `secretOptions`를 지정할 수 있습니다.

**중요**  
Systems Manager 파라미터 스토어 파라미터가 현재 실행 중인 태스크와 동일한 리전에 있는 경우, 파라미터의 전체 ARN 또는 이름을 사용할 수 있습니다. 파라미터가 다른 리전에 있다면 전체 ARN을 지정해야 합니다.

다음은 Systems Manager 파라미터 스토어 파라미터를 참조할 때 형식을 나타내는 태스크 정의의 조각입니다.

```
{
  "containerProperties": [{
    "logConfiguration": [{
      "logDriver": "fluentd",
      "options": {
        "tag": "fluentd demo"
      },
      "secretOptions": [{
        "name": "fluentd-address",
        "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
      }]
    }]
  }]
}
```

## AWS Systems Manager 파라미터 스토어 파라미터 생성
<a name="secrets-create-parameter"></a>

 AWS Systems Manager 콘솔을 사용하여 민감한 데이터에 대한 Systems Manager 파라미터 스토어 파라미터를 생성할 수 있습니다. 자세한 정보는 *AWS Systems Manager 사용 설명서*의 [연습: 명령에 파라미터 생성 및 사용(콘솔)](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-console.html)을 참조하세요.

**파라미터 스토어 파라미터를 생성하려면**

1. [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) AWS Systems Manager 콘솔을 엽니다.

1. 탐색 창에서 **파라미터 스토어(Parameter Store)**, **파라미터 생성(Create parameter)**을 차례대로 선택합니다.

1. **이름(Name)**에서 계층 구조와 파라미터 이름을 입력합니다. 예를 들어 `test/database_password`를 입력합니다.

1. **설명(Description)**에 선택적 설명을 입력합니다.

1. **유형**에서 **String**, **StringList** 또는 **SecureString**을 선택합니다.
**참고**  
**SecureString**을 선택한 경우, **KMS 키 ID** 필드가 표시됩니다. KMS 키 ID, KMS 키 ARN, 별칭 이름 또는 별칭 ARN을 제공하지 않으면 시스템에서 `alias/aws/ssm`을 사용합니다. Systems Manager의 기본 KMS 키입니다. 이 키의 사용을 방지하려면 사용자 지정 키를 선택합니다. 자세한 정보는 *AWS Systems Manager 사용 설명서*의 [보안 문자열 파라미터 사용](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-about.html)을 참조하세요.
사용자 지정 KMS 키 별칭 이름 또는 별칭 ARN과 함께 `key-id` 파라미터를 사용하여 콘솔에 보안 문자열 파라미터를 생성할 때에는 별칭 앞에 접두사 `alias/`를 지정해야 합니다. ARN 예제는 다음과 같습니다.  

     ```
     arn:aws:kms:us-east-2:123456789012:alias/MyAliasName
     ```
별칭 이름 예제는 다음과 같습니다.  

     ```
     alias/MyAliasName
     ```

1. **값(Value)**에 값을 입력합니다. 예를 들어 `MyFirstParameter`입니다. **SecureString**을 선택한 경우, 입력하는 값이 정확하게 마스킹됩니다.

1. **파라미터 생성(Create parameter)**을 선택합니다.

# 작업에 대한 프라이빗 레지스트리 인증
<a name="private-registry"></a>

를 사용한 작업에 대한 프라이빗 레지스트리 인증을 AWS Secrets Manager 사용하면 자격 증명을 안전하게 저장한 다음 작업 정의에서 참조할 수 있습니다. 이를 통해 작업 정의에서 인증이 AWS 필요한 외부의 프라이빗 레지스트리에 있는 컨테이너 이미지를 참조할 수 있습니다. 이 기능은 Amazon EC2 인스턴스 및 Fargate에서 호스팅되는 작업에서 지원됩니다.

**중요**  
작업 정의가 Amazon ECR에 저장된 이미지를 참조하는 경우 이 주제가 적용되지 않습니다. 자세한 정보는 *Amazon Elastic Container Registry 사용 설명서*의 [Amazon ECS에서 Amazon ECR 이미지 사용](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html)을 참조하세요.

Amazon EC2 인스턴스에서 호스팅되는 작업의 경우 이 기능을 사용하려면 버전 `1.19.0` 이상의 컨테이너 에이전트가 있어야 합니다. 그러나 최신 컨테이너 에이전트 버전을 사용하는 것이 좋습니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서의 [Amazon ECS 컨테이너 에이전트 업데이트](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)를 참조하세요.**

Fargate에서 호스팅되는 작업의 경우 이 기능을 사용하려면 플랫폼 버전 `1.2.0` 이상이 필요합니다. 자세한 정보는 Amazon Elastic Container Service 개발자 안내서의 [AWS Fargate Linux 플랫폼 버전](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform-linux-fargate.html)을 참조하세요.**

컨테이너 정의에서 자신이 생성한 암호의 세부 정보와 함께 `repositoryCredentials` 객체를 지정합니다. 참조하는 보안 암호는 이를 사용하는 작업과 다른 AWS 리전 계정 또는 다른 계정에서 가져올 수 있습니다.

**참고**  
 AWS Batch API AWS CLI또는 AWS SDK를 사용할 때 시작 중인 작업 AWS 리전 과 동일한에 보안 암호가 있는 경우 보안 암호의 전체 ARN 또는 이름을 사용할 수 있습니다. 암호가 다른 계정에 있는 경우 암호의 전체 ARN을 지정해야 합니다. 를 사용할 때는 보안 암호 AWS Management Console의 전체 ARN을 항상 지정해야 합니다.

다음은 필요한 파라미터를 나타낸 작업 정의의 조각입니다.

```
"containerProperties": [
  {
    "image": "private-repo/private-image",
    "repositoryCredentials": {
      "credentialsParameter": "arn:aws:secretsmanager:region:123456789012:secret:secret_name"
    }
  }
]
```

# 프라이빗 레지스트리 인증에 대한 필수 IAM 권한
<a name="private-auth-iam"></a>

실행 역할은 이 기능을 사용해야 합니다. 컨테이너 에이전트는 이 기능을 통해 컨테이너 이미지를 가져올 수 있습니다. 자세한 내용은 [AWS Batch IAM 실행 역할](execution-IAM-role.md) 단원을 참조하십시오.

생성하는 암호에 액세스 권한을 부여하려면 다음 권한을 인라인 정책으로 실행 역할에 추가하세요. 자세한 정보는 [IAM 정책 추가 및 제거](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) 섹션을 참조하세요.
+ `secretsmanager:GetSecretValue`
+ `kms:Decrypt`―사용자 키가 기본 KMS 키가 아닌 사용자 지정 KMS 키를 사용하는 경우에만 필요합니다. 사용자 지정 키의 Amazon 리소스 이름(ARN)을 리소스로 추가해야 합니다.

다음 예제에서는 인라인 정책이 권한을 추가합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:123456789012:secret:secret_name",
                "arn:aws:kms:us-east-1:123456789012:key/key_id"
            ]
        }
    ]
}
```

------

# 자습서: 프라이빗 레지스트리 인증을 위한 보안 암호 생성
<a name="private-auth-enable"></a>

다음 단계를 완료하여를 사용하여 프라이빗 레지스트리 자격 증명에 대한 보안 암호를 생성합니다 AWS Secrets Manager.

**기본 보안 암호 생성**

1. [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/) AWS Secrets Manager 콘솔을 엽니다.

1. **새 비밀 저장**을 선택합니다.

1. **암호 유형 선택**에서 **다른 유형의 암호**를 선택합니다.

1. **일반 텍스트(Plaintext)**를 선택하고 다음 형식과 같이 프라이빗 레지스트리 자격 증명을 입력합니다.

   ```
   {
     "username" : "privateRegistryUsername",
     "password" : "privateRegistryPassword"
   }
   ```

1. **다음(Next)**을 선택합니다.

1. **암호 이름(Secret name)**으로 **production/MyAwesomeAppSecret** 또는 **development/TestSecret** 같은 선택 경로와 이름을 입력하고, **다음(Next)**을 선택합니다. 필요한 경우 설명을 추가하면 나중에 이 암호의 용도를 기억하는 데 도움이 됩니다.

   암호 이름은 ASCII 문자, 숫자 또는 다음 문자 중 하나가 되어야 합니다. `/_+=.@-` 

1. (선택 사항) 이때, 암호에 대한 교체를 구성할 수 있습니다. 이 절차에서는 **자동 회전 비활성화** 상태로 두고 **다음**을 선택합니다.

   새 보안 암호 또는 기존 보안 암호에 대한 교체를 구성하는 방법에 대한 지침은 [AWS Secrets Manager 보안 암호 교체를 참조하세요](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html).

1. 설정을 검토한 다음 **암호 저장**을 선택하여 Secrets Manager에 새 암호로 입력한 모든 항목을 저장합니다.

작업 정의를 등록하고 **프라이빗 레지스트리**에서 **프라이빗 레지스트리 인증**을 켭니다. 그런 다음 **Secrets Manager ARN 또는 이름**에 보안 암호의 Amazon 리소스 이름(ARN)을 입력합니다. 자세한 내용은 [프라이빗 레지스트리 인증에 대한 필수 IAM 권한](private-auth-iam.md) 단원을 참조하십시오.

# Amazon EFS 볼륨
<a name="efs-volumes"></a>

Amazon Elastic File System(Amazon EFS)은 AWS Batch 작업에 간단하고 규모 조정이 가능한 파일 스토리지를 제공합니다. Amazon EFS를 사용하면 스토리지 용량이 탄력적입니다. 파일을 추가 및 제거하면 스토리지 용량의 규모가 자동으로 조정됩니다. 애플리케이션에서 스토리지가 필요할 때 필요한 만큼 확보할 수 있습니다.

AWS Batch에서 Amazon EFS 파일 시스템을 사용하여 컨테이너 인스턴스 집합 간에 파일 시스템 데이터를 내보낼 수 있습니다. 이렇게 하면 작업이 동일한 영구 스토리지에 액세스할 수 있습니다. 하지만 Docker 대몬(daemon)을 시작하기 전에 Amazon EFS 파일 시스템을 마운트하도록 컨테이너 인스턴스 AMI를 구성해야 합니다. 또한 작업 정의는 컨테이너 인스턴스에서 볼륨 마운트를 참조하여 파일 시스템을 사용해야 합니다. 다음 섹션은 AWS Batch에서 Amazon EFS를 사용하기 시작하는 데 도움이 됩니다.

## Amazon EFS 볼륨 고려 사항
<a name="efs-volume-considerations"></a>

Amazon EFS 볼륨을 사용할 때는 다음 사항을 고려해야 합니다.
+ EC2 리소스를 사용하는 작업의 경우, Amazon EFS 파일 시스템 지원이 컨테이너 에이전트 버전이 1.35.0인 Amazon ECS 최적화 AMI 버전 `20191212`의 공개 미리 보기로 추가되었습니다. 그러나 Amazon EFS 파일 시스템 지원은 Amazon EFS 액세스 포인트 및 IAM 권한 부여 기능이 포함된 컨테이너 에이전트 버전이 1.38.0인 Amazon ECS 최적화 AMI 버전 `20200319`의 정식 출시를 시작했습니다. 이러한 기능을 활용하려면 Amazon ECS 최적화 AMI 버전 `20200319` 이상을 사용하는 것이 좋습니다. 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 최적화 AMI 버전](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html)을 참조하세요.
**참고**  
자체 AMI를 생성하는 경우 컨테이너 에이전트 1.38.0 이상, `ecs-init` 버전 1.38.0-1 이상을 사용하고 Amazon EC2 인스턴스에서 다음 명령을 실행해야 합니다. 이는 모두 Amazon ECS 볼륨 플러그인을 활성화하기 위한 것입니다. 이 명령은 기본 이미지로 Amazon Linux 2 또는 Amazon Linux를 사용하는지에 따라 달라집니다.  

Amazon Linux 2  

  ```
  $ yum install amazon-efs-utils
  systemctl enable --now amazon-ecs-volume-plugin
  ```

Amazon Linux  

  ```
  $ yum install amazon-efs-utils
  sudo shutdown -r now
  ```
+ 버전 1.4.0 이상의 플랫폼에는 Fargate 리소스를 사용하는 작업에 Amazon EFS 파일 시스템 지원이 추가되었습니다. 자세한 내용을 알아보려면 *Amazon Elastic Container Service 개발자 안내서*의 [AWS Fargate 플랫폼 버전](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)을 참조하세요.
+ Fargate 리소스를 사용하는 작업에 Amazon EFS 볼륨 지정 시 Fargate는 Amazon EFS 볼륨을 관리하는 감독자 컨테이너를 생성합니다. 감독자 컨테이너는 소량의 작업 메모리를 사용합니다. 감독자 컨테이너는 태스크 메타데이터 버전 4 엔드포인트를 쿼리할 때 표시됩니다. 자세한 정보는 *AWS Fargate에 대한 Amazon Elastic Container Service 사용 설명서*의 [태스크 메타데이터 엔드포인트 버전 4](https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-metadata-endpoint-v4-fargate.html)를 참조하세요.

## Amazon EFS 액세스 포인트 사용
<a name="efs-volume-accesspoints"></a>

Amazon EFS 액세스 포인트는 EFS 파일 시스템에 대한 애플리케이션별 진입점으로, 공유 데이터 세트에 대한 애플리케이션 액세스를 관리하는 것을 지원합니다. Amazon EFS 액세스 포인트와 액세스 제어 방법에 대한 자세한 정보는 *Amazon Elastic File System 사용 설명서*의 [Amazon EFS 액세스 포인트 사용하기](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html)를 참조하세요.

액세스 포인트는 액세스 포인트를 통해 이루어지는 모든 파일 시스템 요청에 대해 사용자의 POSIX 그룹을 포함한 사용자 자격 증명을 적용할 수 있습니다. 또한 클라이언트가 지정된 디렉터리 또는 하위 디렉터리의 데이터에만 액세스할 수 있도록 파일 시스템에 대해 다른 루트 디렉터리를 적용할 수 있습니다.

**참고**  
EFS 액세스 포인트를 생성할 때 파일 시스템에서 루트 디렉터리 역할을 하는 경로를 지정합니다. AWS Batch 작업 정의의 액세스 포인트 ID로 EFS 파일 시스템을 참조할 때 루트 디렉터리는 생략하거나 `/`로 설정할 수 있습니다. 그러면 EFS 액세스 포인트에 설정된 경로가 적용됩니다.

AWS Batch 작업 역할을 사용하여 특정 애플리케이션에서 특정 액세스 포인트를 사용하도록 적용할 수 있습니다. IAM 정책을 액세스 포인트와 결합하면 애플리케이션의 특정 데이터 세트에 안전하게 액세스할 수 있습니다. 이 기능은 태스크 기능에 Amazon ECS IAM 역할을 사용합니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [태스크에 대한 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)을 참조하세요.

## 작업 정의에서 Amazon EFS 파일 시스템 지정
<a name="specify-efs-config"></a>

컨테이너에 Amazon EFS 파일 시스템 볼륨을 사용하려면 작업 정의에 볼륨 및 마운트 지점 구성을 지정해야 합니다. 다음 작업 정의 JSON 코드 조각은 컨테이너에 사용할 `volumes` 및 `mountPoints` 객체의 구문을 나타냅니다.

```
{
    "containerProperties": [
        {
            "image": "amazonlinux:2",
            "command": [
                "ls",
                "-la",
                "/mount/efs"
            ],
            "mountPoints": [
                {
                    "sourceVolume": "myEfsVolume",
                    "containerPath": "/mount/efs",
                    "readOnly": true
                }
            ],
            "volumes": [
                {
                    "name": "myEfsVolume",
                    "efsVolumeConfiguration": {
                        "fileSystemId": "fs-12345678",
                        "rootDirectory": "/path/to/my/data",
                        "transitEncryption": "ENABLED",
                        "transitEncryptionPort": integer,
                        "authorizationConfig": {
                            "accessPointId": "fsap-1234567890abcdef1",
                            "iam": "ENABLED"
                        }
                    }
                }
            ]
        }
    ]
}
```

`efsVolumeConfiguration`  
유형: 객체  
필수 여부: 아니요  
이 파라미터는 Amazon EFS 볼륨을 사용할 때 지정됩니다.    
`fileSystemId`  
유형: 문자열  
필수 항목 여부: 예  
사용할 Amazon EFS 파일 시스템 ID입니다.  
`rootDirectory`  
유형: 문자열  
필수 여부: 아니요  
호스트 내의 루트 디렉터리로 탑재할 Amazon EFS 파일 시스템 내 디렉터리입니다. 이 파라미터가 생략되면 Amazon EFS 볼륨의 루트가 사용됩니다. `/`를 지정하면 이 파라미터를 생략하는 것과 동일한 효과가 있습니다. 이름의 최대 길이는 4.096자입니다.  
`authorizationConfig`에서 EFS 액세스 포인트를 지정하는 경우 루트 디렉터리 파라미터를 생략하거나 `/`로 설정해야 합니다. 그러면 EFS 액세스 포인트에 설정된 경로가 적용됩니다.  
`transitEncryption`  
유형: 문자열  
유효한 값: `ENABLED` \$1 `DISABLED`  
필수 여부: 아니요  
AWS Batch 호스트와 Amazon EFS 서버 간 전송 중 Amazon EFS 데이터에 대한 암호화를 활성화할지 여부를 결정합니다. Amazon EFS IAM 권한 부여를 사용하는 경우 전송 중 데이터 암호화를 활성화해야 합니다. 이 파라미터가 누락되면 `DISABLED`의 기본값이 사용됩니다. 자세한 내용을 알아보려면 *Amazon Elastic File System 사용 설명서*의 [전송 중 데이터 암호화](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)를 참조하세요.  
`transitEncryptionPort`  
유형: Integer  
필수 여부: 아니요  
AWS Batch 호스트와 Amazon EFS 서버 간에 암호화된 데이터를 전송할 때 사용할 포트입니다. 전송 중 데이터 암호화 포트를 지정하지 않으면 Amazon EFS 탑재 헬퍼가 사용하는 포트 선택 전략이 사용됩니다. 이 값은 0\$165,535여야 합니다. 자세한 정보는 *Amazon Elastic File System 사용 설명서*의 [EFS 탑재 헬퍼](https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html)를 참조하세요.  
`authorizationConfig`  
유형: 객체  
필수 여부: 아니요  
Amazon EFS 파일 시스템에 대한 권한 부여 구성 세부 정보입니다.    
`accessPointId`  
유형: 문자열  
필수 여부: 아니요  
사용할 액세스 포인트 ID입니다. 액세스 포인트를 지정하는 경우 `efsVolumeConfiguration`의 루트 디렉터리 값을 생략하거나 `/`로 설정해야 합니다. 그러면 EFS 액세스 포인트에 설정된 경로가 적용됩니다. 액세스 포인트를 사용하는 경우 `EFSVolumeConfiguration`에서 전송 중 데이터 암호화를 활성화해야 합니다. 자세한 정보는 *Amazon Elastic File System 사용 설명서*의 [Amazon EFS 액세스 포인트 태스크를](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html) 참조세요.  
`iam`  
유형: 문자열  
유효한 값: `ENABLED` \$1 `DISABLED`  
필수 여부: 아니요  
Amazon EFS 파일 시스템을 탑재할 때 작업 정의에 정의된 AWS Batch 작업 IAM 역할을 사용할지 여부를 결정합니다. 활성화된 경우 `EFSVolumeConfiguration`에서 전송 중 데이터 암호화를 활성화해야 합니다. 이 파라미터가 누락되면 `DISABLED`의 기본값이 사용됩니다. IAM 실행 역할에 대한 자세한 정보는 [AWS Batch IAM 실행 역할](execution-IAM-role.md) 섹션을 참조하세요.

# 작업 정의 예
<a name="example-job-definitions"></a>

아래 주제의 작업 정의 예제는 환경 변수, 파라미터 대체, 볼륨 마운트 등 공통 패턴을 사용하는 방법에 대해서 설명하고 있습니다.

**Topics**
+ [환경 변수](example-use-envvars.md)
+ [파라미터 대체](example-use-parameters.md)
+ [GPU 기능 테스트](example-test-gpu.md)
+ [다중 노드 병렬 작업](example-mnp-job-definition.md)

# 환경 변수
<a name="example-use-envvars"></a>

다음은 환경 변수를 사용하여 파일 형식과 Amazon S3 URL을 지정하는 작업 정의 예제입니다. 여기에서 소개하는 예제는 컴퓨팅 블로그 포스트인 [Creating a Simple "Fetch & Run" AWS Batch Job](https://aws.amazon.com/blogs/compute/creating-a-simple-fetch-and-run-aws-batch-job/)에서 가져왔습니다. 이 블로그 포스트에 설명되어 있는 [https://github.com/awslabs/aws-batch-helpers/blob/master/fetch-and-run/fetch_and_run.sh](https://github.com/awslabs/aws-batch-helpers/blob/master/fetch-and-run/fetch_and_run.sh) 스크립트는 환경 변수를 사용하여 `myjob.sh` 스크립트를 S3에서 다운로드한 후 파일 형식을 선언합니다.

이번 예제에서는 명령 및 환경 변수가 작업 정의로 하드 코딩되어 있지만 명령 및 환경 변수 재정의를 지정하면 더욱 다양한 목적에 맞게 작업 정의를 생성할 수 있습니다.

```
{
    "jobDefinitionName": "fetch_and_run",
    "type": "container",
    "containerProperties": {
        "image": "123456789012.dkr.ecr.us-east-1.amazonaws.com/fetch_and_run",
        "resourceRequirements": [
            {
                "type": "MEMORY",
                "value": "2000"
            },
            {
                "type": "VCPU",
                "value": "2"
            }
        ],
        "command": [
            "myjob.sh",
            "60"
        ],
        "jobRoleArn": "arn:aws:iam::123456789012:role/AWSBatchS3ReadOnly",
        "environment": [
            {
                "name": "BATCH_FILE_S3_URL",
                "value": "s3://amzn-s3-demo-source-bucket/myjob.sh"
            },
            {
                "name": "BATCH_FILE_TYPE",
                "value": "script"
            }
        ],
        "user": "nobody"
    }
}
```

# 파라미터 대체
<a name="example-use-parameters"></a>

다음은 파라미터 대체를 사용하거나, 기본값을 설정하는 방법을 설명하는 작업 정의 예제입니다.

`Ref::` 영역의 `command` 선언은 파라미터 대체를 위한 자리 표시자를 설정하는 데 사용됩니다. 아래 작업 정의로 작업을 제출할 때는 파라미터 재정의를 지정하여 `inputfile`이나 `outputfile` 같은 값을 작성합니다. 아래에서 `parameters` 섹션은 `codec`에 대한 기본값을 설정하지만, 필요에 따라 해당 파라미터를 재정의할 수 있습니다.

자세한 내용은 [Parameters](job_definition_parameters.md#parameters) 섹션을 참조하세요.

```
{
    "jobDefinitionName": "ffmpeg_parameters",
    "type": "container",
    "parameters": {"codec": "mp4"},
    "containerProperties": {
        "image": "my_repo/ffmpeg",
        "resourceRequirements": [
            {
                "type": "MEMORY",
                "value": "2000"
            },
            {
                "type": "VCPU",
                "value": "2"
            }
        ],
        "command": [
            "ffmpeg",
            "-i",
            "Ref::inputfile",
            "-c",
            "Ref::codec",
            "-o",
            "Ref::outputfile"
        ],
        "jobRoleArn": "arn:aws:iam::123456789012:role/ECSTask-S3FullAccess",
        "user": "nobody"
    }
}
```

# GPU 기능 테스트
<a name="example-test-gpu"></a>

다음 예제의 작업 정의는 [GPU 워크로드 AMI 사용](batch-gpu-ami.md)에서 설명한 GPU 워크로드 AMI가 제대로 구성되었는지를 테스트합니다. 이 예제 작업 정의에서는 GitHub에서 TensorFlow deep MNIST 분류자 [예제](https://github.com/tensorflow/tensorflow/blob/r1.8/tensorflow/examples/tutorials/mnist/mnist_deep.py)를 실행합니다.

```
{
    "containerProperties": {
        "image": "tensorflow/tensorflow:1.8.0-devel-gpu",
        "resourceRequirements": [
            {
                "type": "MEMORY",
                "value": "32000"
            },
            {
                "type": "VCPU",
                "value": "8"
            }
        ],
        "command": [
            "sh",
            "-c",
            "cd /tensorflow/tensorflow/examples/tutorials/mnist; python mnist_deep.py"
        ]
    },
    "type": "container",
    "jobDefinitionName": "tensorflow_mnist_deep"
}
```

위의 JSON 텍스트가 포함된 `tensorflow_mnist_deep.json`이라는 파일을 생성한 후 다음 명령을 사용하여 AWS Batch 작업 정의를 등록할 수 있습니다.

```
aws batch register-job-definition --cli-input-json file://tensorflow_mnist_deep.json
```

# 다중 노드 병렬 작업
<a name="example-mnp-job-definition"></a>

다음 작업 정의 예에서는 다중 노드 병렬 작업을 보여 줍니다. 자세한 내용은 *AWS 컴퓨팅* 블로그의 [AWS Batch 내 다중 노드 병렬 작업으로 긴밀하게 결합된 분자 역학 워크플로 구축](https://aws.amazon.com/blogs/compute/building-a-tightly-coupled-molecular-dynamics-workflow-with-multi-node-parallel-jobs-in-aws-batch/)을 참조하세요.

```
{
  "jobDefinitionName": "gromacs-jobdef",
  "jobDefinitionArn": "arn:aws:batch:us-east-2:123456789012:job-definition/gromacs-jobdef:1",
  "revision": 6,
  "status": "ACTIVE",
  "type": "multinode",
  "parameters": {},
  "nodeProperties": {
    "numNodes": 2,
    "mainNode": 0,
    "nodeRangeProperties": [
      {
        "targetNodes": "0:1",
        "container": {
          "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/gromacs_mpi:latest",
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "24000"
              },
              {
                  "type": "VCPU",
                  "value": "8"
              }
          ],
          "command": [],
          "jobRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
          "ulimits": [],
          "instanceType": "p3.2xlarge"
        }
      }
    ]
  }
}
```