

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

# 配列ジョブ
<a name="array_jobs"></a>

配列ジョブは、ジョブ定義、vCPU、メモリなどの共通パラメータを共有するジョブです。これは、関連しているが個別の基本ジョブのコレクションとして実行されます。複数のホストに分散されたり、同時に実行される場合もあります。配列ジョブは、モンテカルロシミュレーションジョブ、パラメータスイープジョブ、大規模なレンダリングジョブなど、大量の並列ジョブを実行するもっとも効率的な方法です。

AWS Batch 配列ジョブは、通常のジョブと同様に送信されます。ただし、配列内で実行する子ジョブの数を定義する配列サイズ (2 ～ 10,000) を指定します。配列サイズが 1,000 以内のジョブを送信する場合は、単一ジョブが実行され 1,000 個の子ジョブが生成されます。配列ジョブは、すべての子ジョブを管理するリファレンスまたはポインタです。これにより、1つのクエリで大量のワークロードを送信することができます。`attemptDurationSeconds`パラメータで指定されたタイムアウトは、それぞれの子ジョブに適用されます。親アレイジョブには、タイムアウトはありません。

配列ジョブを送信すると、親配列ジョブは通常の AWS Batch ジョブ ID を取得します。子ジョブのベース ID は、それぞれ同じです。各子ジョブは同じベース ID を持ちますが、子ジョブの配列インデックスが親 ID の末尾に付加されます。例えば、配列の最初の子ジョブは`example_job_ID:0`です。

親アレイジョブは、 `SUBMITTED`、 `PENDING`、`FAILED`、または `SUCCEEDED` ステータスを入力できます。アレイの親ジョブは、`PENDING` 子ジョブが `RUNNABLE` に更新されるとに更新されます。これらの依存関係の詳細については、[ジョブの依存関係](job_dependencies.md)を参照してください。

実行時、`AWS_BATCH_JOB_ARRAY_INDEX` 環境変数がコンテナの対応するジョブ配列インデックス番号に設定されます。最初の配列ジョブインデックスは `0` 番となり、後続の試行は昇順の番号 (1、2、3 など) になります。このインデックス値を使用して、配列ジョブの子がどのように区別されるかを制御できます。詳細については、[配列ジョブインデックスを使用してジョブの区別を制御する](array_index_example.md)を参照してください。

配列ジョブの依存関係では、依存関係のタイプを指定できます (`SEQUENTIAL` または `N_TO_N` など)。`SEQUENTIAL` タイプの依存関係 (ジョブ ID を指定しない) を指定できます。こうすることで各子配列ジョブがインデックス 0 から開始して連続的に完了します。例えば、配列サイズが 100 の配列ジョブを送信する場合、依存関係を `SEQUENTIAL` タイプに指定すると、100 個の子ジョブが連続押して生成され、最初の子ジョブが成功してから次の子ジョブが開始されます。以下の図で示すジョブ A は、配列サイズが 10 である配列ジョブです。ジョブ A の子インデックスの各ジョブは、前の子ジョブに依存します。ジョブ A:1 はジョブ A:0 が完了するまで開始できません。

![\[Flowchart showing Job-A with sequential child jobs A:0 through A:9, connected by arrows.\]](http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/images/sequential-dep.png)


また、アレイジョブのジョブ ID を使用して `N_TO_N` タイプの依存関係を指定することもできます。この場合、このジョブの各インデックスの子は各依存関係の対応するインデックスの子が完了するまで待機してから開始されます。以下の図で示すジョブ A およびジョブ B は、配列サイズがそれぞれ 10,000 である 2 つの配列ジョブです。ジョブ B の子インデックスの各ジョブは、ジョブ A の対応するインデックスに依存します。ジョブ B:1 はジョブ A:1 が完了するまで開始できません。

![\[Two array jobs, Job-A and Job-B, with 10,000 indexed tasks each, showing N_TO_N dependency.\]](http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/images/n-to-n-dep.png)


親配列ジョブをキャンセルまたは終了した場合、子ジョブもすべてキャンセルまたは終了します。個々の子ジョブを、他の子ジョブに影響を与えずにキャンセルまたは終了できます (`FAILED` ステータスに移動させる)。ただし、子配列ジョブが失敗した場合 (それ自身の失敗または手動でキャンセルもしくは終了した場合)、親ジョブも失敗します。このシナリオでは、すべての子ジョブが完了すると、親ジョブは `FAILED` に移行します。

