

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Gunakan lampiran pekerjaan untuk berbagi file
<a name="build-job-attachments"></a>

Gunakan *lampiran pekerjaan* untuk membuat file yang tidak ada di direktori bersama tersedia untuk pekerjaan Anda, dan untuk menangkap file output jika tidak ditulis ke direktori bersama. Lampiran Job menggunakan Amazon S3 untuk mengirim file antar host. File disimpan dalam bucket S3, dan Anda tidak perlu mengunggah file jika kontennya tidak berubah.

Anda harus menggunakan lampiran pekerjaan saat menjalankan pekerjaan pada [armada yang dikelola layanan](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/smf-manage.html) karena host tidak berbagi lokasi sistem file. Lampiran Job juga berguna dengan [armada yang dikelola pelanggan](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/manage-cmf.html) ketika file input atau output pekerjaan disimpan pada sistem file jaringan bersama, seperti ketika [bundel pekerjaan](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/submit-job-bundle.html) Anda berisi skrip shell atau Python. 

 Saat Anda mengirimkan paket pekerjaan dengan [Deadline Cloud CLI](https://pypi.org/project/deadline/) atau pengirim Deadline Cloud, lampiran pekerjaan menggunakan profil penyimpanan pekerjaan dan lokasi sistem file yang diperlukan antrian untuk mengidentifikasi file input yang tidak ada di host pekerja dan harus diunggah ke Amazon S3 sebagai bagian dari pengiriman pekerjaan. Profil penyimpanan ini juga membantu Deadline Cloud mengidentifikasi file keluaran di lokasi host pekerja yang harus diunggah ke Amazon S3 sehingga tersedia untuk stasiun kerja Anda. 

 Contoh lampiran pekerjaan menggunakan konfigurasi profil pertanian, armada, antrian, dan penyimpanan dari dan. [Contoh infrastruktur proyek](sample-project-infrastructure.md) [Profil penyimpanan dan pemetaan jalur](storage-profiles-and-path-mapping.md) Anda harus melalui bagian-bagian itu sebelum yang satu ini. 

Dalam contoh berikut, Anda menggunakan bundel pekerjaan sampel sebagai titik awal, lalu memodifikasinya untuk mengeksplorasi fungsionalitas lampiran pekerjaan. Paket Job adalah cara terbaik bagi pekerjaan Anda untuk menggunakan lampiran pekerjaan. Mereka menggabungkan template [pekerjaan Open Job Description](https://github.com/OpenJobDescription/openjd-specifications/wiki) dalam direktori dengan file tambahan yang mencantumkan file dan direktori yang dibutuhkan oleh pekerjaan menggunakan bundel pekerjaan. Untuk informasi selengkapnya tentang paket pekerjaan, lihat[Templat Open Job Description (OpenJD) untuk Deadline Cloud](build-job-bundle.md).

# Mengirimkan file dengan pekerjaan
<a name="submitting-files-with-a-job"></a>

Dengan Deadline Cloud, Anda dapat mengaktifkan alur kerja pekerjaan untuk mengakses file input yang tidak tersedia di lokasi sistem file bersama di host pekerja. Lampiran Job memungkinkan rendering pekerjaan untuk mengakses file yang hanya berada di drive workstation lokal atau lingkungan armada yang dikelola layanan. Saat mengirimkan bundel pekerjaan, Anda dapat menyertakan daftar file input dan direktori yang diperlukan oleh pekerjaan. Deadline Cloud mengidentifikasi file yang tidak dibagikan ini, mengunggahnya dari mesin lokal ke Amazon S3, dan mengunduhnya ke host pekerja. Ini merampingkan proses mentransfer aset input ke render node, memastikan semua file yang diperlukan dapat diakses untuk eksekusi pekerjaan terdistribusi.

Anda dapat menentukan file untuk pekerjaan secara langsung di bundel pekerjaan, menggunakan parameter dalam template pekerjaan yang Anda berikan menggunakan variabel lingkungan atau skrip, dan menggunakan `assets_references` file pekerjaan. Anda dapat menggunakan salah satu metode ini atau kombinasi ketiganya. Anda dapat menentukan profil penyimpanan untuk bundel untuk pekerjaan sehingga hanya mengunggah file yang telah berubah di workstation lokal.

Bagian ini menggunakan contoh bundel pekerjaan GitHub untuk menunjukkan bagaimana Deadline Cloud mengidentifikasi file dalam pekerjaan Anda untuk diunggah, bagaimana file tersebut diatur di Amazon S3, dan bagaimana file tersebut tersedia untuk host pekerja yang memproses pekerjaan Anda. 

**Topics**
+ [Bagaimana Deadline Cloud mengunggah file ke Amazon S3](what-job-attachments-uploads-to-amazon-s3.md)
+ [Bagaimana Deadline Cloud memilih file yang akan diunggah](how-job-attachments-decides-what-to-upload-to-amazon-s3.md)
+ [Bagaimana pekerjaan menemukan file input lampiran pekerjaan](how-jobs-find-job-attachments-input-files.md)

# Bagaimana Deadline Cloud mengunggah file ke Amazon S3
<a name="what-job-attachments-uploads-to-amazon-s3"></a>

Contoh ini menunjukkan bagaimana Deadline Cloud mengunggah file dari workstation atau host pekerja Anda ke Amazon S3 sehingga file tersebut dapat dibagikan. Ini menggunakan bundel pekerjaan sampel dari GitHub dan Deadline Cloud CLI untuk mengirimkan pekerjaan.

 Mulailah dengan mengkloning [ GitHubrepositori sampel Deadline Cloud](https://github.com/aws-deadline/deadline-cloud-samples) ke [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)lingkungan Anda, lalu salin bundel `job_attachments_devguide` pekerjaan ke direktori home Anda: 

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

 Instal [Deadline Cloud CLI](https://pypi.org/project/deadline/) untuk mengirimkan bundel pekerjaan: 

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

 Bundel `job_attachments_devguide` pekerjaan memiliki satu langkah dengan tugas yang menjalankan skrip bash shell yang lokasi sistem filenya diteruskan sebagai parameter pekerjaan. Definisi parameter pekerjaan adalah: 

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

 `IN`Nilai `dataFlow` properti memberi tahu lampiran pekerjaan bahwa nilai `ScriptFile` parameter adalah masukan ke pekerjaan. Nilai `default` properti adalah lokasi relatif ke direktori bundel pekerjaan, tetapi juga bisa menjadi jalur absolut. Definisi parameter ini mendeklarasikan `script.sh` file dalam direktori bundel pekerjaan sebagai file input yang diperlukan agar pekerjaan dapat dijalankan. 

 Selanjutnya, pastikan bahwa Deadline Cloud CLI tidak memiliki profil penyimpanan yang dikonfigurasi kemudian kirimkan pekerjaan ke antrian: `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/
```

 Output dari Deadline Cloud CLI setelah perintah ini dijalankan terlihat seperti: 

```
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
```

Saat Anda mengirimkan pekerjaan, Deadline Cloud pertama-tama melakukan hash `script.sh` file dan kemudian mengunggahnya ke Amazon S3. 

Deadline Cloud memperlakukan bucket S3 sebagai penyimpanan yang dapat dialamatkan konten. File diunggah ke objek S3. Nama objek berasal dari hash dari isi file. Jika dua file memiliki konten yang identik, mereka memiliki nilai hash yang sama terlepas dari di mana file tersebut berada atau apa namanya. Penyimpanan yang dapat dialamatkan konten ini memungkinkan Deadline Cloud untuk menghindari mengunggah file jika sudah tersedia.

 Anda dapat menggunakan [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) untuk melihat objek yang diunggah ke 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
```

 Dua objek diunggah ke S3: 
+  `DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128`— Isi dari`script.sh`. [Nilai `87cb19095dd5d78fcaf56384ef0e6241` dalam kunci objek adalah hash dari isi file, dan ekstensi `xxh128` menunjukkan bahwa nilai hash dihitung sebagai 128 bit xxhash.](https://xxhash.com/) 
+  `DeadlineCloud/Manifests/<farm-id>/<queue-id>/Inputs/<guid>/a1d221c7fd97b08175b3872a37428e8c_input`— Objek manifes untuk pengajuan pekerjaan. Nilai`<farm-id>`,`<queue-id>`, dan `<guid>` merupakan pengidentifikasi pertanian Anda, pengidentifikasi antrian, dan nilai heksidesimal acak. Nilai `a1d221c7fd97b08175b3872a37428e8c` dalam contoh ini adalah nilai hash yang dihitung dari string`/home/cloudshell-user/job_attachments_devguide`, direktori tempat `script.sh` berada. 

 Objek manifes berisi informasi untuk file input pada jalur root tertentu yang diunggah ke S3 sebagai bagian dari pengiriman pekerjaan. Unduh file manifes ini (`aws s3 cp s3://$Q1_S3_BUCKET/<objectname>`). Isinya mirip dengan: 

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

Ini menunjukkan bahwa file `script.sh` telah diunggah, dan hash dari konten file itu. `87cb19095dd5d78fcaf56384ef0e6241` Nilai hash ini cocok dengan nilai dalam nama `DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128` objek. Ini digunakan oleh Deadline Cloud untuk mengetahui objek mana yang akan diunduh untuk konten file ini.

 Skema lengkap untuk file ini [tersedia di GitHub](https://github.com/aws-deadline/deadline-cloud/blob/mainline/src/deadline/job_attachments/asset_manifests/v2023_03_03/validate.py). 

Bila Anda menggunakan [CreateJob operasi](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_CreateJob.html), Anda dapat mengatur lokasi objek manifes. Anda dapat menggunakan [GetJoboperasi](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html) untuk melihat lokasi: 

```
{
    "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"
            }
        ]
    },
    ...
}
```

# Bagaimana Deadline Cloud memilih file yang akan diunggah
<a name="how-job-attachments-decides-what-to-upload-to-amazon-s3"></a>

 File dan direktori yang dipertimbangkan oleh lampiran pekerjaan untuk diunggah ke Amazon S3 sebagai input ke pekerjaan Anda adalah: 
+  Nilai-nilai dari semua parameter pekerjaan `PATH` -type didefinisikan dalam template pekerjaan bundel pekerjaan dengan `dataFlow` nilai `IN` atau`INOUT`.
+  File dan direktori terdaftar sebagai input dalam file referensi aset bundel pekerjaan. 

 Jika Anda mengirimkan pekerjaan tanpa profil penyimpanan, semua file yang dipertimbangkan untuk diunggah akan diunggah. Jika Anda mengirimkan pekerjaan dengan profil penyimpanan, file tidak akan diunggah ke Amazon S3 jika mereka berada di lokasi sistem file tipe penyimpanan profil `SHARED` penyimpanan yang juga diperlukan lokasi sistem file untuk antrian. Lokasi ini diharapkan tersedia di host pekerja yang menjalankan pekerjaan, jadi tidak perlu mengunggahnya ke S3. 

 Dalam contoh ini, Anda membuat lokasi sistem `SHARED` file `WSAll` di CloudShell lingkungan AWS Anda dan kemudian menambahkan file ke lokasi sistem file tersebut. Gunakan perintah berikut ini. 

```
# 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
```

 Selanjutnya, tambahkan file referensi aset ke bundel pekerjaan yang menyertakan semua file yang Anda buat sebagai input untuk pekerjaan tersebut. Gunakan perintah berikut ini. 

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

 Selanjutnya, konfigurasikan Deadline Cloud CLI untuk mengirimkan pekerjaan dengan `WSAll` profil penyimpanan, lalu kirimkan bundel pekerjaan: 

```
# 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 mengunggah dua file ke Amazon S3 saat Anda mengirimkan pekerjaan. Anda dapat mengunduh objek manifes untuk pekerjaan dari S3 untuk melihat file yang diunggah: 

```
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
```

 Dalam contoh ini, ada satu file manifes dengan konten berikut: 

```
{
    "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
}
```

 Gunakan [GetJob operasi](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html) untuk manifes untuk melihat bahwa `rootPath` adalah “/”. 

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

 Jalur root untuk kumpulan file input selalu merupakan subpath umum terpanjang dari file-file tersebut. Jika pekerjaan Anda dikirim dari Windows sebagai gantinya dan ada file input tanpa subpath umum karena mereka berada di drive yang berbeda, Anda melihat jalur root terpisah pada setiap drive. Jalur dalam manifes selalu relatif terhadap jalur root manifes, sehingga file input yang diunggah adalah: 
+  `/home/cloudshell-user/job_attachments_devguide/script.sh`— File skrip dalam bundel pekerjaan. 
+  `/shared/projects/project2/file.txt`— File di lokasi sistem `SHARED` file di profil `WSAll` penyimpanan yang **tidak** ada dalam daftar lokasi sistem file yang diperlukan untuk antrian`Q1`. 

File di lokasi sistem file `FSCommon` (`/shared/common/file.txt`) dan `FS1` (`/shared/projects/project1/file.txt`) tidak ada dalam daftar. Ini karena lokasi sistem file tersebut berada `SHARED` di profil `WSAll` penyimpanan dan keduanya berada dalam daftar lokasi sistem file yang diperlukan dalam antrian`Q1`. 

Anda dapat melihat lokasi sistem file yang dipertimbangkan `SHARED` untuk pekerjaan yang dikirimkan dengan profil penyimpanan tertentu dengan [GetStorageProfileForQueue operasi](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetStorageProfileForQueue.html). Untuk kueri profil penyimpanan `WSAll` untuk antrian `Q1` gunakan perintah berikut: 

```
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
```

# Bagaimana pekerjaan menemukan file input lampiran pekerjaan
<a name="how-jobs-find-job-attachments-input-files"></a>

 Agar pekerjaan dapat menggunakan file yang diunggah Deadline Cloud ke Amazon S3 menggunakan lampiran pekerjaan, pekerjaan Anda memerlukan file-file tersebut yang tersedia melalui sistem file di host pekerja. Saat [sesi](https://github.com/OpenJobDescription/openjd-specifications/wiki/How-Jobs-Are-Run#sessions) untuk pekerjaan Anda berjalan di host pekerja, Deadline Cloud mengunduh file input untuk pekerjaan tersebut ke direktori sementara di drive lokal host pekerja dan menambahkan aturan pemetaan jalur untuk setiap jalur root pekerjaan ke lokasi sistem filenya di drive lokal. 

 Untuk contoh ini, mulai agen pekerja Deadline Cloud di CloudShell tab AWS. Biarkan pekerjaan yang dikirimkan sebelumnya selesai berjalan, lalu hapus log pekerjaan dari direktori log: 

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

 Skrip berikut memodifikasi bundel pekerjaan untuk menampilkan semua file di direktori kerja sementara sesi dan isi file aturan pemetaan jalur, dan kemudian mengirimkan pekerjaan dengan bundel yang dimodifikasi: 

```
# 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/
```

 Anda dapat melihat log pekerjaan yang dijalankan setelah dijalankan oleh pekerja di AWS CloudShell lingkungan Anda: 

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

Log menunjukkan bahwa hal pertama yang terjadi dalam sesi adalah dua file input untuk pekerjaan yang diunduh ke pekerja: 

```
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.
```

 Berikutnya adalah output dari `script.sh` run by the job: 
+  File masukan yang diunggah saat pekerjaan dikirimkan terletak di bawah direktori yang namanya dimulai dengan “assetroot” di direktori sementara sesi. 
+  Jalur file input telah dipindahkan relatif ke direktori “assetroot” alih-alih relatif terhadap jalur root untuk manifes input pekerjaan (). `"/"`
+  File aturan pemetaan jalur berisi aturan tambahan yang memetakan ulang `"/"` ke jalur absolut direktori “assetroot”. 

 Contoh: 

```
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 }
```

**catatan**  
 Jika pekerjaan yang Anda kirimkan memiliki beberapa manifes dengan jalur root yang berbeda, ada direktori bernama “assetroot” yang berbeda untuk setiap jalur root. 

 Jika Anda perlu mereferensikan lokasi sistem file yang dipindahkan dari salah satu file input, direktori, atau lokasi sistem file Anda, Anda dapat memproses file aturan pemetaan jalur dalam pekerjaan Anda dan melakukan pemetaan ulang sendiri, atau menambahkan parameter `PATH` jenis pekerjaan ke template pekerjaan di bundel pekerjaan Anda dan meneruskan nilai yang Anda perlukan untuk memetakan ulang sebagai nilai parameter itu. Misalnya, contoh berikut memodifikasi bundel pekerjaan untuk memiliki salah satu parameter pekerjaan ini dan kemudian mengirimkan pekerjaan dengan lokasi sistem file `/shared/projects/project2` sebagai nilainya: 

```
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
```

 File log untuk menjalankan pekerjaan ini berisi outputnya: 

```
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
```

# Mendapatkan file output dari pekerjaan
<a name="getting-output-files-from-a-job"></a>

Contoh ini menunjukkan bagaimana Deadline Cloud mengidentifikasi file output yang dihasilkan oleh pekerjaan Anda, memutuskan apakah akan mengunggah file tersebut ke Amazon S3, dan bagaimana Anda bisa mendapatkan file output tersebut di workstation Anda. 

 Gunakan bundel `job_attachments_devguide_output` pekerjaan alih-alih bundel `job_attachments_devguide` pekerjaan untuk contoh ini. Mulailah dengan membuat salinan bundel di AWS CloudShell lingkungan Anda dari tiruan repositori sampel GitHub Deadline Cloud: 

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

 Perbedaan penting antara bundel pekerjaan ini dan bundel `job_attachments_devguide` pekerjaan adalah penambahan parameter pekerjaan baru di templat pekerjaan: 

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

 `dataFlow`Properti parameter memiliki nilai`OUT`. Deadline Cloud menggunakan nilai parameter `dataFlow` pekerjaan dengan nilai `OUT` atau `INOUT` sebagai output dari pekerjaan Anda. Jika lokasi sistem file diteruskan sebagai nilai ke jenis parameter pekerjaan ini dipetakan ulang ke lokasi sistem file lokal pada pekerja yang menjalankan pekerjaan, maka Deadline Cloud akan mencari file baru di lokasi dan mengunggahnya ke Amazon S3 sebagai output pekerjaan. 

 Untuk melihat cara kerjanya, pertama-tama mulai agen pekerja Deadline Cloud di AWS CloudShell tab. Biarkan pekerjaan yang dikirimkan sebelumnya selesai berjalan. Kemudian hapus log pekerjaan dari direktori log: 

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

 Selanjutnya, kirimkan pekerjaan dengan bundel pekerjaan ini. Setelah pekerja berjalan dalam CloudShell proses Anda, lihat log: 

```
# 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
```

 Log menunjukkan bahwa file terdeteksi sebagai output dan diunggah ke 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.
```

 Log juga menunjukkan bahwa Deadline Cloud membuat objek manifes baru di bucket Amazon S3 yang dikonfigurasi untuk digunakan oleh lampiran pekerjaan pada antrian. `Q1` Nama objek manifes berasal dari pertanian, antrian, pekerjaan, langkah, tugas, stempel waktu, dan `sessionaction` pengidentifikasi tugas yang menghasilkan output. Unduh file manifes ini untuk melihat di mana Deadline Cloud menempatkan file output untuk tugas ini: 

```
# 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 .
```

 Manifes terlihat seperti: 

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

 Ini menunjukkan bahwa konten file output disimpan ke Amazon S3 dengan cara yang sama seperti file input pekerjaan disimpan. Mirip dengan file input, file output disimpan dalam S3 dengan nama objek yang berisi hash file dan awalan. `DeadlineCloud/Data` 

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

 Anda dapat mengunduh output pekerjaan ke workstation Anda menggunakan monitor Deadline Cloud atau Deadline Cloud CLI: 

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

 Nilai parameter `OutputDir` pekerjaan dalam pekerjaan yang dikirimkan adalah`./output_dir`, sehingga output diunduh ke direktori yang disebut `output_dir` dalam direktori bundel pekerjaan. Jika Anda menentukan jalur absolut atau lokasi relatif yang berbeda sebagai nilainya`OutputDir`, maka file output akan diunduh ke lokasi itu sebagai gantinya. 

```
$ 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)
```

# Menggunakan file dari langkah dalam langkah dependen
<a name="using-files-output-from-a-step-in-a-dependent-step"></a>

Contoh ini menunjukkan bagaimana satu langkah dalam pekerjaan dapat mengakses output dari langkah yang bergantung pada pekerjaan yang sama. 

 Untuk membuat output dari satu langkah tersedia untuk yang lain, Deadline Cloud menambahkan tindakan tambahan ke sesi untuk mengunduh output tersebut sebelum menjalankan tugas dalam sesi. Anda memberi tahu langkah mana untuk mengunduh output dengan mendeklarasikan langkah-langkah tersebut sebagai dependensi dari langkah yang perlu menggunakan output. 

Gunakan bundel `job_attachments_devguide_output` pekerjaan untuk contoh ini. Mulailah dengan membuat salinan di AWS CloudShell lingkungan Anda dari klon repositori sampel GitHub Deadline Cloud. Ubah untuk menambahkan langkah dependen yang hanya berjalan setelah langkah yang ada dan menggunakan output langkah itu: 

```
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
```

 Pekerjaan yang dibuat dengan bundel pekerjaan yang dimodifikasi ini berjalan sebagai dua sesi terpisah, satu untuk tugas di langkah “Langkah” dan kemudian yang kedua untuk tugas di langkah "DependentStep”. 

Pertama mulai agen pekerja Deadline Cloud di CloudShell tab. Biarkan pekerjaan yang dikirimkan sebelumnya selesai berjalan, lalu hapus log pekerjaan dari direktori log: 

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

 Selanjutnya, kirimkan pekerjaan menggunakan bundel `job_attachments_devguide_output` pekerjaan yang dimodifikasi. Tunggu sampai selesai berjalan pada pekerja di CloudShell lingkungan Anda. Lihatlah log untuk dua sesi: 

```
# 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-*
```

 Dalam log sesi untuk tugas di langkah bernama`DependentStep`, ada dua tindakan unduhan terpisah yang dijalankan: 

```
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.
```

 Tindakan pertama mengunduh `script.sh` file yang digunakan oleh langkah bernama “Langkah.” Tindakan kedua mengunduh output dari langkah itu. Deadline Cloud menentukan file mana yang akan diunduh dengan menggunakan manifes keluaran yang dihasilkan oleh langkah tersebut sebagai manifes masukan. 

 Di akhir log yang sama, Anda dapat melihat output dari langkah bernama "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
```