

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwenden Sie Jobanhänge, um Dateien zu teilen
<a name="build-job-attachments"></a>

Verwenden Sie *Jobanhänge*, um Dateien, die sich nicht in gemeinsam genutzten Verzeichnissen befinden, für Ihre Jobs verfügbar zu machen und die Ausgabedateien zu erfassen, falls sie nicht in gemeinsam genutzte Verzeichnisse geschrieben wurden. Job Attachments verwendet Amazon S3, um Dateien zwischen Hosts zu übertragen. Dateien werden in S3-Buckets gespeichert, und Sie müssen eine Datei nicht hochladen, wenn sich ihr Inhalt nicht geändert hat.

Sie müssen Auftragsanhänge verwenden, wenn Sie Jobs auf vom [Service verwalteten Flotten](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/smf-manage.html) ausführen, da Hosts die Speicherorte im Dateisystem nicht gemeinsam nutzen. Jobanhänge sind auch für [vom Kunden verwaltete Flotten](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/manage-cmf.html) nützlich, wenn die Eingabe- oder Ausgabedateien eines Jobs in einem gemeinsam genutzten Netzwerkdateisystem gespeichert sind, z. B. wenn Ihr [Auftragspaket](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/submit-job-bundle.html) Shell- oder Python-Skripte enthält. 

 Wenn Sie ein Job-Bundle entweder mit der [Deadline Cloud-CLI](https://pypi.org/project/deadline/) oder einem Deadline Cloud-Absender einreichen, verwenden Jobanhänge das Speicherprofil des Jobs und die erforderlichen Dateisystemspeicherorte der Warteschlange, um die Eingabedateien zu identifizieren, die sich nicht auf einem Worker-Host befinden und im Rahmen der Auftragsübermittlung auf Amazon S3 hochgeladen werden sollten. Diese Speicherprofile helfen Deadline Cloud auch dabei, die Ausgabedateien an Worker-Host-Standorten zu identifizieren, die auf Amazon S3 hochgeladen werden müssen, damit sie auf Ihrer Workstation verfügbar sind. 

 Die Beispiele für Jobanhänge verwenden die Konfigurationen für Farm, Flotte, Warteschlangen und Speicherprofile von [Beispiel für eine Projektinfrastruktur](sample-project-infrastructure.md) und[Speicherprofile und Pfadzuweisung](storage-profiles-and-path-mapping.md). Sie sollten diese Abschnitte vor diesem durchgehen. 

In den folgenden Beispielen verwenden Sie ein Beispiel-Job-Bundle als Ausgangspunkt und ändern es dann, um die Funktionalität von Job Attachment zu untersuchen. Job-Bundles sind die beste Methode, um Job-Anhänge für Ihre Jobs zu verwenden. Sie kombinieren eine Jobvorlage „[Open Job Description](https://github.com/OpenJobDescription/openjd-specifications/wiki)“ in einem Verzeichnis mit zusätzlichen Dateien, in denen die Dateien und Verzeichnisse aufgeführt sind, die für Jobs benötigt werden, die das Job-Bundle verwenden. Weitere Informationen zu Jobpaketen finden Sie unter[Vorlagen für offene Stellenbeschreibungen (OpenJD) für Deadline Cloud](build-job-bundle.md).

# Dateien mit einem Job einreichen
<a name="submitting-files-with-a-job"></a>

Mit Deadline Cloud können Sie Job-Workflows für den Zugriff auf Eingabedateien aktivieren, die an gemeinsam genutzten Dateisystemen auf Worker-Hosts nicht verfügbar sind. Mit Auftragsanhängen können Renderaufträge auf Dateien zugreifen, die sich nur auf einem lokalen Workstation-Laufwerk oder in einer vom Service verwalteten Flottenumgebung befinden. Wenn Sie ein Auftragspaket einreichen, können Sie Listen mit Eingabedateien und Verzeichnissen hinzufügen, die für den Job erforderlich sind. Deadline Cloud identifiziert diese nicht gemeinsam genutzten Dateien, lädt sie vom lokalen Computer auf Amazon S3 hoch und lädt sie auf den Worker-Host herunter. Es optimiert den Prozess der Übertragung von Eingabe-Assets an Renderknoten und stellt sicher, dass alle erforderlichen Dateien für die verteilte Auftragsausführung zugänglich sind.

Sie können die Dateien für Jobs direkt im Job-Bundle angeben, Parameter in der Jobvorlage verwenden, die Sie mithilfe von Umgebungsvariablen oder einem Skript bereitstellen, und die `assets_references` Datei des Jobs verwenden. Sie können eine dieser Methoden oder eine Kombination aus allen dreien verwenden. Sie können ein Speicherprofil für das Paket für den Job angeben, sodass nur Dateien hochgeladen werden, die sich auf der lokalen Arbeitsstation geändert haben.

In diesem Abschnitt wird anhand eines Beispiel-Job-Bundles von GitHub gezeigt, wie Deadline Cloud die Dateien in Ihrem Job zum Hochladen identifiziert, wie diese Dateien in Amazon S3 organisiert sind und wie sie den Worker-Hosts zur Verfügung gestellt werden, die Ihre Jobs verarbeiten. 

**Topics**
+ [So lädt Deadline Cloud Dateien auf Amazon S3 hoch](what-job-attachments-uploads-to-amazon-s3.md)
+ [Wie Deadline Cloud die hochzuladenden Dateien auswählt](how-job-attachments-decides-what-to-upload-to-amazon-s3.md)
+ [Wie finden Jobs Eingabedateien für Jobanhänge](how-jobs-find-job-attachments-input-files.md)

# So lädt Deadline Cloud Dateien auf Amazon S3 hoch
<a name="what-job-attachments-uploads-to-amazon-s3"></a>

Dieses Beispiel zeigt, wie Deadline Cloud Dateien von Ihrer Workstation oder Ihrem Worker-Host auf Amazon S3 hochlädt, damit sie gemeinsam genutzt werden können. Es verwendet ein Beispiel-Job-Bundle von GitHub und die Deadline Cloud-CLI, um Jobs einzureichen.

 Klonen Sie zunächst das [Deadline GitHub Cloud-Beispiel-Repository](https://github.com/aws-deadline/deadline-cloud-samples) in Ihre [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)Umgebung und kopieren Sie dann das `job_attachments_devguide` Job-Bundle in Ihr Home-Verzeichnis: 

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

 Installieren Sie die [Deadline Cloud-CLI](https://pypi.org/project/deadline/), um Job-Bundles einzureichen: 

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

 Das `job_attachments_devguide` Job-Bundle besteht aus einem einzigen Schritt mit einer Aufgabe, die ein Bash-Shell-Skript ausführt, dessen Dateisystemspeicherort als Jobparameter übergeben wird. Die Definition des Job-Parameters lautet: 

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

 Der `IN` Wert der `dataFlow` Eigenschaft teilt Job-Anhängen mit, dass der Wert des `ScriptFile` Parameters eine Eingabe für den Job ist. Der Wert der `default` Eigenschaft ist ein relativer Speicherort zum Verzeichnis des Job-Bundles, es kann sich aber auch um einen absoluten Pfad handeln. Diese Parameterdefinition deklariert die `script.sh` Datei im Verzeichnis des Job-Bundles als Eingabedatei, die für die Ausführung des Jobs erforderlich ist. 

 Stellen Sie als Nächstes sicher, dass für die Deadline Cloud-CLI kein Speicherprofil konfiguriert ist, und senden Sie den Job dann in die Warteschlange`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/
```

 Die Ausgabe der Deadline Cloud-CLI nach der Ausführung dieses Befehls sieht wie folgt aus: 

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

Wenn Sie den Job einreichen, hascht Deadline Cloud die `script.sh` Datei zuerst und lädt sie dann auf Amazon S3 hoch. 

Deadline Cloud behandelt den S3-Bucket als inhaltsadressierbaren Speicher. Dateien werden in S3-Objekte hochgeladen. Der Objektname wird aus einem Hash des Dateiinhalts abgeleitet. Wenn zwei Dateien identischen Inhalt haben, haben sie unabhängig davon, wo sich die Dateien befinden oder wie sie benannt sind, denselben Hashwert. Dieser inhaltsadressierbare Speicher ermöglicht es Deadline Cloud, das Hochladen einer Datei zu vermeiden, wenn sie bereits verfügbar ist.

 Sie können die [AWS-CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) verwenden, um die Objekte zu sehen, die auf Amazon S3 hochgeladen wurden: 

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

 Zwei Objekte wurden auf S3 hochgeladen: 
+  `DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128`— Der Inhalt von`script.sh`. Der Wert `87cb19095dd5d78fcaf56384ef0e6241` im Objektschlüssel ist der Hash des Dateiinhalts, und die Erweiterung `xxh128` gibt an, dass der Hashwert als [128-Bit-xxhash](https://xxhash.com/) berechnet wurde. 
+  `DeadlineCloud/Manifests/<farm-id>/<queue-id>/Inputs/<guid>/a1d221c7fd97b08175b3872a37428e8c_input`— Das Manifest-Objekt für die Auftragsübergabe. Die Werte `<farm-id>``<queue-id>`, und `<guid>` sind Ihre Farm-ID, Ihre Warteschlangen-ID und ein zufälliger Hexadezimalwert. Der Wert `a1d221c7fd97b08175b3872a37428e8c` in diesem Beispiel ist ein Hashwert, der anhand der Zeichenfolge`/home/cloudshell-user/job_attachments_devguide`, dem Verzeichnis, in dem er sich `script.sh` befindet, berechnet wird. 

 Das Manifest-Objekt enthält die Informationen für die Eingabedateien in einem bestimmten Stammpfad, die im Rahmen der Auftragsübermittlung auf S3 hochgeladen wurden. Laden Sie diese Manifestdatei herunter (`aws s3 cp s3://$Q1_S3_BUCKET/<objectname>`). Ihr Inhalt ist ähnlich wie: 

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

Dies bedeutet, dass die Datei hochgeladen `script.sh` wurde, und der Hash des Inhalts dieser Datei lautet`87cb19095dd5d78fcaf56384ef0e6241`. Dieser Hashwert entspricht dem Wert im Objektnamen`DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128`. Es wird von Deadline Cloud verwendet, um zu wissen, welches Objekt für den Inhalt dieser Datei heruntergeladen werden muss.

 Das vollständige Schema für diese Datei ist [verfügbar in GitHub](https://github.com/aws-deadline/deadline-cloud/blob/mainline/src/deadline/job_attachments/asset_manifests/v2023_03_03/validate.py). 

Wenn Sie den [CreateJob Vorgang](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_CreateJob.html) verwenden, können Sie den Speicherort der Manifestobjekte festlegen. Sie können die [GetJobOperation](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html) verwenden, um den Standort zu sehen: 

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

# Wie Deadline Cloud die hochzuladenden Dateien auswählt
<a name="how-job-attachments-decides-what-to-upload-to-amazon-s3"></a>

 Die Dateien und Verzeichnisse, die Job Attachments für den Upload auf Amazon S3 als Eingaben für Ihren Job in Betracht ziehen, sind: 
+  Die Werte aller Jobparameter `PATH` vom Typ -type, die in der Jobvorlage des Job-Bundles mit dem `dataFlow` Wert `IN` oder `INOUT` definiert sind.
+  Die Dateien und Verzeichnisse, die als Eingaben in der Asset-Referenzdatei des Job-Bundles aufgeführt sind. 

 Wenn Sie einen Job ohne Speicherprofil einreichen, werden alle Dateien hochgeladen, die für den Upload in Frage kommen. Wenn Sie einen Job mit einem Speicherprofil einreichen, werden Dateien nicht auf Amazon S3 hochgeladen, wenn sie sich in den Dateisystemspeicherorten des Speicherprofils `SHARED` vom Typ -type befinden, die auch erforderliche Dateisystemspeicherorte für die Warteschlange sind. Es wird davon ausgegangen, dass diese Speicherorte auf den Worker-Hosts verfügbar sind, auf denen der Job ausgeführt wird, sodass sie nicht auf S3 hochgeladen werden müssen. 

 In diesem Beispiel erstellen Sie `SHARED` Dateisystemspeicherorte `WSAll` in Ihrer CloudShell AWS-Umgebung und fügen dann Dateien zu diesen Dateisystemspeicherorten hinzu. Verwenden Sie den folgenden Befehl: 

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

 Als Nächstes fügen Sie dem Job-Bundle eine Asset-Referenzdatei hinzu, die alle Dateien enthält, die Sie als Eingaben für den Job erstellt haben. Verwenden Sie den folgenden Befehl: 

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

 Als Nächstes konfigurieren Sie die Deadline Cloud-CLI so, dass Jobs mit dem `WSAll` Speicherprofil gesendet werden, und senden Sie dann das Job-Bundle: 

```
# 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 lädt zwei Dateien auf Amazon S3 hoch, wenn Sie den Job einreichen. Sie können die Manifestobjekte für den Job von S3 herunterladen, um die hochgeladenen Dateien zu sehen: 

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

 In diesem Beispiel gibt es eine einzelne Manifestdatei mit dem folgenden Inhalt: 

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

 Verwenden Sie die [GetJob Operation](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html) für das Manifest, um zu überprüfen, ob der „/“ `rootPath` ist. 

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

 Der Stammpfad für eine Reihe von Eingabedateien ist immer der längste gemeinsame Unterpfad dieser Dateien. Wenn Ihr Job Windows stattdessen von eingereicht wurde und es Eingabedateien ohne gemeinsamen Unterpfad gibt, weil sie sich auf unterschiedlichen Laufwerken befanden, sehen Sie auf jedem Laufwerk einen eigenen Stammpfad. Die Pfade in einem Manifest beziehen sich immer auf den Stammpfad des Manifests. Es wurden also folgende Eingabedateien hochgeladen: 
+  `/home/cloudshell-user/job_attachments_devguide/script.sh`— Die Skriptdatei im Job-Bundle. 
+  `/shared/projects/project2/file.txt`— Die Datei an einem `SHARED` Dateisystemspeicherort im `WSAll` Speicherprofil, der **nicht** in der Liste der erforderlichen Dateisystemspeicherorte für die Warteschlange enthalten ist`Q1`. 

Die Dateien an den Dateisystemspeicherorten `FSCommon` (`/shared/common/file.txt`) und `FS1` (`/shared/projects/project1/file.txt`) sind nicht in der Liste enthalten. Dies liegt daran, dass sich diese Dateisystemspeicherorte `SHARED` im `WSAll` Speicherprofil und beide in der Liste der erforderlichen Dateisystemspeicherorte in der Warteschlange befinden`Q1`. 

Sie können die Dateisystemspeicherorte sehen, die `SHARED` für einen Job in Betracht gezogen werden, der mit einem bestimmten Speicherprofil im Rahmen des [GetStorageProfileForQueue Vorgangs](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetStorageProfileForQueue.html) eingereicht wird. `Q1`Verwenden Sie den folgenden Befehl, um das Speicherprofil `WSAll` für die Warteschlange abzufragen: 

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

# Wie finden Jobs Eingabedateien für Jobanhänge
<a name="how-jobs-find-job-attachments-input-files"></a>

 Damit ein Job die Dateien verwenden kann, die Deadline Cloud mithilfe von Job-Anhängen auf Amazon S3 hochlädt, benötigt Ihr Job diese Dateien, die über das Dateisystem auf den Worker-Hosts verfügbar sind. Wenn eine [Sitzung](https://github.com/OpenJobDescription/openjd-specifications/wiki/How-Jobs-Are-Run#sessions) für Ihren Job auf einem Worker-Host läuft, lädt Deadline Cloud die Eingabedateien für den Job in ein temporäres Verzeichnis auf dem lokalen Laufwerk des Worker-Hosts herunter und fügt Pfadzuordnungsregeln für jeden Root-Pfad des Jobs zu seinem Dateisystem-Speicherort auf dem lokalen Laufwerk hinzu. 

 Starten Sie für dieses Beispiel den Deadline Cloud-Worker-Agent auf einer CloudShell AWS-Tab. Lassen Sie alle zuvor eingereichten Jobs fertig laufen und löschen Sie dann die Job-Logs aus dem Logs-Verzeichnis: 

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

 Das folgende Skript ändert das Job-Bundle so, dass es alle Dateien im temporären Arbeitsverzeichnis der Sitzung und den Inhalt der Datei mit den Pfadzuordnungsregeln anzeigt, und sendet dann einen Job mit dem geänderten Paket: 

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

 Sie können sich das Protokoll der Ausführung des Jobs ansehen, nachdem er vom Worker in Ihrer AWS CloudShell Umgebung ausgeführt wurde: 

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

Aus dem Protokoll geht hervor, dass in der Sitzung als Erstes die beiden Eingabedateien für den Job auf den Worker heruntergeladen werden: 

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

 Als Nächstes folgt die Ausgabe von `script.sh` run by the job: 
+  Die Eingabedateien, die beim Absenden des Jobs hochgeladen wurden, befinden sich in einem Verzeichnis, dessen Name mit „assetroot“ beginnt, im temporären Verzeichnis der Sitzung. 
+  Die Pfade der Eingabedateien wurden relativ zum Verzeichnis „assetroot“ verschoben und nicht relativ zum Stammpfad für das Eingabemanifest des Jobs (). `"/"`
+  Die Datei mit den Regeln für die Pfadzuweisung enthält eine zusätzliche Regel, die dem absoluten Pfad des `"/"` Verzeichnisses „assetroot“ neu zugeordnet wird. 

 Beispiel: 

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

**Anmerkung**  
 Wenn der Job, den Sie einreichen, mehrere Manifeste mit unterschiedlichen Stammpfaden enthält, gibt es für jeden Stammpfad ein anderes Verzeichnis mit dem Namen „assetroot“. 

 Wenn Sie auf den verschobenen Dateisystemspeicherort einer Ihrer Eingabedateien, Verzeichnisse oder Dateisystemverzeichnisse verweisen müssen, können Sie entweder die Datei mit den Pfadzuordnungsregeln in Ihrem Job verarbeiten und die Neuzuordnung selbst durchführen oder der Jobvorlage in Ihrem Job-Bundle einen `PATH` Typ-Job-Parameter hinzufügen und den Wert, den Sie neu zuordnen müssen, als Wert dieses Parameters übergeben. Im folgenden Beispiel wird das Auftragspaket so geändert, dass es einen dieser Auftragsparameter hat, und sendet dann einen Job mit dem Speicherort des Dateisystems `/shared/projects/project2` als Wert: 

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

 Die Protokolldatei für die Ausführung dieses Jobs enthält seine Ausgabe: 

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

# Ausgabedateien von einem Job abrufen
<a name="getting-output-files-from-a-job"></a>

Dieses Beispiel zeigt, wie Deadline Cloud die von Ihren Jobs generierten Ausgabedateien identifiziert, entscheidet, ob diese Dateien auf Amazon S3 hochgeladen werden sollen, und wie Sie diese Ausgabedateien auf Ihre Workstation übertragen können. 

 Verwenden Sie für dieses Beispiel das `job_attachments_devguide_output` Job-Bundle anstelle des `job_attachments_devguide` Job-Bundles. Erstellen Sie zunächst eine Kopie des Bundles in Ihrer AWS CloudShell Umgebung aus Ihrem Klon des Deadline GitHub Cloud-Beispiel-Repositorys: 

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

 Der wichtige Unterschied zwischen diesem Job-Bundle und dem `job_attachments_devguide` Job-Bundle besteht darin, dass der Jobvorlage ein neuer Job-Parameter hinzugefügt wurde: 

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

 Die `dataFlow` Eigenschaft des Parameters hat den Wert`OUT`. Deadline Cloud verwendet den Wert von `dataFlow` Jobparametern mit einem Wert von `OUT` oder `INOUT` als Ausgabe Ihres Jobs. Wenn der Dateisystemspeicherort, der als Wert an diese Art von Jobparametern übergeben wurde, einem lokalen Dateisystemspeicherort auf dem Worker, der den Job ausführt, neu zugeordnet wird, sucht Deadline Cloud an dem Speicherort nach neuen Dateien und lädt diese als Jobausgaben auf Amazon S3 hoch. 

 Um zu sehen, wie das funktioniert, starten Sie zunächst den Deadline Cloud-Worker-Agent in einem AWS CloudShell Tab. Lassen Sie alle zuvor eingereichten Jobs die Ausführung beenden. Löschen Sie anschließend die Jobprotokolle aus dem Protokollverzeichnis: 

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

 Reichen Sie als Nächstes einen Job mit diesem Job-Bundle ein. Nachdem der Worker in Ihren CloudShell Läufen ausgeführt wurde, schauen Sie sich die Logs an: 

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

 Das Protokoll zeigt, dass eine Datei als Ausgabe erkannt und auf Amazon S3 hochgeladen wurde: 

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

 Das Protokoll zeigt auch, dass Deadline Cloud ein neues Manifest-Objekt im Amazon S3 S3-Bucket erstellt hat, das für die Verwendung durch Jobanhänge in der Warteschlange konfiguriert ist`Q1`. Der Name des Manifest-Objekts wird von der Farm, der Warteschlange, dem Job, dem Schritt, der Aufgabe, dem Zeitstempel und den `sessionaction` Bezeichnern der Aufgabe abgeleitet, die die Ausgabe generiert hat. Laden Sie diese Manifestdatei herunter, um zu sehen, wo Deadline Cloud die Ausgabedateien für diese Aufgabe abgelegt hat: 

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

 Das Manifest sieht wie folgt aus: 

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

 Dies zeigt, dass der Inhalt der Ausgabedatei auf die gleiche Weise in Amazon S3 gespeichert wird wie Jobeingabedateien. Ähnlich wie Eingabedateien wird die Ausgabedatei in S3 mit einem Objektnamen gespeichert, der den Hash der Datei und das Präfix enthält`DeadlineCloud/Data`. 

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

 Sie können die Ausgabe eines Jobs mit dem Deadline Cloud-Monitor oder der Deadline Cloud-CLI auf Ihre Workstation herunterladen: 

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

 Der Wert des `OutputDir` Job-Parameters im übermittelten Job ist`./output_dir`, sodass die Ausgabe in ein Verzeichnis heruntergeladen wird, das `output_dir` innerhalb des Job-Bundle-Verzeichnisses aufgerufen wird. Wenn Sie einen absoluten Pfad oder einen anderen relativen Speicherort als Wert für angegeben haben`OutputDir`, würden die Ausgabedateien stattdessen an diesen Speicherort heruntergeladen. 

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

# Dateien aus einem Schritt in einem abhängigen Schritt verwenden
<a name="using-files-output-from-a-step-in-a-dependent-step"></a>

Dieses Beispiel zeigt, wie ein Schritt in einem Job auf die Ausgaben eines Schritts zugreifen kann, von dem er im selben Job abhängt. 

 Um die Ergebnisse eines Schritts für einen anderen verfügbar zu machen, fügt Deadline Cloud einer Sitzung zusätzliche Aktionen hinzu, um diese Ausgaben herunterzuladen, bevor Aufgaben in der Sitzung ausgeführt werden. Sie teilen ihr mit, aus welchen Schritten die Ausgaben heruntergeladen werden sollen, indem Sie diese Schritte als Abhängigkeiten des Schritts deklarieren, der die Ausgaben verwenden muss. 

Verwenden Sie das `job_attachments_devguide_output` Job-Bundle für dieses Beispiel. Erstellen Sie zunächst in Ihrer AWS CloudShell Umgebung eine Kopie von Ihrem Klon des Deadline GitHub Cloud-Beispiel-Repositorys. Ändern Sie ihn, um einen abhängigen Schritt hinzuzufügen, der erst nach dem vorhandenen Schritt ausgeführt wird und die Ausgabe dieses Schritts verwendet: 

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

 Der mit diesem modifizierten Auftragspaket erstellte Job wird in zwei separaten Sitzungen ausgeführt, eine für die Aufgabe im Schritt „Schritt“ und dann eine zweite für die Aufgabe im Schritt "DependentStep“. 

Starten Sie zunächst den Deadline Cloud-Worker-Agent in einem CloudShell Tab. Lassen Sie alle zuvor eingereichten Jobs fertig laufen und löschen Sie dann die Job-Logs aus dem Logs-Verzeichnis: 

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

 Als Nächstes reichen Sie einen Job mit dem geänderten `job_attachments_devguide_output` Auftragspaket ein. Warten Sie, bis die Ausführung auf dem Worker in Ihrer CloudShell Umgebung abgeschlossen ist. Sehen Sie sich die Protokolle der beiden Sitzungen an: 

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

 Im Sitzungsprotokoll für die Aufgabe im genannten `DependentStep` Schritt werden zwei separate Download-Aktionen ausgeführt: 

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

 Bei der ersten Aktion wird die `script.sh` Datei heruntergeladen, die für den Schritt mit dem Namen „Schritt“ verwendet wurde. Bei der zweiten Aktion werden die Ausgaben aus diesem Schritt heruntergeladen. Deadline Cloud bestimmt, welche Dateien heruntergeladen werden sollen, indem das in diesem Schritt generierte Ausgabemanifest als Eingabemanifest verwendet wird. 

 Später im selben Protokoll können Sie die Ausgabe des Schritts "DependentStep„sehen: 

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