

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

# Amazon EC2 リソースに複数のコンテナを持つシングルノードのジョブ定義を作成する
<a name="create-job-definition-single-node-multi-container"></a>

Amazon Elastic Compute Cloud (Amazon EC2) リソースに複数のコンテナを持つシングルノードのジョブ定義を作成するには、次の手順を実行します。

**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. **[ジョブ定義構造]** で、**[レガシー containerProperties 構造の使用]** の処理をオフにします。

1. **EC2 プラットフォームの設定**で、**マルチノード並列を有効にする** をオフにします。

1. [**次へ**] を選択します。

1. **[全般設定]** セクションで、次のように入力します。

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

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

   1. **[スケジューリング優先度 - *オプション*]** をオンにします。0 ～ 100 の値でスケジューリング優先度を入力します。値が大きいほど優先度が高くなります。

   1. **[タグ - *オプション*]** を展開し、**[タグを追加]** を選択してリソースにタグを追加します。キーとオプショナル値を入力し、**新しいタグを追加**を選択します。

   1. **[タグを伝播]** をオンにして、タグをジョブとジョブ定義から Amazon ECS タスクに伝達することができます。

1. **[再試行戦略 - *オプション*]** セクションで、次のように入力します。

   1. **[ジョブの試行回数]** には、 AWS Batch がジョブを `RUNNABLE` ステータスに移行させるまでの試行回数を入力します。1 ～ 10 の整数を入力します。

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

1. **[タスクプロパティ]** セクションに、次のように入力します。

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

   1. **[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. **[IPC モード]** の場合は `host`、`task`、`none` を選択します。`host` が指定されている場合、同一のコンテナインスタンス上にある (ホスト IPC モードを指定した) タスク内のすべてのコンテナは、ホスト Amazon EC2 インスタンスと同じ IPC リソースを共有します。タスクが指定されている場合、指定されたタスク内のすべてのコンテナは同じ IPC リソースを共有します。none (なし) が指定されている場合、タスクのコンテナ内の IPC リソースはプライベートです。タスク内またはコンテナインスタンスの他のコンテナと共有されることはありません。値を指定しない場合、IPC リソース名前空間の共有はコンテナインスタンスの Docker デーモンの設定によって異なります。

   1. **[PID モード]** の場合は、`host` または `task` を選択します。例えば、サイドカーのモニタリングでは、`pidMode` が同じタスクで実行されている他のコンテナに関する情報にアクセスする必要がある場合があります。`host` が指定されている場合、同じコンテナインスタンスでホスト PID モードを指定したタスク内のすべてのコンテナは、ホスト Amazon EC2 インスタンスと同じプロセス名前空間を共有します。`task` が指定されている場合、指定したタスク内のすべてのコンテナは同じプロセス名前空間を共有します。値が指定されていない場合、デフォルトは各コンテナのプライベート名前空間です。

1. **[消費型リソース]** セクションに、次のように入力します。

   1. 一意の **[名前]** と **[リクエストされた値]** を入力します。

   1. **[消費型リソースの追加]** を選択すると、消費型リソースを追加できます。

1. **[ストレージ]** セクションで、以下の操作を行います。

   1. ボリュームの **[名前]** と **[ソースパス]** を入力し、**[ボリュームを追加]** を選択します。[EFS を有効にする] オプションを選択することもできます。

   1. **[ボリュームの追加]** を選択すると、ボリュームを追加できます。

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

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

1. **コンテナの設定** セクションで次の操作を行います。

   1. **[Name]** (名前) に、コンテナの名前を入力します。

   1. **[必須コンテナ]** では、コンテナが必須であれば有効にします。

   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. **[リソース要件]** には、以下をそれぞれ設定します。

      1. **[vCPUs]** では、コンテナの CPU 数を選択します。

      1. **[メモリ]** では、コンテナのメモリ量を選択します。

      1. **[GPU - *オプション*]** では、コンテナの GPU の数を選択します。

   1. **[ユーザー]** には、コンテナ内で使用するユーザー名を入力します。

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

   1. **[特権]** をオンにして、ルートユーザーと同様に、ホストインスタンスに対する昇格されたアクセス許可をジョブコンテナに付与します。

   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. **[リポジトリ認証情報 - *オプション*]** では、認証情報を含むシークレットの ARN を入力します。

   1. **[環境変数 - *オプション*]** では、**[環境変数の追加]** を選択し、コンテナに渡す環境変数を追加します。

   1. **[Linux パラメータ - *オプション*]** セクションでは、以下を行います:

      1. **init プロセスを有効にする** をオンにすると、コンテナ内で init プロセスを実行できます。

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

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

      1. **スワップ動作** では、コンテナのスワップ動作を示す 0 ～ 100 の値を入力します。値を指定せず、スワップが有効になっている場合、この値はデフォルトで 60 に設定されます。

      1. **デバイス** で、**デバイスを追加** を選択してデバイスを追加します。

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

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

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

      1. **Tmpfs** では、**tmpfs を追加** を選択して `tmpfs` マウントを追加します。

   1. 
**注記**  
Firelens のログ記録は、専用コンテナで行う必要があります。Firelens ログ記録を設定するには:  
専用 Firelens コンテナを除くすべてのコンテナで、**[ロギングドライバー]** を `awsfirelens` に設定します。
Firelens コンテナで、**[Firelens 設定 - オプション]** およびログ記録先に対する **[ログ記録設定 - *オプション*]** を設定します。

      **[Firelens 設定 - オプション]** セクションで以下を行います。
**重要**  
AWS Batch は、非 MNP、非 FARGATE Amazon ECS ジョブに`host`ネットワークモードを適用します。Amazon ECS Firelens には [ルートユーザーが必要です](https://github.com/aws/aws-for-fluent-bit/blob/mainline/troubleshooting/debugging.md#amazon-ecs-firelens-root-is-required)。`host` ネットワークモードを使用するタスクを実行する場合、[セキュリティを強化するために](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#network_mode)　ルートユーザー (UID 0) を使用してコンテナを実行しないでください。したがって、Firelens ログ記録を使用する非 MNP および非 FARGATE ECS ジョブはすべて、セキュリティのベストプラクティスを満たしません。

      1. **[タイプ]** で、`fluentd` または `fluentbit` を選択します。

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

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

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

   1. **[依存関係 - *オプション*]**で、**[コンテナ依存関係の追加]** を選択します。コンテナの名前と状態を選択して、このコンテナがいつ起動するかを決定します。

1. コンテナが 1 つしか設定されていない場合は、**[コンテナの追加]** を選択し、新しいコンテナの設定を完了する必要があります。それ以外の場合は、**[次へ]** を選択して確認します。