

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 配列ジョブインデックスを使用してジョブの区別を制御する
<a name="array_index_example"></a>

このチュートリアルでは、`AWS_BATCH_JOB_ARRAY_INDEX` 環境変数を使用して子ジョブを区別する方法を説明します。各子ジョブは、この変数に割り当てられます。この例では、子ジョブのインデックス番号を使用して、ファイル内の特定の行を読み込みます。次に、その行番号に関連付けられたパラメータを、ジョブのコンテナ内のコマンドで置き換えます。その結果、同じ Docker イメージとコマンド引数を実行する複数の AWS Batch ジョブを持つことができます。ただし、配列ジョブインデックスが修飾子として使用されるため、結果が異なります。

このチュートリアルでは、虹のすべての色を持つテキストファイルを作成します。次に、インデックスをカラーファイルの行番号に使用できる値に変換する Dockerコンテナ 用のエントリポイントスクリプトを作成します。インデックスはゼロから始まりますが、行番号は 1 から始まります。カラーファイルとインデックスファイルをコンテナイメージにコピーし、イメージの `ENTRYPOINT` をエントリポイントスクリプトに設定する Dockerfile を作成します。Dockerfile とリソースは Amazon ECR にプッシュされる Docker イメージに組み込まれています。次に、新しいコンテナイメージを使用するジョブ定義を登録し、そのジョブ定義で 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 ドキュメントの[Docker CE について](https://docs.docker.com/install/)を参照してください。

# コンテナイメージの構築
<a name="build-index-container"></a>

コマンドパラメータのジョブ定義を `AWS_BATCH_JOB_ARRAY_INDEX` で使用できます。 ただし、エントリポイントスクリプトで変数を使用するコンテナイメージを作成することをお勧めします。このセクションでは、そのようなコンテナイメージを作成する方法について説明します。

**Docker コンテナイメージを構築するには**

1. Docker イメージワークスペースとして使用する新しいディレクトリを作成し、そのディレクトリに移動します。

1. WorkSpace ディレクトリで、`colors.txt`という名前のファイルを作成し、以下を貼り付けます。

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

1. WorkSpace ディレクトリで、`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. WorkSpace ディレクトリで、`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 イメージをビルドします。

   ```
   $ 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 マネジメントコンソール。詳細については、*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 マネジメントコンソールを使用することもできます。詳細については、「[シングルノードのジョブ定義を作成する](create-job-definition.md)」を参照してください。

**ジョブ定義を作成するには**

1. WorkSpace ディレクトリで、`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. WorkSpace ディレクトリで、`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. **Status]** (ステータス) セクションで、**succeeded]** (成功) を選択します。

1. 配列ジョブのすべての子ジョブを表示するには、前のセクションで返されたジョブ ID を選択します。

1. ジョブのコンテナからログを表示するには、子ジョブのいずれかを選択し、**View logs]** (ログの表示) を選択します。  
![\[Array ジョブコンテナログ\]](http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/images/array-logs.png)

1. 他の子ジョブのログを表示します。各ジョブは、虹の別の色を返します。