

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

# 배열 작업 인덱스를 사용한 작업 차별화 관리
<a name="array_index_example"></a>

이 자습서에서는 `AWS_BATCH_JOB_ARRAY_INDEX` 환경 변수를 사용하여 하위 작업을 구분하는 방법을 설명합니다. 각 하위 작업이 이 변수에 할당됩니다. 이 예제에서는 하위 작업의 인덱스 번호를 사용하여 파일의 특정 줄을 읽습니다. 그런 다음 해당 줄 번호와 관련된 파라미터를 작업 컨테이너 내의 명령으로 대체합니다. 결과적으로 동일한 Docker 이미지 및 명령 인수를 실행하는 여러 AWS Batch 작업을 가질 수 있습니다. 하지만 배열 작업 인덱스가 한정자로 사용되므로 결과가 달라집니다.

이 자습서에서는 각 줄에 무지개색 텍스트 파일을 만듭니다. 그런 다음 Docker 컨테이너용 진입점 스크립트를 만들어 색상 파일의 줄 번호에 사용 가능한 값(인덱스는 0부터 시작하지만 줄 번호는 1부터 시작)으로 인덱스를 변환합니다. 인덱스는 0에서 시작하지만 줄 번호는 1부터 시작합니다. 색상과 인덱스 파일을 컨테이너 이미지에 복사하고 이미지의 `ENTRYPOINT`(을)를 진입점 스크립트에 지정하는 Dockerfile을 만듭니다. Dockerfile 및 리소스를 도커 이미지에 만들어 Amazon ECR로 푸시합니다. 그런 다음 새 컨테이너 이미지를 사용하는 작업 정의를 등록하고, 해당 작업 정의와 함께 AWS Batch 배열 작업을 제출하고, 결과를 봅니다.

