ジョブ定義の作成 - AWS Batch

ジョブ定義の作成

AWS Batch でジョブを実行する前に、ジョブ定義を作成する必要があります。このプロセスは、単一ノードと複数ノード並列ジョブでは若干異なります。このトピックでは、マルチノード並列ジョブ以外の AWS Batch ジョブのジョブ定義の作成を対象としています。

複数ノードの並列ジョブ定義を作成するには、「マルチノードの並列ジョブ定義を作成する」を参照してください。マルチノードの並列ジョブの詳細については、「マルチノードの並列ジョブ」を参照してください。

新しいジョブ定義を作成するには

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

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

  3. ナビゲーションペインで [ジョブ定義]、[作成] を選択します。

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

  5. プラットフォームでは、ジョブが EC2 インスタンスで実行される場合は[EC2]を、AWS Fargate キャパシティで実行される場合は[Fargate]を選択します。詳細については、「AWS Fargate 上の AWS Batch」を参照してください。

  6. [再試行の戦略]では、ジョブを再試行する回数を指定できます。また、失敗したジョブを再試行するかどうかを決定するための条件を作成することもできます。これらの条件は、エラーコードの文字列の一致と、ジョブの試行でリストされている理由に基づいています。詳細については、「ジョブの再試行の自動化」を参照してください。

    1. [ジョブ試行] で、ジョブが失敗した場合に再試行する回数を指定します。この数値は、1 ~ 10 の間でなければなりません。

    2. (オプション) [終了時に評価を追加]を選択すると、ジョブの試行で返される終了コード、ステータス理由、理由と文字列パターンをマッチさせる条件を最大 5 つまで追加することができます。それぞれの条件に対して、アクションを[リトライ](ジョブの試行回数に達するまで再試行する)か[終了](ジョブの再試行を停止する)のいずれかに設定する必要があります。

  7. (オプション) [Execution Timeout (実行のタイムアウト)] で、ジョブの試行で実行を許可する最大秒数を指定します。試行時間がこの秒数を超過すると、ジョブは停止し、ステータスは FAILED に変わります。詳細については、「ジョブのタイムアウト」を参照してください。

  8. マルチノードの並列処理の場合、このボックスをオフのままにします。複数ノードの並列ジョブ定義を代わりに作成するには、「マルチノードの並列ジョブ定義を作成する」を参照してください。

  9. コンテナプロパティでは、ジョブ配置時に Docker デーモンに渡すプロパティを指定することができます。

    1. [イメージ] で、ジョブに使用する Docker イメージを選択します。Docker Hub レジストリのイメージはデフォルトで使用できます。repository-url/image:tag で他のリポジトリを指定することもできます。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコア、コロン、ピリオド、スラッシュ、シャープ記号を使用できます。このパラメータは、Docker Remote API コンテナを作成する セクションと docker runImageIMAGE パラメータにマップされます。

      注記

      Docker イメージのアーキテクチャは、スケジュールされているコンピューティングリソースのプロセッサアーキテクチャと一致している必要があります。例えば、ARM ベースの Docker イメージは、ARM ベースのコンピューティングリソースでのみ実行することができます。

      • Amazon ECR リポジトリ内のイメージには、完全な registry/repository:tag 命名規則が使用されます。たとえば、aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latest と指定します。

      • Docker ハブの公式リポジトリのイメージでは、1 つの名前 (例: ubuntumongo) を使用します。

      • Docker ハブの他のリポジトリのイメージは、組織名で修飾されます (例: amazon/amazon-ecs-agent)。

      • 他のオンラインリポジトリのイメージは、さらにドメイン名で修飾されます (例: quay.io/assemblyline/ubuntu)。

    2. [コマンド] で、コンテナに渡すコマンドを指定します。シンプルなコマンドの場合は、コマンドプロンプトに入力するように [スペース区切り] タブにコマンドを入力します。さらに、JSON の結果 (実際に Docker デーモンに渡される形式) が正しいことを確認します。より複雑なコマンド (特殊文字を含むものなど) の場合は、[JSON] タブに切り替えて同等の文字列配列を入力できます。

      このパラメータは、Docker Remote API の [コンテナの作成] セクションの Cmd にマッピングされ、COMMAND パラメータは docker run にマッピングされます。Docker CMD パラメータの詳細については、https://docs.docker.com/engine/reference/builder/#cmd を参照してください。

      注記

      コマンドでは、パラメータ置換とプレースホルダーのデフォルト値を使用できます。詳細については、「Parameters」を参照してください。

    3. [vCPU] で、コンテナ用に予約する vCPU の数を指定します。このパラメータは、Docker Remote API Create a container (コンテナを作成する)セクションにCpuSharesにマップされ、--cpu-sharesオプションはdocker runにマップされます。各 vCPU は 1,024 個の CPU 配分に相当します。少なくとも 1 つの vCPU を指定する必要があります。

    4. [メモリ] で、ジョブのコンテナに適用されるメモリのハード制限 (MiB 単位) を指定します。コンテナは、ここで指定したメモリを超えようとすると、強制終了されます。このパラメータは、Docker Remote API Create a container (コンテナを作成する)セクションにMemoryにマップされ、--memoryオプションはdocker runにマップされます。ジョブに対して少なくとも 4 MiB のメモリを指定する必要があります。

      注記

      特定のインスタンスタイプのジョブにメモリを優先順位付けすることで、リソース使用率を最大化できます。手順については、「コンピューティングリソースメモリ管理」を参照してください。

    5. (オプション) [GPU 数] に、ジョブで使用される GPU の数を指定します。

      ジョブは、指定された数の GPU が固定されているコンテナで実行されます。

    6. [追加設定]セクションで、コンテナで使用する追加のパラメータを指定できます。

      1. (オプション) [ジョブロール] では、AWS API を使用する権限をジョブのコンテナに付与する IAM ロールを指定できます。この機能では、タスク用の Amazon ECS IAM ロールを使用します。設定の前提条件を含む詳細については、Amazon Elastic Container Service デベロッパーガイドの「タスク用の IAM ロール」を参照してください。

        注記

        ジョブロールは、Fargate リソースで実行されているジョブに必要です。

        注記

        ここには、[Amazon Elastic Container Service Task Role] 信頼関係があるロールのみが表示されます。AWS Batch ジョブの IAM ロールの作成に関する詳細については、Amazon Elastic Container Service デベロッパーガイドの [タスク用の IAM ロールとポリシーの作成] を参照してください。

      2. 実行ロールでは、ユーザーに代わって AWS API コールを実行するためのアクセス許可を Amazon ECS コンテナと Fargate エージェントに付与する IAM ロールを指定できます。この機能では、タスク用の Amazon ECS IAM ロールを使用します。設定の前提条件を含む詳細については、Amazon Elastic Container Service デベロッパーガイドの「Amazon ECS タスク実行 IAM ロール」を参照してください。

        注記

        実行ロールは、Fargate リソースで実行されているジョブに必要です。

      3. (オプション、Fargate リソースで実行されているジョブに対してのみ)[パブリックIP を割り当てる]で、ジョブにパブリック IP アドレスを付与するため、[有効]を選択します。プライベートサブネットで動作しているジョブがインターネットにアウトバウンドトラフィックを送信するためには、プライベートサブネットに NAT ゲートウェイをインターネットへのルートリクエストに接続する必要があります。コンテナイメージをプルできるように、この操作を行う必要がある場合があります。詳細については、Amazon Elastic Container Service デベロッパーガイドの「Amazon ECS のタスクネットワーキング」を参照してください。

      4. (オプション) [マウントポイント] セクションで、アクセスするジョブのコンテナのマウントポイントを設定できます。

        1. [コンテナパス] に、ホストボリュームをマウントするコンテナのパスを入力します。

        2. [ソースボリューム] に、マウントするボリュームの名前を入力します。

        3. コンテナに対してボリュームを読み取り専用にするには、[読み取り専用] を選択します。

      5. (オプション、EC2 リソースで実行されているジョブのみ) [uLimit] セクションで、ジョブのコンテナに使用する ulimit 値を設定できます。

        1. [制限の追加] を選択します。

        2. [制限の名前] で適用する ulimit を選択します。

        3. [ソフト制限] で、ulimit タイプに適用するソフト制限を選択します。

        4. [ハード制限] で、ulimit タイプに適用するハード制限を選択します。

      6. (オプション) [環境変数] セクションで、ジョブのコンテナに渡す環境変数を指定できます。このパラメータは、Docker Remote API Create a container (コンテナを作成する)セクションにEnvにマップされ、--envオプションはdocker runにマップされます。

        重要

        認証情報データなどの機密情報にプレーンテキストの環境変数を使用することはお勧めしません。

        1. 環境変数の追加 を選択します。

        2. [キー] で、環境変数のキーを指定します。

          注記

          環境変数は AWS_BATCH で始まることはできません。この命名規則は、AWS Batch サービスで設定される変数のために予約されています。

        3. [] で、環境変数の値を指定します。

      7. (オプション) [Volumes (ボリューム)] セクションで、ジョブのコンテナに渡すジョブのデータボリュームを指定できます。ボリュームを追加するには、[ボリュームを追加]を選択します。

        1. [Name] に、ボリュームの名前を入力します。名前の最大長は 255 文字です。大文字および小文字の ASCII 文字、数字、ハイフン(-)、アンダースコア(_)を含めることができます。

        2. (オプション) Amazon EFS ファイルシステムを使用するには、[EFS を有効にする]を選択します。

          1. [ファイルシステム ID]には、ファイルシステム ID を入力します。

          2. (オプション)ルートディレクトリには、ホスト内にルートディレクトリとしてマウントする Amazon EFS ファイルシステム内のディレクトリを入力します。このパラメータを省略すると、Amazon EFS ボリュームのルートが使用されます。/ を指定すると、このパラメータを省略した場合と同じ結果になります。

        3. (オプション、EC2 リソースで実行されているジョブのみ) [Source Path] に、コンテナに渡すホストインスタンスのパスを入力します。このフィールドを空のままにすると、Docker デーモンによってホストパスが割り当てられます。ソースパスを指定した場合、削除するまで、データボリュームはホストコンテナインスタンス上の指定した場所に保持されます。ソースパスがホストコンテナインスタンスに存在しない場合、Docker デーモンによってそのパスが作成されます。その場所が存在する場合は、ソースパスフォルダの内容がコンテナにエクスポートされます。

        4. (オプション)転送中の暗号化を使用するには、[転送中の暗号化を有効にする]を選択します。転送中の暗号化は、AWS Batch ホストと Amazon EFS サーバー間の転送中の Amazon EFS データの暗号化を可能にします。Amazon EFS IAM 認証を使用する場合は、転送中の暗号化を有効にする必要があります。詳細については、Amazon Elastic File System ユーザーガイドEncrypting data in transit を参照してください。

          1. (オプション)転送中の暗号化ポートで、AWS Batch ホストと Amazon EFS サーバーの間で暗号化されたデータを送信する際に使用するポートを入力します。転送中の暗号化ポートを指定しないと、Amazon EFS マウントヘルパーが使用するポート選択方式が使用されます。この値は 0~65,535 の範囲の値にする必要があります。詳細については、Amazon Elastic File System ユーザーガイドの「EFS マウントヘルパー」を参照してください。

          2. (オプション)アクセスポイント IDで、使用するアクセスポイント ID を入力します。アクセスポイントを指定する場合は、ルートディレクトリの値を省略するか、/ に設定する必要があります。詳細については、Amazon Elastic File System ユーザーガイドの「Amazon EFS アクセスポイントの使用」を参照してください。

          3. (オプション) Amazon EFS ファイルシステムのマウント時に実行ロールを使用するには、[選択したジョブロールを使用する]を選択します。詳細については、「AWS Batch タスク実行 IAM ロール」を参照してください。

      8. (オプション) [セキュリティ] セクションで、ジョブのコンテナのセキュリティオプションを設定できます。

        1. ホストインスタンスに対する昇格されたアクセス許可 (root ユーザーと同様) をジョブのコンテナに付与するには、[検眼モードを有効にする] を選択します。このパラメータは、Docker Remote API Create a container (コンテナを作成する)セクションにPrivilegedにマップされ、--privilegedオプションはdocker runにマップされます。

        2. [ユーザー] に、コンテナ内で使用するユーザー名を入力します。このパラメータは、Docker Remote API Create a container (コンテナを作成する)セクションにUserにマップされ、--userオプションはdocker runにマップされます。

      9. (オプション) [Linux Parameters (Linux パラメータ)] セクションでは、ジョブのコンテナに使用するデバイスマッピングを設定することが可能です。これにより、コンテナはホストインスタンス上のデバイスにアクセスできるようになります。

        1. (オプション)[デバイス] セクションで、[デバイスの追加] を選択します。

          1. (オプション)[デバイス]セクションでデバイスを追加するには、[デバイスを追加]を選択します。

          2. [Host path (ホストパス)] で、ホストインスタンスでのデバイスのパスを指定します。

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

          4. [Permissions (アクセス許可)] で、コンテナでデバイスに適用する 1 つ以上のアクセス許可を選択します。使用可能なアクセス許可は READWRITEMKNOD です。

        2. (オプション)[共有メモリサイズ]セクションで、/dev/shm ボリュームのサイズ(MiB 単位)を入力します。

        3. (オプション)[最大スワップサイズ]セクションで、コンテナが使用できるスワップメモリの合計容量(MiB 単位)を入力します。

        4. (オプション)[スワップ動作]セクションで、コンテナのスワップ動作を示す 0 ~ 100 の値を入力します。指定せず、スワップが有効になっている場合、デフォルト値は 60 です。詳細については、ジョブ定義のパラメータ の「スワップ動作」を参照してください。

        5. (オプション)[Tmpfs]セクションで、tmpfs マウントを追加するには、[tmpfs を追加]を選択します。

          1. [コンテナパス]フィールドで、tmpfs ボリュームがマウントされたコンテナ内の絶対ファイルパスを入力します。

          2. [サイズ]フィールドに、Tmpfs ボリュームのサイズ(MiB 単位)を入力します。

          3. (オプション)[マウントオプション]フィールドに、マウントオプションを入力します。使用可能なマウントオプションのリストを含む詳細については、ジョブ定義のパラメータ の「mountOptions」を参照してください。

      10. (オプション)[ログ設定] セクションでは、ジョブのコンテナに使用するログドライバ=を設定できます。デフォルトでは、awslogs ログドライバーが使用されます。

        1. [ログドライバ]セクションで、使用するログドライバーを選択します。使用できるログドライバーの詳細については、ジョブ定義のパラメータ の「logDriver」を参照してください。

        2. (オプション)[オプション]セクションで、[オプションの追加]を選択してオプションを追加します。

          1. [名前]フィールドに、オプションの名前を入力します。使用できるオプションは、ログドライバーによって異なります。詳細については、ログドライバーの文書を参照してください。

          2. []フィールドで、オプションの値を入力します。

        3. (オプション)[シークレット]セクションで、[シークレットを追加]を選択してシークレットを追加します。

          1. [名前]フィールドに、シークレットの名前を入力します。詳細については、ジョブ定義のパラメータsecretOptions を参照してください。

          2. []フィールドで、シークレットの ARN を入力します。

  10. (オプション) [パラメータ] セクションで、ジョブのコンテナの起動時に実行されるコマンドにパラメータ置換のデフォルト値とプレースホルダーを指定できます。詳細については、「Parameters」を参照してください。

    1. [パラメータの追加] を選択します。

    2. [キー] で、パラメータのキーを指定します。

    3. [] で、パラメータの値を指定します。

  11. (オプション)[Tags] セクションで、ジョブ定義に関連付ける各タグのキーと値を指定します。詳細については、「AWS Batch リソースのタグ付け」を参照してください。

  12. [ジョブ定義の作成] を選択します。