チュートリアル: 配列ジョブインデックスを使用したジョブの差別化の制御 - AWS Batch

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

チュートリアル: 配列ジョブインデックスを使用したジョブの差別化の制御

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

このチュートリアルでは、虹のすべての色を持つテキストファイルを作成します。次に、インデックスをカラーファイルの行番号に使用できる値に変換する Dockerコンテナ 用のエントリポイントスクリプトを作成します。インデックスはゼロから始まりますが、行番号は 1 から始まります。カラーファイルとインデックスファイルをコンテナイメージにコピーし、イメージの ENTRYPOINT をエントリポイントスクリプトに設定する Dockerfile を作成します。Dockerfile とリソースは Amazon ECR にプッシュされる Docker イメージに組み込まれています。次に、新しいコンテナイメージを使用するジョブ定義を登録し、 AWS Batch そのジョブ定義を含む配列ジョブを送信して、結果を表示します。

前提条件

このチュートリアルには、次のような前提条件があります。

  • AWS Batch コンピューティング環境。詳細については、「コンピューティング環境の作成」を参照してください。

  • AWS Batch ジョブキューと関連するコンピューティング環境。詳細については、「ジョブキューの作成」を参照してください。

  • AWS CLI はローカルシステムにインストールされます。詳細については、AWS Command Line Interface ユーザーガイドのAWS Command Line Interfaceのインストールを参照してください。

  • Docker は、ローカルシステムにインストールされます。詳細については、Docker ドキュメントのDocker CE についてを参照してください。

ステップ 1: コンテナイメージの構築

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

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

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

    red orange yellow green blue indigo violet
  3. WorkSpace ディレクトリで、print-color.shという名前のファイルを作成し、以下を貼り付けます。

    注記

    配列インデックスは 0 から始まり、行番号は 1 から始まるため、LINE 変数は AWS_BATCH_JOB_ARRAY_INDEX +1 に設定されます。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.
  4. 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
  5. Docker イメージをビルドします。

    $ docker build -t print-color .
  6. 次のスクリプトを使用してコンテナをテストします。このスクリプトは、変数をローカルで 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.

ステップ 2: イメージを Amazon ECR にプッシュする

Docker コンテナを構築してテストしたので、それをイメージリポジトリにプッシュする必要があります。この例では Amazon ECR を使用していますが、 DockerHubなどの別のレジストリを使用することもできます。

  1. コンテナイメージを保存する Amazon ECR イメージを作成します。この例ではのみを使用していますが AWS CLI、を使用することもできます。 AWS Management Console詳細については、Amazon Elastic Container Registry ユーザーガイドリポジトリの作成を参照してください。

    $ aws ecr create-repository --repository-name print-color
  2. 前のステップから返されたAmazon ECR リポジトリ URI を使用して、print-color イメージにタグを付けます。

    $ docker tag print-color aws_account_id.dkr.ecr.region.amazonaws.com/print-color
  3. Amazon ECR レジストリにログインします。詳細については、Amazon Elastic Container Registry ユーザーガイドレジストリの認証を参照してください。

    $ aws ecr get-login-password \ --region region | docker login \ --username AWS \ --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
  4. Amazon ECR にイメージをプッシュします。

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

ステップ 3: ジョブ定義の作成と登録

これで Docker イメージがイメージレジストリーに追加されたので、 AWS Batch ジョブ定義で指定できます。次に、配列ジョブを実行するために後でそれを使用できます。この例では、 AWS CLIを使用します。ただし、 AWS Management Consoleを使用することもできます。詳細については、「シングルノードのジョブ定義を作成する 」を参照してください。

ジョブ定義を作成するには
  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" } ] } }
  2. ジョブ定義をに登録します。 AWS Batch

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

ステップ 4: AWS Batch 配列ジョブを送信する

ジョブ定義を登録したら、 AWS Batch 新しいコンテナイメージを使用する配列ジョブを送信できます。

AWS Batch アレイジョブを送信するには
  1. WorkSpace ディレクトリで、print-color-job.jsonという名前のファイルを作成し、以下を貼り付けます。

    注記

    この例では、前提条件 セクションで説明したジョブキューを使用しています。

    { "jobName": "print-color", "jobQueue": "existing-job-queue", "arrayProperties": { "size": 7 }, "jobDefinition": "print-color" }
  2. AWS Batch ジョブをジョブキューに送信します。出力で返されるジョブ ID を書き留めておいてください。

    $ aws batch submit-job --cli-input-json file://print-color-job.json
  3. ジョブのステータスを記述し、ジョブが SUCCEEDED に移動するのを待ちます。

ステップ 5: 配列ジョブログの表示

SUCCEEDEDジョブがステータスに達すると、 CloudWatch ジョブのコンテナからログを表示できます。

Logs CloudWatch でジョブのログを表示するには
  1. https://console.aws.amazon.com/batch/ AWS Batch でコンソールを開きます。

  2. 左のナビゲーションペインで ジョブ を選択します。

  3. Job queue] (ジョブキュー) で、キューを選択します。

  4. Status] (ステータス) セクションで、succeeded] (成功) を選択します。

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

  6. ジョブのコンテナからログを表示するには、子ジョブのいずれかを選択し、View logs] (ログの表示) を選択します。

    
      Array ジョブコンテナログ
  7. 他の子ジョブのログを表示します。各ジョブは、虹の別の色を返します。