

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

# キュー環境を使用してジョブを設定する
<a name="configure-jobs"></a>

AWS Deadline Cloud は、*キュー環境*を使用してワーカーにソフトウェアを設定します。環境では、セッション内のすべてのタスクに対して、セットアップやティアダウンなどの時間のかかるタスクを 1 回実行できます。セッションを開始または停止するときにワーカーで実行するアクションを定義します。キューの環境、キューで実行されるジョブ、ジョブの個々のステップを設定できます。

環境は、キュー環境またはジョブ環境として定義します。Deadline Cloud コンソールまたは [deadline:CreateQueueEnvironment](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_CreateQueueEnvironment.html) オペレーションを使用してキュー環境を作成し、送信するジョブのジョブテンプレートでジョブ環境を定義します。これらは、 環境の Open Job Description (OpenJD) 仕様に従います。詳細については、GitHub の OpenJD 仕様の[「<Environment>](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment)」を参照してください。

`name` および に加えて`description`、各環境にはホスト上の環境を定義する 2 つのフィールドが含まれています。具体的には次の 2 つです。
+ `script` – この環境がワーカーで実行されたときに実行されるアクション。
+ `variables` – 環境に入るときに設定される環境変数の名前と値のペアのセット。

または の少なくとも 1 `script` つを設定する必要があります`variables`。

ジョブテンプレートで複数の環境を定義できます。各環境は、テンプレートにリストされている順序で適用されます。これを使用して、環境の複雑さを管理できます。

Deadline Cloud のデフォルトのキュー環境では、conda パッケージマネージャーを使用して環境にソフトウェアをロードしますが、他のパッケージマネージャーを使用できます。デフォルトの環境では、ロードするソフトウェアを指定する 2 つのパラメータを定義します。これらの変数は Deadline Cloud が提供する送信者によって設定されますが、デフォルトの環境を使用する独自のスクリプトやアプリケーションで設定できます。具体的には次の 2 つです。
+ `CondaPackages` – ジョブにインストールする conda パッケージ一致仕様のスペース区切りリスト。たとえば、Blender 送信者は `blender=3.6`を Blender 3.6 のレンダリングフレームに追加します。
+ `CondaChannels` – パッケージをインストールする conda チャネルのスペース区切りリスト。サービスマネージドフリートの場合、パッケージは`deadline-cloud`チャネルからインストールされます。他のチャネルを追加できます。

# OpenJD キュー環境でジョブ環境を制御する
<a name="control-the-job-environment"></a>

キュー環境を使用して*、レンダリングジョブ用にカスタマイズされた環境*を定義できます。キュー環境は、特定のキューで実行されているジョブの環境変数、ファイルマッピング、およびその他の設定を制御するテンプレートです。これにより、キューに送信されたジョブの実行環境をワークロードの要件に合わせて調整できます。 AWS Deadline Cloud には、オープン[ジョブ記述 (OpenJD) 環境](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment)を適用できる 3 つのネストされたレベルとして、キュー、ジョブ、ステップがあります。キュー環境を定義することで、さまざまなタイプのジョブに対して一貫した最適化されたパフォーマンスを確保し、リソース割り当てを合理化し、キュー管理を簡素化できます。

キュー環境は、 AWS 管理コンソールまたは を使用して AWS アカウントのキューにアタッチするテンプレートです AWS CLI。キュー用に 1 つの環境を作成することも、実行環境を作成するために が適用した複数のキュー環境を作成することもできます。このアプローチにより、 環境をステップで作成してテストし、ジョブに対して正しく動作することを確認することができます。

ジョブ環境とステップ環境は、キューにジョブを作成するために使用するジョブテンプレートで定義されます。OpenJD 構文は、これらの異なる形式の環境で同じです。このセクションでは、ジョブテンプレート内にそれらを表示します。

**Topics**
+ [キュー環境で環境変数を設定する](set-environment-variables.md)
+ [キュー環境でパスを設定する](set-the-path.md)
+ [キュー環境からバックグラウンドデーモンプロセスを実行する](run-a-background-daemon-process.md)

# キュー環境で環境変数を設定する
<a name="set-environment-variables"></a>

多くのアプリケーションとフレームワークでは、環境変数を使用して機能設定、ログ記録レベル、表示設定を制御します。[Open Job Description (OpenJD) 環境](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment)を使用して、スコープ内のすべてのタスクコマンドが継承する環境変数を設定できます。

## 環境変数スコープ
<a name="set-env-vars-scope"></a>

AWS Deadline Cloud は、キューにアタッチしたキュー環境から環境変数を適用します。ジョブテンプレート内で、[OpenJD 環境を使用してジョブレベルとステップレベルで環境](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment)変数を定義することもできます。より狭いスコープで定義された変数は、より広いスコープから同じ名前の変数を上書きします。
+ **キュー環境** – Deadline Cloud のキューにアタッチするテンプレート。変数は、キューに送信されたすべてのジョブに適用されます。固定値の`variables`マップで変数を設定することも、動的値のスクリプトを使用することもできます。
+ **ジョブ環境** – ジョブテンプレートの `jobEnvironments` で定義されます。変数は、ジョブ内のすべてのステップとタスクに適用されます。ジョブレベルの変数は、キューレベルの変数を同じ名前で上書きします。
+ **ステップ環境** – ジョブテンプレートの `stepEnvironments` で定義されます。変数は、そのステップのタスクにのみ適用されます。ステップレベルの変数は、ジョブレベルまたはキューレベルの変数を同じ名前で上書きします。

