

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

# チュートリアル: Amazon EC2 リソースにマルチノード並列ジョブ定義を作成する
<a name="multi-node-job-def-ec2"></a>

Amazon Elastic Compute Cloud (Amazon EC2) リソースにマルチノード並列ジョブ定義を作成する方法を説明します。

**注記**  
*単一ノード*のジョブ定義を作成するには、「[Amazon EC2 リソースにシングルノードのジョブ定義を作成する](create-job-definition-EC2.md)」を参照してください。

**Amazon EC2 リソースにマルチノード並列ジョブ定義を作成するには:**

1. [https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) で AWS Batch コンソールを開きます。

1. ナビゲーションバーから、 AWS リージョン 使用する を選択します。

1. ナビゲーションペインで、**ジョブ定義** を選択します。

1. **作成]** を選択します。

1. **[オーケストレーションタイプ]** には、**[Amazon Elastic Compute Cloud (Amazon EC2)]** を選択します。

1. **[マルチノード並列を有効にする]** では、マルチノード並列をオンにします。

1. **名前** には、一意のジョブ定義名を入力します。名前には、アルファベット (大文字、小文字)、数字、ハイフン (-)、アンダースコア (\_) を含めることができ、最大 128 文字まで使用可能です。

1. (オプション) **実行のタイムアウト** で、ジョブの試行で実行する最大秒数を指定します。試行時間がこの秒数を超過すると、試行は停止し、`FAILED` ステータスに移行します。詳細については、[ジョブのタイムアウト](job_timeouts.md)を参照してください。

1. (オプション) **[スケジューリング優先度]** をオンにします。0 ～ 100 の値でスケジューリング優先度を入力します。値が大きいほど、低い値よりも優先されます。

1. (オプション) **ジョブの試行回数** には、 AWS Batch ジョブを `RUNNABLE` ステータスに移行する最大回数を入力します。1 ～ 10 の整数を入力します。

1. (オプション) **再試行戦略の条件** では、**終了時に評価を追加** を選択します。少なくとも 1 つのパラメータ値を入力し、**アクション** を選択します。条件セットごとに、**アクション** を **再試行** または **終了** に設定する必要があります。これらのアクションは、以下のことを意味します。
   + **再試行 — **指定したジョブ試行回数に達するまで AWS Batch 再試行します。
   + **終了** – ジョブの再試行を AWS Batch 停止します。
**重要**  
**終了時に評価を追加** を選択した場合は、少なくとも 1 つのパラメータを設定して **アクション]** を選択するか、**終了時に評価を削除]** を選択します。

1. (オプション) **タグ** を展開し、**タグを追加** を選択してリソースにタグを追加します。**タグの追加** を選択し、キーとオプションの値を入力します。**タグを伝播** をオンにして、タグをジョブとジョブ定義から Amazon ECS タスクに伝達することもできます。

1. **次のページ** を選択します。

1. **ノード数]** にジョブで使用するノードの合計数を入力します。

1. **主要なノード]** で、主要なノードに使用するノードインデックスを入力します。デフォルトの主要なノードインデックスは、`0` です。

1. **インスタンスタイプ** でインスタンスのタイプを選択します。
**注記**  
選択したインスタンスタイプはすべてのノードに適用されます。

1. **[パラメータ]** で **[パラメータを追加]** を選択し、パラメータ代替プレースホルダーを **[キー]** とオプションの **[値]** のペアとして追加します。