配列ジョブの検索とフィルタリングの詳細については、「」を参照してください[ジョブキュー内のジョブを検索する](searching-filtering-jobs.md)。

**Topics**
+ [配列ジョブワークフローの例](example_array_job.md)
+ [配列ジョブインデックスを使用してジョブの区別を制御する](array_index_example.md)

# 配列ジョブワークフローの例
<a name="example_array_job"></a>

 AWS Batch お客様にとって一般的なワークフローは、前提条件のセットアップジョブを実行し、多数の入力タスクに対して一連のコマンドを実行し、結果を集約して概要データを Amazon S3、DynamoDB、Amazon Redshift、または Aurora に書き込むジョブで終了することです。

例えば、次のようになります。
+ `JobA`: 配列ではない標準的なジョブです。Amazon S3 バケット、`BucketA` 内のオブジェクトの高速リスト化およびメタデータ検証を実行します。[ジョブの JSON 送信構文](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) は、次のとおりです。

  ```
  {
      "jobName": "JobA",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobA-list-and-validate:1"
  }
  ```
+ `JobB` : `JobA` に依存する 10,000 個のコピーを持つ配列ジョブです。CPU 負荷の高いコマンドを `BucketA` の各オブジェクトに対して実行し、結果を `BucketB` にアップロードします。[ジョブの JSON 送信構文](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) は、次のとおりです。

  ```
  {
      "jobName": "JobB",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobB-CPU-Intensive-Processing:1",
      "containerOverrides": {
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "4096"
              },
              {
                  "type": "VCPU",
                  "value": "32"
              }
          ]
     }
      "arrayProperties": {
          "size": 10000
      },
      "dependsOn": [
          {
              "jobId": "JobA_job_ID"
    }
      ]
  }
  ```
+ `JobC`: `JobB` に `N_TO_N` 依存関係モデルで依存する 10,000 個のコピーを持つ別の配列ジョブです。メモリ負荷の高いコマンドを `BucketB` の各項目に対して実行し、メタデータを DynamoDB に書き込んで、結果の出力を `BucketC` にアップロードします。[ジョブの JSON 送信構文](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) は、次のとおりです。

  ```
  {
      "jobName": "JobC",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobC-Memory-Intensive-Processing:1",
      "containerOverrides": {
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "32768"
              },
              {
                  "type": "VCPU",
                  "value": "1"
              }
          ]
     }
      "arrayProperties": {
          "size": 10000
      },
      "dependsOn": [
          {
              "jobId": "JobB_job_ID",
              "type": "N_TO_N"
          }
      ]
  }
  ```
+ `JobD`: 10 個の検証ステップを実行する配列ジョブです。検証ステップはそれぞれ DynamoDB にクエリする必要があり、上記の Amazon S3 バケットのいずれかとやり取りする可能性があります。の各ステップは同じコマンドを `JobD` 実行します。しかし、ジョブのコンテナ内の環境変数`AWS_BATCH_JOB_ARRAY_INDEX`の値によって動作は異な異なります。これらの検証ステップは順番に実行されます (例えば、`JobD:0` の次に `JobD:1`)。[ジョブの JSON 送信構文](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) は、次のとおりです。

  ```
  {
      "jobName": "JobD",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobD-Sequential-Validation:1",
      "containerOverrides": {
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "32768"
              },
              {
                  "type": "VCPU",
                  "value": "1"
              }
          ]
     }
      "arrayProperties": {
          "size": 10
      },
      "dependsOn": [
          {
              "jobId": "JobC_job_ID"
          },
          {
              "type": "SEQUENTIAL"
          },
   
      ]
  }
  ```
+ `JobE`: 最終的な配列ではないジョブです。シンプルなクリーンアップオペレーションをいくつか実行し、パイプラインが完了したことおよび出力 URL へのリンクを記載したメッセージを含む Amazon SNS 通知を送信します。[ジョブの JSON 送信構文](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) は、次のとおりです。

  ```
  {
      "jobName": "JobE",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobE-Cleanup-and-Notification:1",
      "parameters": {
          "SourceBucket": "s3://amzn-s3-demo-source-bucket",
          "Recipient": "pipeline-notifications@mycompany.com"
      },
      "dependsOn": [
          {
              "jobId": "JobD_job_ID"
          }
      ]
  }
  ```

# 配列ジョブインデックスを使用してジョブの区別を制御する
<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. 他の子ジョブのログを表示します。各ジョブは、虹の別の色を返します。