## キュー環境で変数を設定する
<a name="set-env-vars-queue-env"></a>

キュー環境の環境変数は、固定値の`variables`マップを使用するか、動的値の`onEnter`アクション`script`で を使用して設定できます。

次のキュー環境テンプレートは、`variables`マップを使用して`QT_QPA_PLATFORM`変数を に設定し`offscreen`、[Qt Framework](https://www.qt.io/product/framework) を使用するアプリケーションがインタラクティブディスプレイなしでワーカーホストで実行できるようにします。

```
specificationVersion: 'environment-2023-09'
environment:
  name: QtOffscreen
  variables:
    QT_QPA_PLATFORM: offscreen
```

仮想環境の変更`PATH`やアクティブ化などの動的な値の場合は、stdout `openjd_env: VAR=value`の形式で行を出力するスクリプトを使用します。`openjd_env:` プレフィックスは必須です。プレフィックスなしで `echo`、`export`、またはその他のシェルメカニズムを使用しても、ジョブやタスクに変数は伝達されません。

次のキュー環境テンプレートは、スクリプトを使用して `QT_QPA_PLATFORM`変数を設定します。

```
specificationVersion: 'environment-2023-09'
environment:
  name: QtOffscreen
  script:
    actions:
      onEnter:
        command: bash
        args:
        - "{{Env.File.Enter}}"
    embeddedFiles:
    - name: Enter
      type: TEXT
      data: |
        #!/bin/env bash
        set -euo pipefail
        echo "openjd_env: QT_QPA_PLATFORM=offscreen"
```

キュー環境にアタッチするには、Deadline Cloud コンソールまたは を使用します AWS CLI。詳細については、 AWS Deadline Cloud ユーザーガイドの[「キュー環境の作成](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/create-queue-environment.html)」を参照してください。次の AWS CLI コマンドは、テンプレートファイルからキュー環境を作成します。

```
aws deadline create-queue-environment \
    --farm-id FARM_ID \
    --queue-id QUEUE_ID \
    --priority 1 \
    --template-type YAML \
    --template file://my-queue-env.yaml
```

conda 仮想環境の作成やアクティブ化などのより複雑な例については、GitHub の [Deadline Cloud キュー環境のサンプル](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/queue_environments)を参照してください。

## ジョブテンプレートでの変数の設定
<a name="set-env-vars-job-template"></a>

ジョブテンプレートで、 `jobEnvironments`または `stepEnvironments`エントリに`variables`マップを追加します。各エントリはキーと値のペアで、キーは変数名、値は変数値です。

次のジョブテンプレートは、 `QT_QPA_PLATFORM`環境変数を に設定し`offscreen`、[Qt Framework](https://www.qt.io/product/framework) を使用するアプリケーションがインタラクティブディスプレイなしでワーカーホストで実行できるようにします。

```
specificationVersion: 'jobtemplate-2023-09'
name: MyJob
jobEnvironments:
- name: JobEnv
  variables:
    QT_QPA_PLATFORM: offscreen
```

1 つの環境定義で複数の変数を設定できます。

```
jobEnvironments:
- name: JobEnv
  variables:
    JOB_VERBOSITY: MEDIUM
    JOB_PROJECT_ID: my-project-id
    JOB_ENDPOINT_URL: https://my-host-name/my/path
    QT_QPA_PLATFORM: offscreen
```

`{{Param.ParameterName}}` 構文を使用して、変数値のジョブパラメータを参照できます。

```
jobEnvironments:
- name: JobEnv
  variables:
    JOB_EXAMPLE_PARAM: "{{Param.ExampleParam}}"
```

特定のステップのジョブレベルの変数を上書きするには、同じ変数名で`stepEnvironments`エントリを定義します。次の例では`JOB_PROJECT_ID`、ジョブレベルで 値を で定義し`project-12`、ステップレベルで 値を で上書きします`step-project-12`。ステップのタスクは、ステップレベルの値を使用します。

```
specificationVersion: 'jobtemplate-2023-09'
name: MyJob
jobEnvironments:
- name: JobEnv
  variables:
    JOB_PROJECT_ID: project-12
steps:
- name: MyStep
  stepEnvironments:
  - name: StepEnv
    variables:
      JOB_PROJECT_ID: step-project-12
```

## 試す: 環境変数サンプルの実行
<a name="set-env-vars-example"></a>

Deadline Cloud サンプルリポジトリには、[環境変数の設定と表示を示すジョブバンドル](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_env_vars/template.yaml)が含まれています。サンプルジョブテンプレートは、ジョブレベルとステップレベルの両方で変数を定義し、マージされた結果を出力するタスクを実行します。サンプルを実行し、結果を検査するには、次の手順に従います。

### 前提条件
<a name="set-prerequisites"></a>

1. キューと関連する Linux フリートを持つ Deadline Cloud ファームがない場合は、[Deadline Cloud コンソール](https://console.aws.amazon.com/deadlinecloud/home)のガイド付きオンボーディングエクスペリエンスに従って、デフォルト設定で作成します。

1. ワークステーションに Deadline Cloud CLI と AWS Deadline Cloud モニターがない場合は、[「Deadline Cloud 送信者の設定](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/submitter.html)」の手順に従ってください。

1. `git` を使用して [Deadline Cloud サンプル GitHub リポジトリ](https://github.com/aws-deadline/deadline-cloud-samples)のクローンを作成します。

   ```
   git clone https://github.com/aws-deadline/deadline-cloud-samples.git
   cd deadline-cloud-samples/job_bundles
   ```

### サンプルの実行
<a name="set-run-example"></a>

1. Deadline Cloud CLI を使用して`job_env_vars`サンプルを送信します。

   ```
   deadline bundle submit job_env_vars
   ```

1. Deadline Cloud モニターで、新しいジョブを選択して進行状況をモニタリングします。キューに関連付けられたLinuxフリートにワーカーが使用可能になると、ジョブは数秒で完了します。タスクを選択し、タスクパネルの右上メニューで**ログの表示**を選択します。

### セッションアクションとその定義の比較
<a name="set-compare-actions"></a>

ログビューには 3 つのセッションアクションが表示されます。テキストエディタでファイル [job\$1env\$1vars/template.yaml](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_env_vars/template.yaml) を開き、各アクションをジョブテンプレートの定義と比較します。

1. **JobEnv **セッション起動アクションを選択します。ログ出力には、設定されているジョブレベルの環境変数が表示されます。

   ```
   Setting: JOB_VERBOSITY=MEDIUM
   Setting: JOB_EXAMPLE_PARAM=An example parameter value
   Setting: JOB_PROJECT_ID=project-12
   Setting: JOB_ENDPOINT_URL=https://internal-host-name/some/path
   Setting: QT_QPA_PLATFORM=offscreen
   ```

   ジョブテンプレートの次の行は、この環境を定義します。

   ```
   jobEnvironments:
   - name: JobEnv
     variables:
       JOB_VERBOSITY: MEDIUM
       JOB_EXAMPLE_PARAM: "{{Param.ExampleParam}}"
       JOB_PROJECT_ID: project-12
       JOB_ENDPOINT_URL: https://internal-host-name/some/path
       QT_QPA_PLATFORM: offscreen
   ```

1. **StepEnv セッションの起動**アクションを選択します。ログ出力には、オーバーライドされた を含むステップレベルの変数が表示されます`JOB_PROJECT_ID`。

   ```
   Setting: STEP_VERBOSITY=HIGH
   Setting: JOB_PROJECT_ID=step-project-12
   ```

   ジョブテンプレートの次の行は、この環境を定義します。

   ```
   stepEnvironments:
   - name: StepEnv
     variables:
       STEP_VERBOSITY: HIGH
       JOB_PROJECT_ID: step-project-12
   ```

1. **タスク実行**セッションアクションを選択します。ログ出力には、タスクで使用できるマージされた環境変数が表示されます。がステップレベルの値 `JOB_PROJECT_ID`を使用することに注意してください`step-project-12`。

   ```
   Environment variables starting with JOB_*:
   JOB_ENDPOINT_URL=https://internal-host-name/some/path
   JOB_EXAMPLE_PARAM='An example parameter value'
   JOB_PROJECT_ID=step-project-12
   JOB_VERBOSITY=MEDIUM
   
   Environment variables starting with STEP_*:
   STEP_VERBOSITY=HIGH
   ```

# キュー環境でパスを設定する
<a name="set-the-path"></a>

OpenJD 環境を使用して、 環境で新しいコマンドを提供します。まず、スクリプトファイルを含むディレクトリを作成し、そのディレクトリを`PATH`環境変数に追加します。これにより、スクリプト内の実行可能ファイルは、ディレクトリパスを毎回指定することなく実行できます。環境定義の変数のリストでは変数を変更できないため、代わりにスクリプトを実行して変更します。スクリプトがモノをセットアップして を変更すると`PATH`、 コマンド を使用して変数を OpenJD ランタイムにエクスポートします`echo "openjd_env: PATH=$PATH"`。

## 前提条件
<a name="set-prerequisites"></a>

 Deadline Cloud サンプル github リポジトリの[環境変数を使用してサンプルジョブバンドル](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_env_vars/template.yaml)を実行するには、次の手順を実行します。

1.  キューと関連する Linux フリートを持つ Deadline Cloud ファームがない場合は、[Deadline Cloud コンソール](https://console.aws.amazon.com/deadlinecloud/home)のガイド付きオンボーディングエクスペリエンスに従って、デフォルト設定で作成します。

1.  ワークステーションに Deadline Cloud CLI と Deadline Cloud モニターがない場合は、ユーザーガイドの[「Deadline Cloud 送信者の設定](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/submitter.html)」の手順に従ってください。

1.  `git` を使用して [Deadline Cloud サンプル GitHub リポジトリ](https://github.com/aws-deadline/deadline-cloud-samples)のクローンを作成します。

   ```
   git clone https://github.com/aws-deadline/deadline-cloud-samples.git
    Cloning into 'deadline-cloud-samples'...
    ...
   cd deadline-cloud-samples/job_bundles
   ```

## パスサンプルを実行する
<a name="path-run-sample"></a>

1.  Deadline Cloud CLI を使用して`job_env_with_new_command`サンプルを送信します。

   ```
    $ deadline bundle submit job_env_with_new_command
    Submitting to Queue: MySampleQueue
    ...
   ```

1.  Deadline Cloud モニターに新しいジョブが表示され、進行状況をモニタリングできます。キューに関連付けられたLinuxフリートがジョブのタスクを実行できるワーカーを持つと、ジョブは数秒で完了します。タスクを選択し、タスクパネルの右上メニューで**ログの表示**オプションを選択します。

    右側には、**RandomSleepCommandの起動とタスク実行の 2 **つのセッションアクションがあります。 ****ウィンドウの中央にあるログビューワーは、右側の選択したセッションアクションに対応します。

## セッションアクションとその定義を比較する
<a name="path-view-logs"></a>

このセクションでは、Deadline Cloud モニターを使用して、セッションアクションをジョブテンプレートで定義されている場所と比較します。これは前のセクションから続きます。

テキストエディタで [job\$1env\$1with\$1new\$1command/template.yaml](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_env_with_new_command/template.yaml) ファイルを開きます。セッションアクションを、ジョブテンプレートで定義されている場所と比較します。

1.  Deadline Cloud モニターで **RandomSleepCommand **セッション起動アクションを選択します。ログ出力は次のように表示されます。

   ```
    2024/07/16 17:25:32-07:00
    2024/07/16 17:25:32-07:00 ==============================================
    2024/07/16 17:25:32-07:00 --------- Entering Environment: RandomSleepCommand
    2024/07/16 17:25:32-07:00 ==============================================
    2024/07/16 17:25:32-07:00 ----------------------------------------------
    2024/07/16 17:25:32-07:00 Phase: Setup
    2024/07/16 17:25:32-07:00 ----------------------------------------------
    2024/07/16 17:25:32-07:00 Writing embedded files for Environment to disk.
    2024/07/16 17:25:32-07:00 Mapping: Env.File.Enter -> /sessions/session-ab132a51b9b54d5da22cbe839dd946baaw1c8hk5/embedded_filesf3tq_1os/tmpbt8j_c3f
    2024/07/16 17:25:32-07:00 Mapping: Env.File.SleepScript -> /sessions/session-ab132a51b9b54d5da22cbe839dd946baaw1c8hk5/embedded_filesf3tq_1os/tmperastlp4
    2024/07/16 17:25:32-07:00 Wrote: Enter -> /sessions/session-ab132a51b9b54d5da22cbe839dd946baaw1c8hk5/embedded_filesf3tq_1os/tmpbt8j_c3f
    2024/07/16 17:25:32-07:00 Wrote: SleepScript -> /sessions/session-ab132a51b9b54d5da22cbe839dd946baaw1c8hk5/embedded_filesf3tq_1os/tmperastlp4
    2024/07/16 17:25:32-07:00 ----------------------------------------------
    2024/07/16 17:25:32-07:00 Phase: Running action
    2024/07/16 17:25:32-07:00 ----------------------------------------------
    2024/07/16 17:25:32-07:00 Running command sudo -u job-user -i setsid -w /sessions/session-ab132a51b9b54d5da22cbe839dd946baaw1c8hk5/tmpbwrquq5u.sh
    2024/07/16 17:25:32-07:00 Command started as pid: 2205
    2024/07/16 17:25:32-07:00 Output:
    2024/07/16 17:25:33-07:00 openjd_env: PATH=/sessions/session-ab132a51b9b54d5da22cbe839dd946baaw1c8hk5/bin:/opt/conda/condabin:/home/job-user/.local/bin:/home/job-user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/lib/snapd/snap/bin
    No newer logs at this moment.
   ```

    ジョブテンプレートの次の行で、このアクションが指定されました。

   ```
    jobEnvironments:
    - name: RandomSleepCommand
      description: Adds a command 'random-sleep' to the environment.
      script:
        actions:
          onEnter:
            command: bash
            args:
            - "{{Env.File.Enter}}"
        embeddedFiles:
        - name: Enter
          type: TEXT
          data: |
            #!/bin/env bash
            set -euo pipefail
   
            # Make a bin directory inside the session's working directory for providing new commands
            mkdir -p '{{Session.WorkingDirectory}}/bin'
   
            # If this bin directory is not already in the PATH, then add it
            if ! [[ ":$PATH:" == *':{{Session.WorkingDirectory}}/bin:'* ]]; then
              export "PATH={{Session.WorkingDirectory}}/bin:$PATH"
   
              # This message to Open Job Description exports the new PATH value to the environment
              echo "openjd_env: PATH=$PATH"
            fi
   
            # Copy the SleepScript embedded file into the bin directory
            cp '{{Env.File.SleepScript}}' '{{Session.WorkingDirectory}}/bin/random-sleep'
            chmod u+x '{{Session.WorkingDirectory}}/bin/random-sleep'
        - name: SleepScript
          type: TEXT
          runnable: true
          data: |
            ...
   ```

1.  Deadline Cloud モニターで ** StepEnv **セッション起動アクションを選択します。ログ出力は次のように表示されます。

   ```
    2024/07/16 17:25:33-07:00
    2024/07/16 17:25:33-07:00 ==============================================
    2024/07/16 17:25:33-07:00 --------- Running Task
    2024/07/16 17:25:33-07:00 ==============================================
    2024/07/16 17:25:33-07:00 ----------------------------------------------
    2024/07/16 17:25:33-07:00 Phase: Setup
    2024/07/16 17:25:33-07:00 ----------------------------------------------
    2024/07/16 17:25:33-07:00 Writing embedded files for Task to disk.
    2024/07/16 17:25:33-07:00 Mapping: Task.File.Run -> /sessions/session-ab132a51b9b54d5da22cbe839dd946baaw1c8hk5/embedded_filesf3tq_1os/tmpdrwuehjf
    2024/07/16 17:25:33-07:00 Wrote: Run -> /sessions/session-ab132a51b9b54d5da22cbe839dd946baaw1c8hk5/embedded_filesf3tq_1os/tmpdrwuehjf
    2024/07/16 17:25:33-07:00 ----------------------------------------------
    2024/07/16 17:25:33-07:00 Phase: Running action
    2024/07/16 17:25:33-07:00 ----------------------------------------------
    2024/07/16 17:25:33-07:00 Running command sudo -u job-user -i setsid -w /sessions/session-ab132a51b9b54d5da22cbe839dd946baaw1c8hk5/tmpz81iaqfw.sh
    2024/07/16 17:25:33-07:00 Command started as pid: 2256
    2024/07/16 17:25:33-07:00 Output:
    2024/07/16 17:25:34-07:00 + random-sleep 12.5 27.5
    2024/07/16 17:26:00-07:00 Sleeping for duration 26.90
    2024/07/16 17:26:00-07:00 ----------------------------------------------
    2024/07/16 17:26:00-07:00 Uploading output files to Job Attachments
    2024/07/16 17:26:00-07:00 ----------------------------------------------
   ```

1.  ジョブテンプレートの次の行で、このアクションが指定されました。

   ```
    steps:
    - name: EnvWithCommand
      script:
        actions:
          onRun:
            command: bash
            args:
            - '{{Task.File.Run}}'
        embeddedFiles:
        - name: Run
          type: TEXT
          data: |
            set -xeuo pipefail
   
            # Run the script installed into PATH by the job environment
            random-sleep 12.5 27.5
      hostRequirements:
        attributes:
        - name: attr.worker.os.family
          anyOf:
          - linux
   ```

# キュー環境からバックグラウンドデーモンプロセスを実行する
<a name="run-a-background-daemon-process"></a>

 レンダリングの多くのユースケースでは、アプリケーションとシーンデータのロードにかなりの時間がかかる場合があります。ジョブがフレームごとに再ロードすると、ほとんどの時間がオーバーヘッドに費やされます。多くの場合、バックグラウンドデーモンプロセスとしてアプリケーションを 1 回ロードし、シーンデータをロードしてから、プロセス間通信 (IPC) を介してコマンドを送信してレンダリングを実行することができます。

 オープンソースの Deadline Cloud 統合の多くは、このパターンを使用します。Open Job Description プロジェクトは、サポートされているすべてのオペレーティングシステムで堅牢な IPC パターンを備えた[アダプターランタイムライブラリ](https://github.com/OpenJobDescription/openjd-adaptor-runtime-for-python)を提供します。

 このパターンを示すために、Python と bash コードを使用してバックグラウンドデーモンと IPC を実装する[自己完結型のサンプルジョブバンドル](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_env_daemon_process/template.yaml)があります。デーモンは Python に実装され、タスクを処理するタイミングについて POSIX SIGUSR1 シグナルをリッスンします。タスクの詳細は、特定の JSON ファイルのデーモンに渡され、タスクの実行結果は別の JSON ファイルとして返されます。

## 前提条件
<a name="daemon-prerequisites"></a>

 Deadline Cloud [サンプル github リポジトリからデーモンプロセスを使用してサンプルジョブバンドル](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_env_daemon_process/template.yaml)を実行するには、次の手順を実行します。

1.  キューと関連する Linux フリートを持つ Deadline Cloud ファームがない場合は、[Deadline Cloud コンソール](https://console.aws.amazon.com/deadlinecloud/home)のガイド付きオンボーディングエクスペリエンスに従って、デフォルト設定で作成します。

1.  ワークステーションに Deadline Cloud CLI と Deadline Cloud モニターがない場合は、ユーザーガイドの[「Deadline Cloud 送信者の設定](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/submitter.html)」の手順に従ってください。

1.  `git` を使用して [Deadline Cloud サンプル GitHub リポジトリ](https://github.com/aws-deadline/deadline-cloud-samples)のクローンを作成します。

   ```
   git clone https://github.com/aws-deadline/deadline-cloud-samples.git
    Cloning into 'deadline-cloud-samples'...
    ...
   cd deadline-cloud-samples/job_bundles
   ```

## デーモンサンプルを実行する
<a name="daemon-run-sample"></a>

1.  Deadline Cloud CLI を使用して`job_env_daemon_process`サンプルを送信します。

   ```
    git clone https://github.com/aws-deadline/deadline-cloud-samples.git
   Cloning into 'deadline-cloud-samples'...
    ...
   cd deadline-cloud-samples/job_bundles
   ```

1.  Deadline Cloud Monitor アプリケーションでは、新しいジョブが表示され、進行状況をモニタリングできます。キューに関連付けられたLinuxフリートがジョブのタスクを実行できるワーカーを持つと、約 1 分で完了します。いずれかのタスクを選択し、タスクパネルの右上メニューで**ログの表示**オプションを選択します。

    右側には、**Launch DaemonProcess** と **Task run** の 2 つのセッションアクションがあります。ウィンドウの中央にあるログビューワーは、右側の選択したセッションアクションに対応します。

    オプション **すべてのタスクのログを表示する** を選択します。タイムラインには、セッションの一部として実行された残りのタスクと、環境を終了した`Shut down DaemonProcess`アクションが表示されます。

## デーモンログを表示する
<a name="daemon-view-logs"></a>

1. このセクションでは、Deadline Cloud モニターを使用して、セッションアクションをジョブテンプレートで定義されている場所と比較します。これは前のセクションから続きます。

    テキストエディタで [job\$1env\$1daemon\$1process/template.yaml](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_env_daemon_process/template.yaml) ファイルを開きます。セッションアクションを、ジョブテンプレートで定義されている場所と比較します。

1.  Deadline Cloud Monitor で`Launch DaemonProcess`セッションアクションを選択します。ログ出力は次のように表示されます。

   ```
    2024/07/17 16:27:20-07:00
    2024/07/17 16:27:20-07:00 ==============================================
    2024/07/17 16:27:20-07:00 --------- Entering Environment: DaemonProcess
    2024/07/17 16:27:20-07:00 ==============================================
    2024/07/17 16:27:20-07:00 ----------------------------------------------
    2024/07/17 16:27:20-07:00 Phase: Setup
    2024/07/17 16:27:20-07:00 ----------------------------------------------
    2024/07/17 16:27:20-07:00 Writing embedded files for Environment to disk.
    2024/07/17 16:27:20-07:00 Mapping: Env.File.Enter -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/enter-daemon-process-env.sh
    2024/07/17 16:27:20-07:00 Mapping: Env.File.Exit -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/exit-daemon-process-env.sh
    2024/07/17 16:27:20-07:00 Mapping: Env.File.DaemonScript -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-script.py
    2024/07/17 16:27:20-07:00 Mapping: Env.File.DaemonHelperFunctions -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-helper-functions.sh
    2024/07/17 16:27:20-07:00 Wrote: Enter -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/enter-daemon-process-env.sh
    2024/07/17 16:27:20-07:00 Wrote: Exit -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/exit-daemon-process-env.sh
    2024/07/17 16:27:20-07:00 Wrote: DaemonScript -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-script.py
    2024/07/17 16:27:20-07:00 Wrote: DaemonHelperFunctions -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-helper-functions.sh
    2024/07/17 16:27:20-07:00 ----------------------------------------------
    2024/07/17 16:27:20-07:00 Phase: Running action
    2024/07/17 16:27:20-07:00 ----------------------------------------------
    2024/07/17 16:27:20-07:00 Running command sudo -u job-user -i setsid -w /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/tmp_u8slys3.sh
    2024/07/17 16:27:20-07:00 Command started as pid: 2187
    2024/07/17 16:27:20-07:00 Output:
    2024/07/17 16:27:21-07:00 openjd_env: DAEMON_LOG=/sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/daemon.log
    2024/07/17 16:27:21-07:00 openjd_env: DAEMON_PID=2223
    2024/07/17 16:27:21-07:00 openjd_env: DAEMON_BASH_HELPER_SCRIPT=/sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-helper-functions.sh
   ```

    ジョブテンプレートの次の行で、このアクションが指定されました。

   ```
      stepEnvironments:
      - name: DaemonProcess
        description: Runs a daemon process for the step's tasks to share.
        script:
          actions:
            onEnter:
              command: bash
              args:
              - "{{Env.File.Enter}}"
            onExit:
              command: bash
              args:
              - "{{Env.File.Exit}}"
          embeddedFiles:
          - name: Enter
            filename: enter-daemon-process-env.sh
            type: TEXT
            data: |
              #!/bin/env bash
              set -euo pipefail
   
              DAEMON_LOG='{{Session.WorkingDirectory}}/daemon.log'
              echo "openjd_env: DAEMON_LOG=$DAEMON_LOG"
              nohup python {{Env.File.DaemonScript}} > $DAEMON_LOG 2>&1 &
              echo "openjd_env: DAEMON_PID=$!"
              echo "openjd_env: DAEMON_BASH_HELPER_SCRIPT={{Env.File.DaemonHelperFunctions}}"
   
              echo 0 > 'daemon_log_cursor.txt'
        ...
   ```

1.  Deadline Cloud Monitor でタスク実行: N セッションアクションのいずれかを選択します。ログ出力は次のように表示されます。

   ```
   2024/07/17 16:27:22-07:00
    2024/07/17 16:27:22-07:00 ==============================================
    2024/07/17 16:27:22-07:00 --------- Running Task
    2024/07/17 16:27:22-07:00 ==============================================
    2024/07/17 16:27:22-07:00 Parameter values:
    2024/07/17 16:27:22-07:00 Frame(INT) = 2
    2024/07/17 16:27:22-07:00 ----------------------------------------------
    2024/07/17 16:27:22-07:00 Phase: Setup
    2024/07/17 16:27:22-07:00 ----------------------------------------------
    2024/07/17 16:27:22-07:00 Writing embedded files for Task to disk.
    2024/07/17 16:27:22-07:00 Mapping: Task.File.Run -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/run-task.sh
    2024/07/17 16:27:22-07:00 Wrote: Run -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/run-task.sh
    2024/07/17 16:27:22-07:00 ----------------------------------------------
    2024/07/17 16:27:22-07:00 Phase: Running action
    2024/07/17 16:27:22-07:00 ----------------------------------------------
    2024/07/17 16:27:22-07:00 Running command sudo -u job-user -i setsid -w /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/tmpv4obfkhn.sh
    2024/07/17 16:27:22-07:00 Command started as pid: 2301
    2024/07/17 16:27:22-07:00 Output:
    2024/07/17 16:27:23-07:00 Daemon PID is 2223
    2024/07/17 16:27:23-07:00 Daemon log file is /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/daemon.log
    2024/07/17 16:27:23-07:00
    2024/07/17 16:27:23-07:00 === Previous output from daemon
    2024/07/17 16:27:23-07:00 ===
    2024/07/17 16:27:23-07:00
    2024/07/17 16:27:23-07:00 Sending command to daemon
    2024/07/17 16:27:23-07:00 Received task result:
    2024/07/17 16:27:23-07:00 {
    2024/07/17 16:27:23-07:00   "result": "SUCCESS",
    2024/07/17 16:27:23-07:00   "processedTaskCount": 1,
    2024/07/17 16:27:23-07:00   "randomValue": 0.2578537967668988,
    2024/07/17 16:27:23-07:00   "failureRate": 0.1
    2024/07/17 16:27:23-07:00 }
    2024/07/17 16:27:23-07:00
    2024/07/17 16:27:23-07:00 === Daemon log from running the task
    2024/07/17 16:27:23-07:00 Loading the task details file
    2024/07/17 16:27:23-07:00 Received task details:
    2024/07/17 16:27:23-07:00 {
    2024/07/17 16:27:23-07:00  "pid": 2329,
    2024/07/17 16:27:23-07:00  "frame": 2
    2024/07/17 16:27:23-07:00 }
    2024/07/17 16:27:23-07:00 Processing frame number 2
    2024/07/17 16:27:23-07:00 Writing result
    2024/07/17 16:27:23-07:00 Waiting until a USR1 signal is sent...
    2024/07/17 16:27:23-07:00 ===
    2024/07/17 16:27:23-07:00
    2024/07/17 16:27:23-07:00 ----------------------------------------------
    2024/07/17 16:27:23-07:00 Uploading output files to Job Attachments
    2024/07/17 16:27:23-07:00 ----------------------------------------------
   ```

    ジョブテンプレートの次の行は、このアクションを指定したものです。「」ステップ: 

   ```
    steps:
    - name: EnvWithDaemonProcess
      parameterSpace:
        taskParameterDefinitions:
        - name: Frame
          type: INT
          range: "{{Param.Frames}}"
   
      stepEnvironments:
        ...
   
      script:
        actions:
          onRun:
            timeout: 60
            command: bash
            args:
            - '{{Task.File.Run}}'
        embeddedFiles:
        - name: Run
          filename: run-task.sh
          type: TEXT
          data: |
            # This bash script sends a task to the background daemon process,
            # then waits for it to respond with the output result.
   
            set -euo pipefail
   
            source "$DAEMON_BASH_HELPER_SCRIPT"
   
            echo "Daemon PID is $DAEMON_PID"
            echo "Daemon log file is $DAEMON_LOG"
   
            print_daemon_log "Previous output from daemon"
   
            send_task_to_daemon "{\"pid\": $$, \"frame\": {{Task.Param.Frame}} }"
            wait_for_daemon_task_result
   
            echo Received task result:
            echo "$TASK_RESULT" | jq .
   
            print_daemon_log "Daemon log from running the task"
   
      hostRequirements:
        attributes:
        - name: attr.worker.os.family
          anyOf:
          - linux
   ```

# ジョブにアプリケーションを提供する
<a name="provide-applications"></a>

キュー環境を使用して、ジョブを処理するアプリケーションをロードできます。Deadline Cloud コンソールを使用してサービスマネージドフリートを作成する場合、conda パッケージマネージャーを使用してアプリケーションをロードするキュー環境を作成するオプションがあります。

別のパッケージマネージャーを使用する場合は、そのマネージャーのキュー環境を作成できます。Rez の使用例については、「」を参照してください[別のパッケージマネージャーを使用する](#provide-applications-other-package)。

Deadline Cloud は、選択したレンダリングアプリケーションを環境にロードするための conda チャネルを提供します。Deadline Cloud がデジタルコンテンツ作成アプリケーションに提供する送信者をサポートします。

ジョブで使用する conda-forge 用のソフトウェアをロードすることもできます。次の例は、Deadline Cloud が提供するキュー環境を使用してジョブを実行する前にアプリケーションをロードするジョブテンプレートを示しています。

**Topics**
+ [conda チャネルからアプリケーションを取得する](#provide-applications-get-application)
+ [別のパッケージマネージャーを使用する](#provide-applications-other-package)

## conda チャネルからアプリケーションを取得する
<a name="provide-applications-get-application"></a>

選択したソフトウェアをインストールする Deadline Cloud ワーカーのカスタムキュー環境を作成できます。このサンプルキュー環境の動作は、 コンソールでサービスマネージドフリートに使用される環境と同じです。conda を直接実行して環境を作成します。

環境は、ワーカーで実行される Deadline Cloud セッションごとに新しい conda 仮想環境を作成し、完了すると環境を削除します。

Conda はダウンロードしたパッケージをキャッシュするため、再度ダウンロードする必要はありませんが、各セッションではすべてのパッケージを環境にリンクする必要があります。

環境は、Deadline Cloud がワーカーでセッションを開始するときに実行される 3 つのスクリプトを定義します。最初のスクリプトは、`onEnter`アクションが呼び出されたときに実行されます。他の 2 つの を呼び出して環境変数を設定します。スクリプトの実行が完了すると、指定されたすべての環境変数が設定された conda 環境を使用できます。

この例の最新バージョンについては、GitHub の [deadline-cloud-samples](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline) リポジトリの [conda\$1queue\$1env\$1console\$1equivalent.yaml](https://github.com/aws-deadline/deadline-cloud-samples/blob/mainline/queue_environments/conda_queue_env_console_equivalent.yaml) を参照してください。

conda チャネルで利用できないアプリケーションを使用する場合は、Amazon S3 で conda チャネルを作成し、そのアプリケーション用に独自のパッケージを構築できます。詳細については、「[S3 を使用して conda チャネルを作成する](configure-jobs-s3-channel.md)」を参照してください。

### conda-forge からオープンソースライブラリを取得する
<a name="get-application-csv-example"></a>

このセクションでは、`conda-forge`チャネルからオープンソースライブラリを使用する方法について説明します。次の例は、Python `polars` パッケージを使用するジョブテンプレートです。

ジョブは、パッケージを取得する場所を Deadline Cloud に指示するキュー環境で定義された `CondaPackages`および `CondaChannels`パラメータを設定します。

パラメータを設定するジョブテンプレートの セクションは次のとおりです。

```
- name: CondaPackages
  description: A list of conda packages to install. The job expects a Queue Environment to handle this.
  type: STRING
  default: polars
- name: CondaChannels
  description: A list of conda channels to get packages from. The job expects a Queue Environment to handle this.
  type: STRING
  default: conda-forge
```

完全なサンプルジョブテンプレートの最新バージョンについては、[「stage\$11\$1self\$1contained\$1template/template.yaml](https://github.com/aws-deadline/deadline-cloud-samples/blob/mainline/job_bundles/job_dev_progression/stage_1_self_contained_template/template.yaml)」を参照してください。conda パッケージをロードするキュー環境の最新バージョンについては、GitHub の [deadline-cloud-samples](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline) リポジトリの [conda\$1queue\$1env\$1console\$1equivalent.yaml](https://github.com/aws-deadline/deadline-cloud-samples/blob/mainline/queue_environments/conda_queue_env_console_equivalent.yaml) を参照してください。

### 期限クラウドチャネルBlenderから取得する
<a name="get-application-blender"></a>

次の例は、`deadline-cloud`conda チャネルBlenderから取得するジョブテンプレートを示しています。このチャネルは、Deadline Cloud がデジタルコンテンツ作成ソフトウェアに提供する送信者をサポートしますが、同じチャネルを使用して独自の使用のためにソフトウェアをロードできます。

`deadline-cloud` チャネルによって提供されるソフトウェアのリストについては、*AWS 「Deadline Cloud ユーザーガイド*」の[「デフォルトのキュー環境](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/create-queue-environment.html#conda-queue-environment)」を参照してください。

このジョブは、キュー環境で定義された `CondaPackages`パラメータを設定して、環境にロードするように Deadline Cloud Blenderに指示します。

パラメータを設定するジョブテンプレートの セクションは次のとおりです。

```
- name: CondaPackages
  type: STRING
  userInterface:
    control: LINE_EDIT
    label: Conda Packages
    groupLabel: Software Environment
  default: blender
  description: >
    Tells the queue environment to install Blender from the deadline-cloud conda channel.
```

ジョブテンプレートの完全な例の最新バージョンについては、[「Blender\$1render/template.yaml](https://github.com/aws-deadline/deadline-cloud-samples/blob/mainline/job_bundles/blender_render/template.yaml)」を参照してください。conda パッケージをロードするキュー環境の最新バージョンについては、 の [deadline-cloud-samples](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline) リポジトリの [conda\$1queue\$1env\$1console\$1equivalent.yaml](https://github.com/aws-deadline/deadline-cloud-samples/blob/mainline/queue_environments/conda_queue_env_console_equivalent.yaml) を参照してくださいGitHub。

## 別のパッケージマネージャーを使用する
<a name="provide-applications-other-package"></a>

Deadline Cloud のデフォルトのパッケージマネージャーは conda です。などの別のパッケージマネージャーを使用する必要がある場合はRez、代わりにパッケージマネージャーを使用するスクリプトを含むカスタムキュー環境を作成できます。

このサンプルキュー環境は、 コンソールでサービスマネージドフリートに使用される環境と同じ動作を提供します。conda パッケージマネージャーを に置き換えますRez。

環境は、Deadline Cloud がワーカーでセッションを開始するときに実行される 3 つのスクリプトを定義します。最初のスクリプトは、`onEnter`アクションが呼び出されたときに実行されます。他の 2 つの を呼び出して環境変数を設定します。スクリプトの実行が完了すると、Rez環境は指定されたすべての環境変数セットで使用できます。

この例では、Rez パッケージに共有ファイルシステムを使用するカスタマーマネージドフリートがあることを前提としています。

この例の最新バージョンについては、 の [deadline-cloud-samples](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline) リポジトリの [rez\$1queue\$1env.yaml](https://github.com/aws-deadline/deadline-cloud-samples/blob/mainline/queue_environments/rez_queue_env.yaml) を参照してくださいGitHub。