1. **[ノード範囲]** セクション：

   1. **ノード範囲の追加]** を選択します。これにより、**ノード範囲** セクションが作成されます。

   1. **ターゲットノード]** で、`{{range_start}}:{{range_end}}` 表記を使用してノードグループの範囲を指定します。

      ジョブに指定したノードに対して 5 つまでのノード範囲を作成できます。ノード範囲はノードに対してインデックス値を使用し、ノードインデックスは 0 から開始します。最終ノードグループの範囲終了インデックス値が、指定したノード数より 1 つ少ないことを確認してください。例えば、10 個のノードを指定し、1 つのノードグループを使用するとします。その場合、終了範囲は 9 にする必要があります。

   1. **イメージ** で、ジョブに使用する Docker イメージを選択します。デフォルトでは、Docker Hub レジストリのイメージを使用できます。`{{repository-url}}/{{image}}:{{tag}}` で他のリポジトリを指定することもできます。名前の長さは最大 225 文字です。大文字、小文字、数字、ハイフン (-)、アンダースコア (\_)、コロン (:)、スラッシュ (/)、およびシャープ (\#) を含めることができます。このパラメータは、[Docker Remote API](https://docs.docker.com/engine/api/v1.38/) の [コンテナの作成](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) セクションにある `Image` および [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) の `IMAGE` パラメータにマッピングされます。
**注記**  
Docker イメージのアーキテクチャは、スケジュールされているコンピューティングリソースのプロセッサアーキテクチャと一致している必要があります。たとえば、ARM ベースの Docker イメージは ARM ベースのコンピューティングリソースでのみ実行できます。
      + Amazon ECR Public リポジトリ内のイメージには、完全な `registry/repository[:tag]` または `registry/repository[@digest]` 命名規則が使用されます (例えば、`public.ecr.aws/{{registry_alias}}/{{my-web-app}}:{{latest}}`)。
      + Amazon ECR リポジトリ内のイメージには、完全な `registry/repository[:tag]` 命名規則が使用されます。例えば、`{{aws_account_id}}.dkr.ecr.{{region}}.amazonaws.com``/{{my-web-app}}:{{latest}}`
      + Docker Hub の公式リポジトリのイメージでは、1 つの名前 (例: `ubuntu` または `mongo`) を使用します。
      + Docker Hub の他のリポジトリのイメージは、組織名で修飾されます (例: `amazon/amazon-ecs-agent`)。
      + 他のオンラインリポジトリのイメージは、さらにドメイン名で修飾されます (例: `quay.io/assemblyline/ubuntu`)。

   1. **[コマンド]** では、コマンドを **JSON** 文字列配列に相当するものとしてフィールドに入力します。

      このパラメータは、[Docker Remote API](https://docs.docker.com/engine/api/v1.38/) の [コンテナの作成](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) セクションにある `Cmd` にマッピングされ、`COMMAND` パラメータは [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) にマッピングされます。Docker`CMD` パラメータの詳細については、[https://docs.docker.com/engine/reference/builder/\#cmd](https://docs.docker.com/engine/reference/builder/#cmd)を参照してください。
**注記**  
コマンドには、パラメータ置換のデフォルト値とプレースホルダーを使用できます。詳細については、[パラメータ](job_definition_parameters.md#parameters)を参照してください。

   1. **[vCPU]** で、コンテナ用に予約する vCPU の数を指定します。このパラメータは、[Docker Remote API ](https://docs.docker.com/engine/api/v1.38/)の[コンテナの作成](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)セクションの `CpuShares` にマップされ、`--cpu-shares` オプションは [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) にマップされます。各 vCPU は 1,024 個の CPU 配分に相当します。少なくとも 1 つの vCPU を指定する必要があります。

   1. **メモリ]** で、ジョブのコンテナに適用されるメモリのハード制限 (MiB 単位) を指定します。コンテナは、ここで指定したメモリを超えようとすると、停止されます。このパラメータは、[Docker Remote API ](https://docs.docker.com/engine/api/v1.38/)の[コンテナの作成](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)セクションの `Memory` にマップされ、`--memory` オプションは [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) にマップされます。ジョブに対して少なくとも 4 MiB のメモリを指定する必要があります。
**注記**  
リソースの使用率を最大限に高めるには、特定のインスタンスタイプに対してできるだけ多くのメモリを提供します。詳細については、[コンピューティングリソースメモリの管理](memory-management.md)を参照してください。

   1. (オプション) **GPU 数** に、ジョブで使用される GPU の数を指定します。ジョブは、指定された数の GPU が固定されているコンテナで実行されます。

   1. (オプション) **ジョブロール**では、ジョブ内のコンテナに AWS APIs を使用するアクセス許可を提供する IAM ロールを指定できます。この機能では、タスク用の Amazon ECS IAM ロールを使用します。設定の前提条件を含む詳細については、「*Amazon Elastic Container Service デベロッパーガイド*」の「[タスク用の IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)」を参照してください。
**注記**  
Fargate リソースで実行されているジョブには、ジョブロールが必要です。
**注記**  
ここには、**Amazon Elastic Container Service Task Role]** 信頼関係があるロールのみが表示されます。 AWS Batch ジョブの IAM ロールの作成の詳細については、*「Amazon Elastic Container Service* [デベロッパーガイド」の「タスクの IAM ロールとポリシーの作成](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)」を参照してください。

   1. (オプション) **実行ロール**に、ユーザーに代わって AWS API コールを行うアクセス許可を Amazon ECS コンテナエージェントに付与する IAM ロールを指定します。この機能では、タスク用の Amazon ECS IAM ロールを使用します。詳細については、「*Amazon Elastic Container Service デベロッパーガイド*」の「[Amazon ECS タスク実行 IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)」を参照してください。

1. (オプション) **追加設定** を展開します。

   1. **環境変数** では、**環境変数を追加** を選択し、環境変数を名前と値のペアとして追加します。これらの変数は、コンテナに渡されます。

   1. **ジョブロール設定**では、ジョブ内のコンテナに AWS APIs を使用するアクセス許可を提供する IAM ロールを指定できます。この機能では、タスク用の Amazon ECS IAM ロールを使用します。設定の前提条件を含む詳細については、「*Amazon Elastic Container Service デベロッパーガイド*」の「[タスク用の IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)」を参照してください。
**注記**  
Fargate リソースで実行されているジョブには、ジョブロールが必要です。
**注記**  
ここには、**Amazon Elastic Container Service Task Role]** 信頼関係があるロールのみが表示されます。 AWS Batch ジョブの IAM ロールの作成方法に関する詳細については、「*Amazon Elastic Container Service デベロッパーガイド*」の「[タスク用の IAM ロールとポリシーの作成](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)」を参照してください。

   1. **実行ロール**には、ユーザーに代わって AWS API コールを行うアクセス許可を Amazon ECS コンテナエージェントに付与する IAM ロールを指定します。この機能では、タスク用の Amazon ECS IAM ロールを使用します。詳細については、「*Amazon Elastic Container Service デベロッパーガイド*」の「[Amazon ECS タスク実行 IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)」を参照してください。

1. **[セキュリティ設定]** セクション：

   1. (オプション) **特権** を有効にすると、ホストインスタンスに対する昇格されたアクセス権限 (`root` ユーザーと同様) をジョブのコンテナに付与することができます。このパラメータは、[Docker Remote API](https://docs.docker.com/engine/api/v1.38/) の [コンテナの作成](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) セクションにある `Privileged` にマッピングされ、`--privileged` オプションは [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) にマッピングされます。

   1. (オプション) **ユーザー** には、コンテナ内で使用するユーザー名を入力します。このパラメータは、[Docker Remote API](https://docs.docker.com/engine/api/v1.38/) の [コンテナの作成](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate) セクションにある `User` にマッピングされ、`--user` オプションは [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) にマッピングされます。

   1. (オプション) **[シークレット]** で、**[シークレットを追加]** を選択して、シークレットを名前と値のペアとして追加します。これらのシークレットはコンテナに公開されます。詳細については、「[LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)」を参照してください。

1. **[Linux 設定]** セクション:

   1. **[読み取り専用ファイルシステムを有効にする]** をオンにして、ボリュームへの書き込みアクセスを削除します。

   1. (オプション) **[init プロセスを有効にする]** をオンにして、コンテナ内で `init` プロセスを実行します。このプロセスは信号を転送し、プロセスを利用します。

   1. **[共有メモリサイズ]** では、`/dev/shm` ボリュームのサイズ (MiB) を入力します。

   1. **最大スワップサイズ** では、コンテナが使用できるスワップメモリの合計容量 (MiB 単位) を入力します。

   1. **スワップ動作** では、コンテナのスワップ動作を示す 0 ～ 100 の値を入力します。値を指定せず、スワップが有効になっている場合、デフォルト値は 60 です。詳細については、「[LinuxParameters:swappiness](https://docs.aws.amazon.com/batch/latest/APIReference/API_LinuxParameters.html#Batch-Type-LinuxParameters-swappiness)」を参照してください。

   1. (オプション) **デバイス** では、**デバイスを追加** を選択してデバイスを追加します。

      1. **コンテナパス]** では、コンテナインスタンスでのデバイスのパスを指定します。このパスは、ホストインスタンスにマッピングされたデバイスを公開するために使用されます。空白のままにすると、ホストパスがコンテナで使用されます。

      1. **ホストパス]** では、ホストインスタンスでのデバイスのパスを指定します。

      1. **アクセス許可]** では、デバイスに適用する 1 つ以上のアクセス許可を選択します。使用できる権限は、**[読み取り]**、**[書き込み]**、**[MKNOD]** です。

1. (オプション) **[マウントポイント]** で、**[マウントポイント構成を追加]** を選択し、データボリュームにマウントポイントを追加します。ソースボリュームとコンテナパスを指定する必要があります。これらのマウントポイントは、コンテナインスタンスの Docker デーモンに渡されます。ボリュームを **[読み取り専用]** にすることもできます。

1. (オプション) **[Ulimit 設定]** では、**[ulimit を追加]** を選択して、コンテナの `ulimits` 値を追加します。**[名前]**、**[ソフトリミット]**、**[ハードリミット]** の値を入力し、**[ulimit を追加]** を選択します。

1. (オプション) **[ボリューム設定]** で、**[ボリュームを追加]** を選択して、コンテナに渡すボリュームのリストを作成します。ボリュームの **[名前]** と **[ソースパス]** を入力し、**[ボリュームを追加]** を選択します。**[EFS を有効にする]** オプションを選択することもできます。

1. (オプション) **[Tmpfs]** では、**[tmpfs を追加]** を選択して `tmpfs` マウントを追加します。

1. **[タスクプロパティ]** セクションで、次の操作を行います。

   1. **実行ロール - 条件付き**で、Amazon ECS エージェントがユーザーに代わって AWS API コールを実行できるようにするロールを選択します。**実行ロール**の作成について詳しくは、「[チュートリアル: IAM 実行ロールを作成する](create-execution-role.md)」を参照してください。

   1. 
**重要**  
**ECS 実行コマンド**を使用するには、コンピューティング環境が[マルチノード並列ジョブのコンピューティング環境に関する考慮事項](mnp-ce.md)を満たす必要があります。

      **[ECS 実行コマンドを有効化]** を選択し、Amazon ECS コンテナシェルへの直接アクセスを有効化し、ホスト OS をバイパスします。**[タスクロール]** を選択する必要があります。
**重要**  
**[ECS 実行]** コマンドでは、ファイルシステムが書き込み可能である必要があります。

   1. **タスクロール**で、Amazon ECS Identity and Access Management (IAM) ロールを選択して、コンテナがユーザーに代わって AWS API コールを実行できるようにします。詳細については、「*Amazon Elastic Container Service デベロッパーガイド*」の「[Amazon ECS のタスク IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)」を参照してください。

1. (オプション) **[ロギング設定]** セクション:

   1. **[ログドライバー]** で、使用するログドライバーを選択します。使用できるログドライバーの詳細については、「[LogConfiguration:logDriver](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-logDriver)」を参照してください。
**注記**  
デフォルトでは、`awslogs` ログドライバーが使用されます。

   1. **[オプション]** では、**[オプションを追加]** を選択してオプションを追加します。名前と値のペアを入力し、**[オプションを追加]** を選択します。

   1. **[シークレット]** で、**[シークレットを追加]** を選択します。名前と値のペアを入力し、**[シークレットを追加]** を選択してシークレットを追加します。
**ヒント**  
詳細については、「[LogConfiguration:secretOptions](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)」を参照してください。

1. **[次のページ]** を選択します。

1. **ジョブ定義のレビュー**については、設定手順を確認してください。変更する必要がある場合は、**編集]** を選択します。完了したら、**ジョブ定義の作成** を選択します。