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

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

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

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

このチュートリアルでは、虹のすべての色を持つテキストファイルを作成します。次に、インデックスをカラーファイルの行番号に使用できる値に変換する 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. という名前のファイルを作成するDockerfileWorkSpace ディレクトリで、次の内容を貼り付けます。この 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. 次のスクリプトを使用してコンテナをテストします。このスクリプトは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.

ステップ 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」という名前のファイルを作成し、以下を貼り付けます。

    注記

    この例では、AWS Batch 初回実行ウィザードによって作成されるデフォルトのジョブキュー名を想定しています。ジョブキュー名が異なる場合は、first-run-job-queue の名前をジョブキュー名に置き換えます。

    { "jobName": "print-color", "jobQueue": "first-run-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 ジョブのコンテナからのログ。

ジョブのログログログログを表示するには CloudWatch ログ

  1. を開きます。AWS Batchのコンソールhttps://console.aws.amazon.com/batch/

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

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

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

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

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

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