

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

# ジョブアタッチメントを使用してファイルを共有する
<a name="build-job-attachments"></a>

*ジョブアタッチメント*を使用して、共有ディレクトリにないファイルをジョブで使用できるようにし、共有ディレクトリに書き込まれていない場合は出力ファイルをキャプチャします。ジョブアタッチメントはAmazon S3 を使用してホスト間でファイルをバッファリングします。ファイルは S3 バケットに保存され、コンテンツが変更されていない場合はファイルをアップロードする必要はありません。

ホストはファイルシステムの場所を共有しないため、[サービスマネージドフリート](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/smf-manage.html)でジョブを実行するときはジョブアタッチメントを使用する必要があります。ジョブアタッチメントは、ジョブバンドルにシェルや Python スクリプトが含まれている場合など、共有ネットワークファイルシステムに保存されている[ジョブ](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/submit-job-bundle.html)の入力ファイルまたは出力ファイルの場合にも、[カスタマーマネージドフリー](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/manage-cmf.html)トで役立ちます。

 [Deadline Cloud CLI](https://pypi.org/project/deadline/) または Deadline Cloud 送信者のいずれかを使用してジョブバンドルを送信すると、ジョブアタッチメントはジョブのストレージプロファイルとキューの必要なファイルシステムの場所を使用して、ワーカーホストになく、ジョブ送信の一部として Amazon S3 にアップロードする必要がある入力ファイルを識別します。これらのストレージプロファイルは、Deadline Cloud がワークステーションで使用できるように Amazon S3 にアップロードする必要があるワーカーホストロケーション内の出力ファイルを識別するのにも役立ちます。

 ジョブアタッチメントの例では、 および のファーム、フリート、キュー、ストレージプロファイル設定を使用します[サンプルプロジェクトインフラストラクチャ](sample-project-infrastructure.md)[ストレージプロファイルとパスマッピング](storage-profiles-and-path-mapping.md)。この前に、これらのセクションを確認してください。

次の例では、サンプルジョブバンドルを開始点として使用し、ジョブアタッチメントの機能を調べるために変更します。ジョブバンドルは、ジョブがジョブアタッチメントを使用するのに最適な方法です。ディレクトリ内の [Open Job Description](https://github.com/OpenJobDescription/openjd-specifications/wiki) ジョブテンプレートと、ジョブバンドルを使用するジョブに必要なファイルとディレクトリを一覧表示する追加ファイルを組み合わせます。ジョブバンドルの詳細については、「」を参照してください[Deadline Cloud の Open Job Description (OpenJD) テンプレート](build-job-bundle.md)。

# ジョブを使用したファイルの送信
<a name="submitting-files-with-a-job"></a>

Deadline Cloud を使用すると、ジョブワークフローを有効にして、ワーカーホストの共有ファイルシステムロケーションで使用できない入力ファイルにアクセスできます。ジョブアタッチメントを使用すると、レンダリングジョブはローカルワークステーションドライブまたはサービスマネージドフリート環境にのみ存在するファイルにアクセスできます。ジョブバンドルを送信するときに、ジョブに必要な入力ファイルとディレクトリのリストを含めることができます。Deadline Cloud は、これらの共有されていないファイルを識別し、ローカルマシンから Amazon S3 にアップロードして、ワーカーホストにダウンロードします。これにより、入力アセットをレンダリングノードに転送するプロセスが合理化され、分散ジョブの実行に必要なすべてのファイルにアクセスできるようになります。

ジョブバンドルでジョブのファイルを直接指定し、環境変数またはスクリプトを使用して指定したジョブテンプレートでパラメータを使用し、ジョブの `assets_references` ファイルを使用できます。これらの方法のいずれか、または 3 つすべての組み合わせを使用できます。ローカルワークステーションで変更されたファイルのみをアップロードするように、ジョブのバンドルのストレージプロファイルを指定できます。

このセクションでは、GitHub のジョブバンドルの例を使用して、Deadline Cloud がアップロードするジョブ内のファイルを識別する方法、それらのファイルを Amazon S3 で整理する方法、およびジョブを処理するワーカーホストがそれらのファイルを使用可能にする方法を示します。

**Topics**
+ [Deadline Cloud が Amazon S3 にファイルをアップロードする方法](what-job-attachments-uploads-to-amazon-s3.md)
+ [Deadline Cloud がアップロードするファイルを選択する方法](how-job-attachments-decides-what-to-upload-to-amazon-s3.md)
+ [ジョブがジョブアタッチメント入力ファイルを検索する方法](how-jobs-find-job-attachments-input-files.md)

# Deadline Cloud が Amazon S3 にファイルをアップロードする方法
<a name="what-job-attachments-uploads-to-amazon-s3"></a>

この例では、Deadline Cloud がワークステーションまたはワーカーホストから Amazon S3 にファイルをアップロードして共有できるようにする方法を示します。GitHub と Deadline Cloud CLI のサンプルジョブバンドルを使用してジョブを送信します。

 まず、[Deadline Cloud サンプル GitHub リポジトリ](https://github.com/aws-deadline/deadline-cloud-samples)を[AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)環境にクローンし、`job_attachments_devguide`ジョブバンドルをホームディレクトリにコピーします。

```
git clone https://github.com/aws-deadline/deadline-cloud-samples.git
cp -r deadline-cloud-samples/job_bundles/job_attachments_devguide ~/
```

 [Deadline Cloud CLI ](https://pypi.org/project/deadline/)をインストールしてジョブバンドルを送信します。

```
pip install deadline --upgrade
```

 `job_attachments_devguide` ジョブバンドルには、ファイルシステムの場所がジョブパラメータとして渡される bash シェルスクリプトを実行するタスクを含む 1 つのステップがあります。ジョブパラメータの定義は次のとおりです。

```
...
- name: ScriptFile
  type: PATH
  default: script.sh
  dataFlow: IN
  objectType: FILE
...
```

 `dataFlow` プロパティの`IN`値は、 `ScriptFile`パラメータの値がジョブへの入力であることをジョブアタッチメントに伝えます。`default` プロパティの値は、ジョブバンドルの ディレクトリに対する相対的な場所ですが、絶対パスにすることもできます。このパラメータ定義は、ジョブバンドルの ディレクトリにある `script.sh` ファイルを、ジョブの実行に必要な入力ファイルとして宣言します。

 次に、Deadline Cloud CLI にストレージプロファイルが設定されていないことを確認し、ジョブをキューに送信します`Q1`。

```
# Change the value of FARM_ID to your farm's identifier
FARM_ID=farm-00112233445566778899aabbccddeeff
# Change the value of QUEUE1_ID to queue Q1's identifier
QUEUE1_ID=queue-00112233445566778899aabbccddeeff

deadline config set settings.storage_profile_id ''

deadline bundle submit --farm-id $FARM_ID --queue-id $QUEUE1_ID job_attachments_devguide/
```

 このコマンドの実行後の Deadline Cloud CLI からの出力は次のようになります。

```
Submitting to Queue: Q1
...
Hashing Attachments  [####################################]  100%
Hashing Summary:
    Processed 1 file totaling 39.0 B.
    Skipped re-processing 0 files totaling 0.0 B.
    Total processing time of 0.0327 seconds at 1.19 KB/s.

Uploading Attachments  [####################################]  100%
Upload Summary:
    Processed 1 file totaling 39.0 B.
    Skipped re-processing 0 files totaling 0.0 B.
    Total processing time of 0.25639 seconds at 152.0 B/s.

Waiting for Job to be created...
Submitted job bundle:
   job_attachments_devguide/
Job creation completed successfully
job-74148c13342e4514b63c7a7518657005
```

ジョブを送信すると、Deadline Cloud はまず`script.sh`ファイルをハッシュし、Amazon S3 にアップロードします。

Deadline Cloud は、S3 バケットをコンテンツアドレス可能なストレージとして扱います。ファイルは S3 オブジェクトにアップロードされます。オブジェクト名は、ファイルの内容のハッシュから派生します。2 つのファイルに同じコンテンツがある場合、ファイルの場所や名前に関係なく、ハッシュ値は同じです。このコンテンツアドレス可能なストレージにより、Deadline Cloud はファイルがすでに利用可能な場合、ファイルのアップロードを回避できます。

 [AWS CLI ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)を使用して、Amazon S3 にアップロードされたオブジェクトを表示できます。

```
# The name of queue `Q1`'s job attachments S3 bucket
Q1_S3_BUCKET=$(
  aws deadline get-queue --farm-id $FARM_ID --queue-id $QUEUE1_ID \
    --query 'jobAttachmentSettings.s3BucketName' | tr -d '"'
)

aws s3 ls s3://$Q1_S3_BUCKET --recursive
```

 2 つのオブジェクトが S3 にアップロードされました。
+  `DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128` – の内容`script.sh`。オブジェクトキー`87cb19095dd5d78fcaf56384ef0e6241`の値はファイルの内容のハッシュであり、拡張子はハッシュ値が 128 ビット [xx ハッシュ](https://xxhash.com/)として計算された`xxh128`ことを示します。
+  `DeadlineCloud/Manifests/<farm-id>/<queue-id>/Inputs/<guid>/a1d221c7fd97b08175b3872a37428e8c_input` – ジョブ送信のマニフェストオブジェクト。値 `<farm-id>`、`<queue-id>`、 `<guid>`はファーム識別子、キュー識別子、ランダムな 16 進値です。この例`a1d221c7fd97b08175b3872a37428e8c`の値は、 が配置されているディレクトリである文字列 から計算`/home/cloudshell-user/job_attachments_devguide`されたハッシュ値`script.sh`です。

 マニフェストオブジェクトには、ジョブの送信の一部として S3 にアップロードされた特定のルートパスの入力ファイルに関する情報が含まれます。このマニフェストファイル () をダウンロードします`aws s3 cp s3://$Q1_S3_BUCKET/<objectname>`。その内容は次のようになります。

```
{
    "hashAlg": "xxh128",
    "manifestVersion": "2023-03-03",
    "paths": [
        {
            "hash": "87cb19095dd5d78fcaf56384ef0e6241",
            "mtime": 1721147454416085,
            "path": "script.sh",
            "size": 39
        }
    ],
    "totalSize": 39
}
```

これは、ファイルが`script.sh`アップロードされ、そのファイルの内容のハッシュが であることを示します`87cb19095dd5d78fcaf56384ef0e6241`。このハッシュ値は、オブジェクト名 の値と一致します`DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128`。Deadline Cloud は、このファイルの内容に対してどのオブジェクトをダウンロードするかを知るために使用されます。

 このファイルの完全なスキーマは [ GitHub で入手できます](https://github.com/aws-deadline/deadline-cloud/blob/mainline/src/deadline/job_attachments/asset_manifests/v2023_03_03/validate.py)。

[CreateJob オペレーション](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_CreateJob.html)を使用すると、マニフェストオブジェクトの場所を設定できます。[GetJob オペレーション](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html)を使用して、場所を確認できます。

```
{
    "attachments": {
        "file system": "COPIED",
        "manifests": [
            {
                "inputManifestHash": "5b0db3d311805ea8de7787b64cbbe8b3",
                "inputManifestPath": "<farm-id>/<queue-id>/Inputs/<guid>/a1d221c7fd97b08175b3872a37428e8c_input",
                "rootPath": "/home/cloudshell-user/job_attachments_devguide",
                "rootPathFormat": "posix"
            }
        ]
    },
    ...
}
```

# Deadline Cloud がアップロードするファイルを選択する方法
<a name="how-job-attachments-decides-what-to-upload-to-amazon-s3"></a>

 ジョブアタッチメントが Amazon S3 へのアップロードをジョブへの入力と見なすファイルとディレクトリは次のとおりです。
+  `IN` または の値を持つジョブバンドルのジョブテンプレートで定義されたすべての `PATH`タイプのジョブパラメータ`dataFlow`の値`INOUT`。
+  ジョブバンドルのアセットリファレンスファイルの入力としてリストされているファイルとディレクトリ。

 ストレージプロファイルのないジョブを送信すると、アップロードの対象となるすべてのファイルがアップロードされます。ストレージプロファイルを使用してジョブを送信する場合、ファイルは、キューに必要なファイルシステムの場所であるストレージプロファイルの `SHARED`タイプのファイルシステムの場所にある場合、Amazon S3 にアップロードされません。これらの場所は、ジョブを実行するワーカーホストで使用できることが予想されるため、S3 にアップロードする必要はありません。

 この例では、AWS CloudShell 環境で `WSAll`に`SHARED`ファイルシステムの場所を作成し、それらのファイルシステムの場所にファイルを追加します。以下のコマンドを使用します。

```
# Change the value of WSALL_ID to the identifier of the WSAll storage profile
WSALL_ID=sp-00112233445566778899aabbccddeeff

sudo mkdir -p /shared/common /shared/projects/project1 /shared/projects/project2
sudo chown -R cloudshell-user:cloudshell-user /shared

for d in /shared/common /shared/projects/project1 /shared/projects/project2; do
  echo "File contents for $d" > ${d}/file.txt
done
```

 次に、ジョブの入力として作成したすべてのファイルを含むアセット参照ファイルをジョブバンドルに追加します。以下のコマンドを使用します。

```
cat > ${HOME}/job_attachments_devguide/asset_references.yaml << EOF
assetReferences:
  inputs:
    filenames:
    - /shared/common/file.txt
    directories:
    - /shared/projects/project1
    - /shared/projects/project2
EOF
```

 次に、`WSAll`ストレージプロファイルを使用してジョブを送信するように Deadline Cloud CLI を設定し、ジョブバンドルを送信します。

```
# Change the value of FARM_ID to your farm's identifier
FARM_ID=farm-00112233445566778899aabbccddeeff
# Change the value of QUEUE1_ID to queue Q1's identifier
QUEUE1_ID=queue-00112233445566778899aabbccddeeff
# Change the value of WSALL_ID to the identifier of the WSAll storage profile
WSALL_ID=sp-00112233445566778899aabbccddeeff

deadline config set settings.storage_profile_id $WSALL_ID

deadline bundle submit --farm-id $FARM_ID --queue-id $QUEUE1_ID job_attachments_devguide/
```

Deadline Cloud は、ジョブを送信するときに 2 つのファイルを Amazon S3 にアップロードします。ジョブのマニフェストオブジェクトを S3 からダウンロードして、アップロードされたファイルを表示できます。

```
for manifest in $( \
  aws deadline get-job --farm-id $FARM_ID --queue-id $QUEUE1_ID --job-id $JOB_ID \
    --query 'attachments.manifests[].inputManifestPath' \
    | jq -r '.[]'
); do
  echo "Manifest object: $manifest"
  aws s3 cp --quiet s3://$Q1_S3_BUCKET/DeadlineCloud/Manifests/$manifest /dev/stdout | jq .
done
```

 この例では、次の内容のマニフェストファイルが 1 つあります。

```
{
    "hashAlg": "xxh128",
    "manifestVersion": "2023-03-03",
    "paths": [
        {
            "hash": "87cb19095dd5d78fcaf56384ef0e6241",
            "mtime": 1721147454416085,
            "path": "home/cloudshell-user/job_attachments_devguide/script.sh",
            "size": 39
        },
        {
            "hash": "af5a605a3a4e86ce7be7ac5237b51b79",
            "mtime": 1721163773582362,
            "path": "shared/projects/project2/file.txt",
            "size": 44
        }
    ],
    "totalSize": 83
}
```

 マニフェストの [GetJob オペレーション](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html)を使用して、 `rootPath`が「/」であることを確認します。

```
aws deadline get-job --farm-id $FARM_ID --queue-id $QUEUE1_ID --job-id $JOB_ID --query 'attachments.manifests[*]'
```

 入力ファイルのセットのルートパスは、常にそれらのファイルの最長の共通サブパスです。Windows ジョブが から送信され、異なるドライブにあったために共通のサブパスを持たない入力ファイルがある場合、各ドライブに個別のルートパスが表示されます。マニフェスト内のパスは常にマニフェストのルートパスを基準にしているため、アップロードされた入力ファイルは次のとおりです。
+  `/home/cloudshell-user/job_attachments_devguide/script.sh` – ジョブバンドル内のスクリプトファイル。
+  `/shared/projects/project2/file.txt` – キュー に必要な`SHARED`ファイルシステムの場所のリストに含まれ**ていない**`WSAll`ストレージプロファイル内のファイルシステムの場所にあるファイル`Q1`。

ファイルシステムの場所 `FSCommon` (`/shared/common/file.txt`) と `FS1` (`/shared/projects/project1/file.txt`) のファイルはリストにありません。これは、これらのファイルシステムの場所が`WSAll`ストレージプロファイル`SHARED`にあり、どちらもキュー の必要なファイルシステムの場所のリストにあるためです`Q1`。

[GetStorageProfileForQueue オペレーション](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetStorageProfileForQueue.html)を使用して、特定のストレージプロファイルで送信されたジョブ`SHARED`について考慮されたファイルシステムの場所を確認できます。キューのストレージプロファイル`WSAll`をクエリするには、次のコマンド`Q1`を使用します。

```
aws deadline get-storage-profile --farm-id $FARM_ID --storage-profile-id $WSALL_ID

aws deadline get-storage-profile-for-queue --farm-id $FARM_ID --queue-id $QUEUE1_ID --storage-profile-id $WSALL_ID
```

# ジョブがジョブアタッチメント入力ファイルを検索する方法
<a name="how-jobs-find-job-attachments-input-files"></a>

 ジョブアタッチメントを使用して Deadline Cloud が Amazon S3 にアップロードするファイルを使用するジョブには、ワーカーホストのファイルシステムを通じて利用可能なファイルが必要です。ジョブの[セッション](https://github.com/OpenJobDescription/openjd-specifications/wiki/How-Jobs-Are-Run#sessions)がワーカーホストで実行されると、Deadline Cloud はジョブの入力ファイルをワーカーホストのローカルドライブの一時ディレクトリにダウンロードし、ジョブの各ルートパスのパスマッピングルールをローカルドライブのファイルシステムの場所に追加します。

 この例では、AWS CloudShell タブで Deadline Cloud ワーカーエージェントを起動します。以前に送信したジョブの実行を終了し、ログディレクトリからジョブログを削除します。

```
rm -rf ~/devdemo-logs/queue-*
```

 次のスクリプトは、セッションの一時作業ディレクトリ内のすべてのファイルとパスマッピングルールファイルの内容を表示するようにジョブバンドルを変更し、変更されたバンドルでジョブを送信します。

```
# Change the value of FARM_ID to your farm's identifier
FARM_ID=farm-00112233445566778899aabbccddeeff
# Change the value of QUEUE1_ID to queue Q1's identifier
QUEUE1_ID=queue-00112233445566778899aabbccddeeff
# Change the value of WSALL_ID to the identifier of the WSAll storage profile
WSALL_ID=sp-00112233445566778899aabbccddeeff

deadline config set settings.storage_profile_id $WSALL_ID

cat > ~/job_attachments_devguide/script.sh << EOF
#!/bin/bash

echo "Session working directory is: \$(pwd)"
echo
echo "Contents:"
find . -type f
echo
echo "Path mapping rules file: \$1"
jq . \$1
EOF

cat > ~/job_attachments_devguide/template.yaml << EOF
specificationVersion: jobtemplate-2023-09
name: "Job Attachments Explorer"
parameterDefinitions:
- name: ScriptFile
  type: PATH
  default: script.sh
  dataFlow: IN
  objectType: FILE
steps:
- name: Step
  script:
    actions:
      onRun:
        command: /bin/bash
        args:
        - "{{Param.ScriptFile}}"
        - "{{Session.PathMappingRulesFile}}"
EOF

deadline bundle submit --farm-id $FARM_ID --queue-id $QUEUE1_ID job_attachments_devguide/
```

 AWS CloudShell 環境内のワーカーによって実行されたジョブの実行のログを確認できます。

```
cat demoenv-logs/queue-*/session*.log
```

ログは、セッションで最初に発生するのは、ジョブの 2 つの入力ファイルがワーカーにダウンロードされることを示しています。

```
2024-07-17 01:26:37,824 INFO ==============================================
2024-07-17 01:26:37,825 INFO --------- Job Attachments Download for Job
2024-07-17 01:26:37,825 INFO ==============================================
2024-07-17 01:26:37,825 INFO Syncing inputs using Job Attachments
2024-07-17 01:26:38,116 INFO Downloaded 142.0 B / 186.0 B of 2 files (Transfer rate: 0.0 B/s)
2024-07-17 01:26:38,174 INFO Downloaded 186.0 B / 186.0 B of 2 files (Transfer rate: 733.0 B/s)
2024-07-17 01:26:38,176 INFO Summary Statistics for file downloads:
Processed 2 files totaling 186.0 B.
Skipped re-processing 0 files totaling 0.0 B.
Total processing time of 0.09752 seconds at 1.91 KB/s.
```

 次に、ジョブによって`script.sh`実行された からの出力を示します。
+  ジョブの送信時にアップロードされた入力ファイルは、名前がセッションの一時ディレクトリの「assetroot」で始まるディレクトリにあります。
+  入力ファイルのパスは、ジョブの入力マニフェスト () のルートパスではなく、「アサルート」ディレクトリに対して再配置されました`"/"`。
+  パスマッピングルールファイルには、「assetroot」ディレクトリの絶対パス`"/"`に再マッピングする追加のルールが含まれています。

 例えば、次のようになります。

```
2024-07-17 01:26:38,264 INFO Output:
2024-07-17 01:26:38,267 INFO Session working directory is: /sessions/session-5b33f
2024-07-17 01:26:38,267 INFO 
2024-07-17 01:26:38,267 INFO Contents:
2024-07-17 01:26:38,269 INFO ./tmp_xdhbsdo.sh
2024-07-17 01:26:38,269 INFO ./tmpdi00052b.json
2024-07-17 01:26:38,269 INFO ./assetroot-assetroot-3751a/shared/projects/project2/file.txt
2024-07-17 01:26:38,269 INFO ./assetroot-assetroot-3751a/home/cloudshell-user/job_attachments_devguide/script.sh
2024-07-17 01:26:38,269 INFO 
2024-07-17 01:26:38,270 INFO Path mapping rules file: /sessions/session-5b33f/tmpdi00052b.json
2024-07-17 01:26:38,282 INFO {
2024-07-17 01:26:38,282 INFO   "version": "pathmapping-1.0",
2024-07-17 01:26:38,282 INFO   "path_mapping_rules": [
2024-07-17 01:26:38,282 INFO     {
2024-07-17 01:26:38,282 INFO       "source_path_format": "POSIX",
2024-07-17 01:26:38,282 INFO       "source_path": "/shared/projects/project1",
2024-07-17 01:26:38,283 INFO       "destination_path": "/mnt/projects/project1"
2024-07-17 01:26:38,283 INFO     },
2024-07-17 01:26:38,283 INFO     {
2024-07-17 01:26:38,283 INFO       "source_path_format": "POSIX",
2024-07-17 01:26:38,283 INFO       "source_path": "/shared/common",
2024-07-17 01:26:38,283 INFO       "destination_path": "/mnt/common"
2024-07-17 01:26:38,283 INFO     },
2024-07-17 01:26:38,283 INFO     {
2024-07-17 01:26:38,283 INFO       "source_path_format": "POSIX",
2024-07-17 01:26:38,283 INFO       "source_path": "/",
2024-07-17 01:26:38,283 INFO       "destination_path": "/sessions/session-5b33f/assetroot-assetroot-3751a"
2024-07-17 01:26:38,283 INFO     }
2024-07-17 01:26:38,283 INFO   ]
2024-07-17 01:26:38,283 INFO }
```

**注記**  
 送信するジョブに異なるルートパスを持つ複数のマニフェストがある場合、ルートパスごとに異なる「assetroot」という名前のディレクトリがあります。

 入力ファイル、ディレクトリ、またはファイルシステムの場所のいずれかの再配置されたファイルシステムの場所を参照する必要がある場合は、ジョブのパスマッピングルールファイルを処理して再マッピングを自分で実行するか、ジョブバンドルのジョブテンプレートに`PATH`タイプジョブパラメータを追加して、そのパラメータの値として再マッピングする必要がある値を渡すことができます。たとえば、次の例では、これらのジョブパラメータのいずれかを持つようにジョブバンドルを変更し、ファイルシステムの場所を値`/shared/projects/project2`としてジョブを送信します。

```
cat > ~/job_attachments_devguide/template.yaml << EOF
specificationVersion: jobtemplate-2023-09
name: "Job Attachments Explorer"
parameterDefinitions:
- name: LocationToRemap
  type: PATH
steps:
- name: Step
  script:
    actions:
      onRun:
        command: /bin/echo
        args:
        - "The location of {{RawParam.LocationToRemap}} in the session is {{Param.LocationToRemap}}"
EOF

deadline bundle submit --farm-id $FARM_ID --queue-id $QUEUE1_ID job_attachments_devguide/ \
  -p LocationToRemap=/shared/projects/project2
```

 このジョブの実行のログファイルには、出力が含まれています。

```
2024-07-17 01:40:35,283 INFO Output:
2024-07-17 01:40:35,284 INFO The location of /shared/projects/project2 in the session is /sessions/session-5b33f/assetroot-assetroot-3751a
```

# ジョブからの出力ファイルの取得
<a name="getting-output-files-from-a-job"></a>

この例では、Deadline Cloud がジョブが生成する出力ファイルを識別する方法、それらのファイルを Amazon S3 にアップロードするかどうかを決定する方法、およびそれらの出力ファイルをワークステーションで取得する方法を示します。

 この例の`job_attachments_devguide_output`ジョブバンドルの代わりに`job_attachments_devguide`ジョブバンドルを使用します。まず、Deadline Cloud サンプル GitHub リポジトリのクローンから AWS CloudShell 環境内のバンドルのコピーを作成します。

```
cp -r deadline-cloud-samples/job_bundles/job_attachments_devguide_output ~/
```

 このジョブバンドルと`job_attachments_devguide`ジョブバンドルの重要な違いは、ジョブテンプレートに新しいジョブパラメータを追加することです。

```
...
parameterDefinitions:
...
- name: OutputDir
  type: PATH
  objectType: DIRECTORY
  dataFlow: OUT
  default: ./output_dir
  description: This directory contains the output for all steps.
...
```

 パラメータの `dataFlow`プロパティには値 があります`OUT`。Deadline Cloud は、`dataFlow`ジョブの出力`INOUT`として `OUT`または の値を持つジョブパラメータの値を使用します。これらの種類のジョブパラメータに値として渡されたファイルシステムの場所が、ジョブを実行するワーカーのローカルファイルシステムの場所に再マッピングされた場合、Deadline Cloud は、その場所で新しいファイルを検索し、ジョブ出力として Amazon S3 にアップロードします。

 これがどのように機能するかを確認するには、まず AWS CloudShell タブで Deadline Cloud ワーカーエージェントを起動します。以前に送信したジョブの実行を終了します。次に、ログディレクトリからジョブログを削除します。

```
rm -rf ~/devdemo-logs/queue-*
```

 次に、このジョブバンドルを使用してジョブを送信します。CloudShell で実行されているワーカーが実行されたら、ログを確認します。

```
# Change the value of FARM_ID to your farm's identifier
FARM_ID=farm-00112233445566778899aabbccddeeff
# Change the value of QUEUE1_ID to queue Q1's identifier
QUEUE1_ID=queue-00112233445566778899aabbccddeeff
# Change the value of WSALL_ID to the identifier of the WSAll storage profile
WSALL_ID=sp-00112233445566778899aabbccddeeff

deadline config set settings.storage_profile_id $WSALL_ID

deadline bundle submit --farm-id $FARM_ID --queue-id $QUEUE1_ID ./job_attachments_devguide_output
```

 ログは、ファイルが出力として検出され、Amazon S3 にアップロードされたことを示しています。

```
2024-07-17 02:13:10,873 INFO ----------------------------------------------
2024-07-17 02:13:10,873 INFO Uploading output files to Job Attachments
2024-07-17 02:13:10,873 INFO ----------------------------------------------
2024-07-17 02:13:10,873 INFO Started syncing outputs using Job Attachments
2024-07-17 02:13:10,955 INFO Found 1 file totaling 117.0 B in output directory: /sessions/session-7efa/assetroot-assetroot-3751a/output_dir
2024-07-17 02:13:10,956 INFO Uploading output manifest to DeadlineCloud/Manifests/farm-0011/queue-2233/job-4455/step-6677/task-6677-0/2024-07-17T02:13:10.835545Z_sessionaction-8899-1/c6808439dfc59f86763aff5b07b9a76c_output
2024-07-17 02:13:10,988 INFO Uploading 1 output file to S3: s3BucketName/DeadlineCloud/Data
2024-07-17 02:13:11,011 INFO Uploaded 117.0 B / 117.0 B of 1 file (Transfer rate: 0.0 B/s)
2024-07-17 02:13:11,011 INFO Summary Statistics for file uploads:
Processed 1 file totaling 117.0 B.
Skipped re-processing 0 files totaling 0.0 B.
Total processing time of 0.02281 seconds at 5.13 KB/s.
```

 ログには、Deadline Cloud がキューのジョブアタッチメントで使用するように設定された Amazon S3 バケットに新しいマニフェストオブジェクトを作成したことも示されています`Q1`。マニフェストオブジェクトの名前は、出力を生成したタスクのファーム、キュー、ジョブ、ステップ、タスク、タイムスタンプ、`sessionaction`識別子から算出されます。このマニフェストファイルをダウンロードして、Deadline Cloud がこのタスクの出力ファイルをどこに配置したかを確認します。

```
# The name of queue `Q1`'s job attachments S3 bucket
Q1_S3_BUCKET=$(
  aws deadline get-queue --farm-id $FARM_ID --queue-id $QUEUE1_ID \
    --query 'jobAttachmentSettings.s3BucketName' | tr -d '"'
)

# Fill this in with the object name from your log
OBJECT_KEY="DeadlineCloud/Manifests/..."

aws s3 cp --quiet s3://$Q1_S3_BUCKET/$OBJECT_KEY /dev/stdout | jq .
```

 マニフェストは次のようになります。

```
{
  "hashAlg": "xxh128",
  "manifestVersion": "2023-03-03",
  "paths": [
    {
      "hash": "34178940e1ef9956db8ea7f7c97ed842",
      "mtime": 1721182390859777,
      "path": "output_dir/output.txt",
      "size": 117
    }
  ],
  "totalSize": 117
}
```

 これは、出力ファイルのコンテンツが、ジョブ入力ファイルを保存するのと同じ方法で Amazon S3 に保存されることを示しています。入力ファイルと同様に、出力ファイルは、ファイルのハッシュとプレフィックス を含むオブジェクト名で S3 に保存されます`DeadlineCloud/Data`。

```
$ aws s3 ls --recursive s3://$Q1_S3_BUCKET | grep 34178940e1ef9956db8ea7f7c97ed842
2024-07-17 02:13:11        117 DeadlineCloud/Data/34178940e1ef9956db8ea7f7c97ed842.xxh128
```

 Deadline Cloud Monitor または Deadline Cloud CLI を使用して、ジョブの出力をワークステーションにダウンロードできます。

```
deadline job download-output --farm-id $FARM_ID --queue-id $QUEUE1_ID --job-id $JOB_ID
```

 送信された`OutputDir`ジョブのジョブパラメータの値は であるため`./output_dir`、出力はジョブバンドルディレクトリ`output_dir`内の というディレクトリにダウンロードされます。の値として絶対パスまたは異なる相対位置を指定した場合`OutputDir`、出力ファイルは代わりにその場所にダウンロードされます。

```
$ deadline job download-output --farm-id $FARM_ID --queue-id $QUEUE1_ID --job-id $JOB_ID
Downloading output from Job 'Job Attachments Explorer: Output'

Summary of files to download:
    /home/cloudshell-user/job_attachments_devguide_output/output_dir/output.txt (1 file)

You are about to download files which may come from multiple root directories. Here are a list of the current root directories:
[0] /home/cloudshell-user/job_attachments_devguide_output
> Please enter the index of root directory to edit, y to proceed without changes, or n to cancel the download (0, y, n) [y]: 

Downloading Outputs  [####################################]  100%
Download Summary:
    Downloaded 1 files totaling 117.0 B.
    Total download time of 0.14189 seconds at 824.0 B/s.
    Download locations (total file counts):
        /home/cloudshell-user/job_attachments_devguide_output (1 file)
```

# 依存ステップのステップからのファイルの使用
<a name="using-files-output-from-a-step-in-a-dependent-step"></a>

この例では、ジョブの 1 つのステップが同じジョブで依存するステップの出力にアクセスする方法を示します。

 あるステップの出力を別のステップで使用できるようにするために、Deadline Cloud はセッションにアクションを追加して、セッションでタスクを実行する前にそれらの出力をダウンロードします。出力を使用する必要があるステップの依存関係としてこれらのステップを宣言することで、出力を からダウンロードするステップを指示します。

この例の`job_attachments_devguide_output`ジョブバンドルを使用します。まず、Deadline Cloud サンプル GitHub リポジトリのクローンから AWS CloudShell 環境にコピーを作成します。既存のステップの後にのみ実行され、そのステップの出力を使用する依存ステップを追加するように変更します。

```
cp -r deadline-cloud-samples/job_bundles/job_attachments_devguide_output ~/

cat >> job_attachments_devguide_output/template.yaml << EOF
- name: DependentStep
  dependencies:
  - dependsOn: Step
  script:
    actions:
      onRun:
        command: /bin/cat
        args:
        - "{{Param.OutputDir}}/output.txt"
EOF
```

 この変更されたジョブバンドルで作成されたジョブは、2 つの異なるセッションとして実行されます。1 つはステップ「Step」のタスク用で、もう 1 つはステップDependentStep」のタスク用です。

まず、CloudShell タブで Deadline Cloud ワーカーエージェントを起動します。以前に送信したジョブの実行を終了し、ログディレクトリからジョブログを削除します。

```
rm -rf ~/devdemo-logs/queue-*
```

 次に、変更されたジョブバンドルを使用して`job_attachments_devguide_output`ジョブを送信します。CloudShell 環境のワーカーでの実行が完了するまで待ちます。2 つのセッションのログを確認します。

```
# Change the value of FARM_ID to your farm's identifier
FARM_ID=farm-00112233445566778899aabbccddeeff
# Change the value of QUEUE1_ID to queue Q1's identifier
QUEUE1_ID=queue-00112233445566778899aabbccddeeff
# Change the value of WSALL_ID to the identifier of the WSAll storage profile
WSALL_ID=sp-00112233445566778899aabbccddeeff

deadline config set settings.storage_profile_id $WSALL_ID

deadline bundle submit --farm-id $FARM_ID --queue-id $QUEUE1_ID ./job_attachments_devguide_output

# Wait for the job to finish running, and then:

cat demoenv-logs/queue-*/session-*
```

 というステップのタスクのセッションログには`DependentStep`、2 つの個別のダウンロードアクションが実行されます。

```
2024-07-17 02:52:05,666 INFO ==============================================
2024-07-17 02:52:05,666 INFO --------- Job Attachments Download for Job
2024-07-17 02:52:05,667 INFO ==============================================
2024-07-17 02:52:05,667 INFO Syncing inputs using Job Attachments
2024-07-17 02:52:05,928 INFO Downloaded 207.0 B / 207.0 B of 1 file (Transfer rate: 0.0 B/s)
2024-07-17 02:52:05,929 INFO Summary Statistics for file downloads:
Processed 1 file totaling 207.0 B.
Skipped re-processing 0 files totaling 0.0 B.
Total processing time of 0.03954 seconds at 5.23 KB/s.

2024-07-17 02:52:05,979 INFO 
2024-07-17 02:52:05,979 INFO ==============================================
2024-07-17 02:52:05,979 INFO --------- Job Attachments Download for Step
2024-07-17 02:52:05,979 INFO ==============================================
2024-07-17 02:52:05,980 INFO Syncing inputs using Job Attachments
2024-07-17 02:52:06,133 INFO Downloaded 117.0 B / 117.0 B of 1 file (Transfer rate: 0.0 B/s)
2024-07-17 02:52:06,134 INFO Summary Statistics for file downloads:
Processed 1 file totaling 117.0 B.
Skipped re-processing 0 files totaling 0.0 B.
Total processing time of 0.03227 seconds at 3.62 KB/s.
```

 最初のアクションは、「Step」という名前のステップで使用される`script.sh`ファイルをダウンロードします。2 番目のアクションは、そのステップから出力をダウンロードします。Deadline Cloud は、そのステップで生成された出力マニフェストを入力マニフェストとして使用して、ダウンロードするファイルを決定します。

 同じログに遅れると、「DependentStep」という名前のステップからの出力が表示されます。

```
2024-07-17 02:52:06,213 INFO Output:
2024-07-17 02:52:06,216 INFO Script location: /sessions/session-5b33f/assetroot-assetroot-3751a/script.sh
```