**Topics**
+ [사전 조건](array-tutorial-prereqs.md)
+ [컨테이너 이미지 빌드](build-index-container.md)
+ [이미지를 Amazon ECR로 푸시](push-array-image.md)
+ [작업 정의 생성 및 등록](create-array-job-def.md)
+ [AWS Batch 배열 작업 제출](submit-array-job.md)
+ [배열 작업 로그 보기](#array-tutorial-logs)

# 사전 조건
<a name="array-tutorial-prereqs"></a>

이 자습서 워크플로의 사전 요구 사항은 다음과 같습니다.
+  AWS Batch 컴퓨팅 환경. 자세한 내용은 [컴퓨팅 환경 생성](create-compute-environment.md) 단원을 참조하십시오.
+  AWS Batch 작업 대기열 및 관련 컴퓨팅 환경. 자세한 내용은 [작업 대기열 생성](create-job-queue.md) 단원을 참조하십시오.
+ 로컬 시스템에 AWS CLI 설치된 . 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS Command Line Interface설치](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)를 참조하세요.
+ 로컬 시스템에 설치한 도커입니다. 자세한 내용은 Docker 설명서의 [Docker CE 소개](https://docs.docker.com/install/)를 참조하세요.

# 컨테이너 이미지 빌드
<a name="build-index-container"></a>

명령 파라미터의 작업 정의에 `AWS_BATCH_JOB_ARRAY_INDEX`를 사용할 수 있습니다. 하지만 진입점 스크립트에서 변수를 사용하는 컨테이너 이미지를 대신 생성하는 것이 좋습니다. 이 섹션에서는 이러한 컨테이너 이미지를 만드는 방법을 설명합니다.

**Docker 컨테이너 이미지를 빌드하려면**

1. 도커 이미지 작업 영역으로 사용할 새 디렉터리를 만들고 여기로 이동합니다.

1. 작업 영역 디렉터리에 이름이 `colors.txt`인 파일을 만들고 그 아래에 내용을 붙여 넣습니다.

   ```
   red
   orange
   yellow
   green
   blue
   indigo
   violet
   ```

1. 작업 영역 디렉터리에 이름이 `print-color.sh`인 파일을 만들고 그 아래에 내용을 붙여 넣습니다.
**참고**  
배열 인덱스는 0에서 시작하지만 줄 번호는 1에서 시작하므로 `LINE` 변수가 `AWS_BATCH_JOB_ARRAY_INDEX`\$11로 지정됩니다. `COLOR` 변수가 줄 번호와 연결된 `colors.txt`의 색으로 지정됩니다.

   ```
   #!/bin/sh
   LINE=$((AWS_BATCH_JOB_ARRAY_INDEX + 1))
   COLOR=$(sed -n ${LINE}p /tmp/colors.txt)
   echo My favorite color of the rainbow is $COLOR.
   ```

1. 작업 영역 디렉터리에 이름이 `Dockerfile`인 파일을 만들고 다음 콘텐츠를 붙여 넣습니다. 이 Dockerfile이 이전 파일을 컨테이너에 복사하고 컨테이너가 시작하면 진입점 스크립트를 실행하도록 지정합니다.

   ```
   FROM busybox
   COPY print-color.sh /tmp/print-color.sh
   COPY colors.txt /tmp/colors.txt
   RUN chmod +x /tmp/print-color.sh
   ENTRYPOINT /tmp/print-color.sh
   ```

1. 도커 이미지를 빌드합니다.

   ```
   $ docker build -t print-color .
   ```

1. 다음 스크립트로 컨테이너를 테스트합니다. 이 스크립트는 로컬에서 `AWS_BATCH_JOB_ARRAY_INDEX` 변수를 0으로 지정한 다음 증분하여 하위가 7개인 배열 작업을 시뮬레이션합니다.

   ```
   $ AWS_BATCH_JOB_ARRAY_INDEX=0
   while [ $AWS_BATCH_JOB_ARRAY_INDEX -le 6 ]
   do
       docker run -e AWS_BATCH_JOB_ARRAY_INDEX=$AWS_BATCH_JOB_ARRAY_INDEX print-color
       AWS_BATCH_JOB_ARRAY_INDEX=$((AWS_BATCH_JOB_ARRAY_INDEX + 1))
   done
   ```

   출력 값은 다음과 같습니다.

   ```
   My favorite color of the rainbow is red.
   My favorite color of the rainbow is orange.
   My favorite color of the rainbow is yellow.
   My favorite color of the rainbow is green.
   My favorite color of the rainbow is blue.
   My favorite color of the rainbow is indigo.
   My favorite color of the rainbow is violet.
   ```

# 이미지를 Amazon ECR로 푸시
<a name="push-array-image"></a>

이제 Docker 컨테이너를 구축하고 테스트했으므로 이미지 리포지토리에 푸시해야 합니다. 이 예제는 Amazon ECR을 사용하지만, DockerHub 같은 다른 레지스트리를 선택해도 됩니다.

1. 컨테이너 이미지를 저장할 Amazon ECR 이미지 리포지토리를 생성합니다. 이 예제에서는 만 사용하지만 AWS CLI도 사용할 수 있습니다 AWS Management Console. 자세한 내용은* Amazon Elastic Container Registry 사용 설명서*의 [리포지토리 생성](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)을 참조하세요.

   ```
   $ aws ecr create-repository --repository-name print-color
   ```

1. 이전 단계에서 반환된 Amazon ECR 리포지토리 URI로 `print-color` 이미지에 태그를 지정합니다.

   ```
   $ docker tag print-color aws_account_id.dkr.ecr.region.amazonaws.com/print-color
   ```

1. Amazon ECR 레지스트리에 로그인합니다. 자세한 내용은 *Amazon Elastic Container Registry 사용 설명서*의 [레지스트리 권한](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)을 참조하세요.

   ```
   $ aws ecr get-login-password \
       --region region | docker login \
       --username AWS \
       --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
   ```

1. 이미지를 Amazon ECR로 푸시합니다.

   ```
   $ docker push aws_account_id.dkr.ecr.region.amazonaws.com/print-color
   ```

# 작업 정의 생성 및 등록
<a name="create-array-job-def"></a>

이제 Docker 이미지가 이미지 레지스트리에 있으므로 AWS Batch 작업 정의에서 지정할 수 있습니다. 그런 다음 나중에 이를 사용하여 배열 작업을 실행할 수 있습니다. 이 예제에서는 AWS CLI(을)를 사용합니다. 하지만 AWS Management Console(을)를 사용할 수도 있습니다. 자세한 내용은 [단일 노드 작업 정의 생성](create-job-definition.md) 단원을 참조하십시오.

**작업 정의를 생성하려면**

1. 작업 영역 디렉터리에 이름이 `print-color-job-def.json`인 파일을 만들고 그 아래에 내용을 붙여 넣습니다. 이미지 리포지토리 URI를 고유의 이미지 URI로 바꿉니다.

   ```
   {
     "jobDefinitionName": "print-color",
     "type": "container",
     "containerProperties": {
       "image": "aws_account_id.dkr.ecr.region.amazonaws.com/print-color",
       "resourceRequirements": [
           {
               "type": "MEMORY",
               "value": "250"
           },
           {
               "type": "VCPU",
               "value": "1"
           }
       ]
     }
   }
   ```

1. 작업 정의를에 등록합니다 AWS Batch.

   ```
   $ aws batch register-job-definition --cli-input-json file://print-color-job-def.json
   ```

# AWS Batch 배열 작업 제출
<a name="submit-array-job"></a>

작업 정의를 등록한 후 새 컨테이너 이미지를 사용하는 AWS Batch 배열 작업을 제출할 수 있습니다.

**AWS Batch 배열 작업을 제출하려면**

1. 작업 영역 디렉터리에 이름이 `print-color-job.json`인 파일을 만들고 그 아래에 내용을 붙여 넣습니다.
**참고**  
이 예에서는 [사전 조건](array-tutorial-prereqs.md) 섹션에 언급된 작업 대기열을 사용합니다.

   ```
   {
     "jobName": "print-color",
     "jobQueue": "existing-job-queue",
     "arrayProperties": {
       "size": 7
     },
     "jobDefinition": "print-color"
   }
   ```

1. 작업을 AWS Batch 작업 대기열에 제출합니다. 출력에서 반환된 작업 ID를 기록합니다.

   ```
   $ aws batch submit-job --cli-input-json file://print-color-job.json
   ```

1. 작업의 상태를 설명하고 이 작업이 `SUCCEEDED`(으)로 이동하기를 기다립니다.

## 배열 작업 로그 보기
<a name="array-tutorial-logs"></a>

작업이 `SUCCEEDED` 상태에 도달한 후 작업의 컨테이너에서 CloudWatch Logs를 볼 수 있습니다.

**CloudWatch Logs에서 작업 로그를 보려면**

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

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

1. **Job queue(작업 대기열)**에서 대기열을 선택합니다.

1. **상태** 섹션에서 **성공**을 선택합니다.

1. 배열 작업의 하위 작업을 모두 표시하려면 이전 섹션에서 반환된 작업 ID를 선택합니다.

1. 작업의 컨테이너에서 로그를 보려면 하위 작업 중 하나 선택하고 **로그 보기**를 선택합니다.  
![\[배열 작업 컨테이너 로그\]](http://docs.aws.amazon.com/ko_kr/batch/latest/userguide/images/array-logs.png)

1. 다른 하위 작업의 로그를 봅니다. 각 작업은 다른 무지개색을 반환합니다 .