

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Usa archivos adjuntos de trabajo para compartir archivos
<a name="build-job-attachments"></a>

Usa los archivos *adjuntos de trabajo* para hacer que los archivos que no están en los directorios compartidos estén disponibles para tus trabajos y para capturar los archivos de salida si no están escritos en los directorios compartidos. Job attachments utiliza Amazon S3 para transferir archivos entre hosts. Los archivos se almacenan en depósitos de S3 y no es necesario cargar un archivo si su contenido no ha cambiado.

Debe usar adjuntos de trabajo cuando ejecute trabajos en [flotas administradas por el servicio](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/smf-manage.html), ya que los hosts no comparten las ubicaciones del sistema de archivos. Los adjuntos de trabajo también son útiles con [las flotas administradas por el cliente cuando los](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/manage-cmf.html) archivos de entrada o salida de un trabajo se almacenan en un sistema de archivos de red compartido, como cuando el [paquete de trabajos](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/submit-job-bundle.html) contiene scripts de shell o Python. 

 Cuando envía un paquete de trabajos con la [CLI de Deadline Cloud](https://pypi.org/project/deadline/) o un remitente de Deadline Cloud, los adjuntos de trabajos utilizan el perfil de almacenamiento del trabajo y las ubicaciones del sistema de archivos requeridas por la cola para identificar los archivos de entrada que no se encuentran en el host de un trabajador y que deben cargarse en Amazon S3 como parte del envío de trabajos. Estos perfiles de almacenamiento también ayudan a Deadline Cloud a identificar los archivos de salida en las ubicaciones de alojamiento de los trabajadores que deben cargarse en Amazon S3 para que estén disponibles en su estación de trabajo. 

 Los ejemplos de adjuntos de trabajo utilizan las configuraciones de granja, flota, colas y perfiles de almacenamiento desde [Ejemplo de infraestructura de proyecto](sample-project-infrastructure.md) y. [Perfiles de almacenamiento y mapeo de rutas](storage-profiles-and-path-mapping.md) Deberías revisar esas secciones antes que esta. 

En los ejemplos siguientes, utiliza un paquete de trabajos de muestra como punto de partida y, a continuación, lo modifica para explorar las funciones de Job Adjunt. Los paquetes de trabajos son la mejor forma de que sus trabajos utilicen adjuntos de trabajo. Combinan una plantilla de [trabajo de Open Job Description](https://github.com/OpenJobDescription/openjd-specifications/wiki) en un directorio con archivos adicionales que enumeran los archivos y directorios necesarios para los trabajos que utilizan el paquete de trabajos. Para obtener más información sobre los paquetes de trabajos, consulte[Plantillas Open Job Description (OpenJD) para Deadline Cloud](build-job-bundle.md).

# Envío de archivos con un trabajo
<a name="submitting-files-with-a-job"></a>

Con Deadline Cloud, puedes permitir que los flujos de trabajo accedan a los archivos de entrada que no están disponibles en las ubicaciones de los sistemas de archivos compartidos de los anfitriones de los trabajadores. Los adjuntos de trabajo permiten que los trabajos de renderización accedan a los archivos que se encuentran únicamente en la unidad de una estación de trabajo local o en un entorno de flota gestionado por el servicio. Al enviar un paquete de trabajos, puede incluir listas de los archivos y directorios de entrada necesarios para el trabajo. Deadline Cloud identifica estos archivos no compartidos, los carga desde la máquina local a Amazon S3 y los descarga en el host del trabajador. Agiliza el proceso de transferencia de los activos de entrada a los nodos de renderizado, lo que garantiza que todos los archivos necesarios estén accesibles para la ejecución distribuida de los trabajos.

Puede especificar los archivos de los trabajos directamente en el paquete de trabajos, utilizar los parámetros de la plantilla de trabajo que proporcione mediante variables de entorno o un script y utilizar el `assets_references` archivo del trabajo. Puede utilizar uno de estos métodos o una combinación de los tres. Puede especificar un perfil de almacenamiento para el paquete del trabajo de modo que solo cargue los archivos que se hayan modificado en la estación de trabajo local.

En esta sección, se utiliza un ejemplo de paquete de trabajos GitHub para demostrar cómo Deadline Cloud identifica los archivos del trabajo que va a cargar, cómo se organizan esos archivos en Amazon S3 y cómo se ponen a disposición de los anfitriones de los trabajadores que procesan sus trabajos. 

**Topics**
+ [Cómo carga Deadline Cloud los archivos a Amazon S3](what-job-attachments-uploads-to-amazon-s3.md)
+ [Cómo elige Deadline Cloud los archivos que desea cargar](how-job-attachments-decides-what-to-upload-to-amazon-s3.md)
+ [¿Cómo encuentran los trabajos los archivos de entrada adjuntos a los trabajos?](how-jobs-find-job-attachments-input-files.md)

# Cómo carga Deadline Cloud los archivos a Amazon S3
<a name="what-job-attachments-uploads-to-amazon-s3"></a>

En este ejemplo, se muestra cómo Deadline Cloud carga archivos desde su estación de trabajo o host de trabajo a Amazon S3 para poder compartirlos. Utiliza un paquete de trabajos de muestra GitHub y la CLI de Deadline Cloud para enviar los trabajos.

 Comience por clonar el [ GitHubrepositorio de muestras de Deadline Cloud](https://github.com/aws-deadline/deadline-cloud-samples) en su [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)entorno y, a continuación, copie el paquete de `job_attachments_devguide` trabajos en su directorio principal: 

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

 Instale la [CLI de Deadline Cloud](https://pypi.org/project/deadline/) para enviar paquetes de trabajos: 

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

 El paquete de `job_attachments_devguide` tareas consta de un solo paso con una tarea que ejecuta un script de shell en bash cuya ubicación en el sistema de archivos se transmite como parámetro del trabajo. La definición del parámetro de trabajo es: 

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

 El `IN` valor de la `dataFlow` propiedad indica a los adjuntos del trabajo que el valor del `ScriptFile` parámetro es una entrada para el trabajo. El valor de la `default` propiedad es una ubicación relativa al directorio del paquete de tareas, pero también puede ser una ruta absoluta. Esta definición de parámetro declara el `script.sh` archivo del directorio del paquete de trabajos como un archivo de entrada necesario para que se ejecute el trabajo. 

 A continuación, asegúrese de que la CLI de Deadline Cloud no tenga un perfil de almacenamiento configurado y, a continuación, envíe el trabajo a la cola`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/
```

 El resultado de la CLI de Deadline Cloud después de ejecutar este comando tiene el siguiente aspecto: 

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

Al enviar el trabajo, Deadline Cloud primero crea un hash del `script.sh` archivo y, a continuación, lo carga en Amazon S3. 

Deadline Cloud trata el depósito de S3 como almacenamiento direccionable por contenido. Los archivos se cargan en objetos de S3. El nombre del objeto se deriva de un hash del contenido del archivo. Si dos archivos tienen el mismo contenido, tienen el mismo valor hash independientemente de dónde estén ubicados los archivos o de su nombre. Este almacenamiento de contenido direccionable permite a Deadline Cloud evitar cargar un archivo si ya está disponible.

 Puede usar la [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) para ver los objetos que se cargaron en 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
```

 Se cargaron dos objetos en S3: 
+  `DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128`— El contenido de`script.sh`. El valor `87cb19095dd5d78fcaf56384ef0e6241` de la clave del objeto es el hash del contenido del archivo y la extensión `xxh128` indica que el valor hash se calculó como un [xxhash](https://xxhash.com/) de 128 bits. 
+  `DeadlineCloud/Manifests/<farm-id>/<queue-id>/Inputs/<guid>/a1d221c7fd97b08175b3872a37428e8c_input`— El objeto del manifiesto para el envío del trabajo. Los valores `<farm-id>` y `<guid>` son el identificador de la granja, el identificador de la cola y un valor hexadecimal aleatorio. `<queue-id>` El valor `a1d221c7fd97b08175b3872a37428e8c` de este ejemplo es un valor hash calculado a partir de la cadena`/home/cloudshell-user/job_attachments_devguide`, el directorio en el que se encuentra`script.sh`. 

 El objeto de manifiesto contiene la información de los archivos de entrada de una ruta raíz específica que se cargaron en S3 como parte del envío del trabajo. Descargue este archivo de manifiesto (`aws s3 cp s3://$Q1_S3_BUCKET/<objectname>`). Su contenido es similar al de: 

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

Esto indica que el archivo `script.sh` se ha cargado y el hash del contenido de ese archivo lo es`87cb19095dd5d78fcaf56384ef0e6241`. Este valor hash coincide con el valor del nombre del objeto`DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128`. Deadline Cloud lo utiliza para saber qué objeto descargar para el contenido de este archivo.

 El esquema completo de este archivo está [disponible en GitHub](https://github.com/aws-deadline/deadline-cloud/blob/mainline/src/deadline/job_attachments/asset_manifests/v2023_03_03/validate.py). 

Al utilizar la [CreateJob operación](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_CreateJob.html), puede establecer la ubicación de los objetos del manifiesto. Puedes usar la [GetJoboperación](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html) para ver la ubicación: 

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

# Cómo elige Deadline Cloud los archivos que desea cargar
<a name="how-job-attachments-decides-what-to-upload-to-amazon-s3"></a>

 Los archivos y directorios que job attachments considera para cargar en Amazon S3 como entradas para su trabajo son: 
+  Los valores de todos los parámetros `PATH` de trabajo de tipo definido en la plantilla de trabajo del paquete de trabajos con un `dataFlow` valor de `IN` o`INOUT`.
+  Los archivos y directorios que aparecen como entradas en el archivo de referencias de activos del paquete de trabajos. 

 Si envía un trabajo sin perfil de almacenamiento, se cargarán todos los archivos que desee cargar. Si envía un trabajo con un perfil de almacenamiento, los archivos no se cargan en Amazon S3 si se encuentran en ubicaciones de sistema de archivos `SHARED` tipo perfil de almacenamiento que también son ubicaciones de sistema de archivos obligatorias para la cola. Se espera que estas ubicaciones estén disponibles en los hosts de trabajo que ejecutan el trabajo, por lo que no es necesario cargarlas en S3. 

 En este ejemplo, crea ubicaciones de sistemas de `SHARED` archivos `WSAll` en su CloudShell entorno de AWS y, a continuación, añade archivos a esas ubicaciones de sistemas de archivos. Utilice el siguiente comando : 

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

 A continuación, añada un archivo de referencias de activos al paquete de trabajos que incluya todos los archivos que creó como entradas para el trabajo. Utilice el siguiente comando : 

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

 A continuación, configure la CLI de Deadline Cloud para enviar los trabajos con el perfil de `WSAll` almacenamiento y, a continuación, envíe el paquete de trabajos: 

```
# 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 carga dos archivos a Amazon S3 cuando envías el trabajo. Puede descargar los objetos del manifiesto del trabajo desde S3 para ver los archivos cargados: 

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

 En este ejemplo, hay un único archivo de manifiesto con el siguiente contenido: 

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

 Usa la [GetJob operación](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html) del manifiesto para comprobar que `rootPath` es «/». 

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

 La ruta raíz del conjunto de archivos de entrada es siempre la subruta común más larga de esos archivos. Si el trabajo se envió desde, Windows en cambio, y hay archivos de entrada que no tienen una subruta común porque se encuentran en unidades diferentes, verá una ruta raíz independiente en cada unidad. Las rutas de un manifiesto siempre son relativas a la ruta raíz del manifiesto, por lo que los archivos de entrada que se cargaron son los siguientes: 
+  `/home/cloudshell-user/job_attachments_devguide/script.sh`— El archivo de script del paquete de tareas. 
+  `/shared/projects/project2/file.txt`— El archivo en una ubicación del sistema de `SHARED` archivos del perfil `WSAll` de almacenamiento que **no** figura en la lista de ubicaciones de sistemas de archivos obligatorias para la cola`Q1`. 

Los archivos en las ubicaciones del sistema de archivos `FSCommon` (`/shared/common/file.txt`) y `FS1` (`/shared/projects/project1/file.txt`) no están en la lista. Esto se debe a que esas ubicaciones del sistema de archivos están `SHARED` en el perfil de `WSAll` almacenamiento y ambas están en la lista de ubicaciones obligatorias del sistema de archivos en cola`Q1`. 

Con la [GetStorageProfileForQueue operación](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetStorageProfileForQueue.html), puede ver las ubicaciones de los sistemas de archivos consideradas `SHARED` para un trabajo que se envía con un perfil de almacenamiento determinado. Para consultar el perfil de almacenamiento `WSAll` de la cola, `Q1` utilice el siguiente comando: 

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

# ¿Cómo encuentran los trabajos los archivos de entrada adjuntos a los trabajos?
<a name="how-jobs-find-job-attachments-input-files"></a>

 Para que un trabajo utilice los archivos que Deadline Cloud carga en Amazon S3 mediante adjuntos de trabajo, su trabajo necesita esos archivos disponibles a través del sistema de archivos de los hosts de los trabajadores. Cuando una [sesión](https://github.com/OpenJobDescription/openjd-specifications/wiki/How-Jobs-Are-Run#sessions) de tu trabajo se ejecuta en el host de un trabajador, Deadline Cloud descarga los archivos de entrada del trabajo en un directorio temporal de la unidad local del anfitrión del trabajador y añade reglas de mapeo de rutas para cada una de las rutas raíz del trabajo a la ubicación del sistema de archivos en la unidad local. 

 Para este ejemplo, inicie el agente de trabajo de Deadline Cloud en una CloudShell pestaña de AWS. Deje que los trabajos enviados anteriormente terminen de ejecutarse y, a continuación, elimine los registros de trabajos del directorio de registros: 

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

 El siguiente script modifica el paquete de trabajos para mostrar todos los archivos del directorio de trabajo temporal de la sesión y el contenido del archivo de reglas de mapeo de rutas y, a continuación, envía un trabajo con el paquete modificado: 

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

 Puede consultar el registro de la ejecución de la tarea después de que la haya ejecutado el trabajador de su AWS CloudShell entorno: 

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

El registro muestra que lo primero que ocurre en la sesión es que los dos archivos de entrada del trabajo se descargan al trabajador: 

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

 El siguiente es el resultado de `script.sh` run by the job: 
+  Los archivos de entrada que se cargaron al enviar el trabajo se encuentran en un directorio cuyo nombre comienza por «assetroot» en el directorio temporal de la sesión. 
+  Las rutas de los archivos de entrada se han reubicado en relación con el directorio «assetroot» en lugar de en relación con la ruta raíz del manifiesto de entrada () del trabajo. `"/"`
+  El archivo de reglas de mapeo de rutas contiene una regla adicional que se reasigna `"/"` a la ruta absoluta del directorio «assetroot». 

 Por ejemplo: 

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

**nota**  
 Si el trabajo que envías tiene varios manifiestos con diferentes rutas raíz, habrá un directorio con el nombre «assetroot» diferente para cada una de las rutas raíz. 

 Si necesita hacer referencia a la ubicación del sistema de archivos reubicado de uno de sus archivos de entrada, directorios o ubicaciones del sistema de archivos, puede procesar el archivo de reglas de mapeo de rutas en su trabajo y realizar la reasignación usted mismo, o agregar un parámetro de trabajo de `PATH` tipo a la plantilla de trabajo en su paquete de trabajos y pasar el valor que necesita reasignar como valor de ese parámetro. Por ejemplo, el ejemplo siguiente modifica el paquete de trabajos para que tenga uno de estos parámetros de trabajo y, a continuación, envía un trabajo con la ubicación del sistema de archivos `/shared/projects/project2` como valor: 

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

 El archivo de registro de la ejecución de este trabajo contiene el resultado: 

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

# Obtener los archivos de salida de un trabajo
<a name="getting-output-files-from-a-job"></a>

En este ejemplo, se muestra cómo Deadline Cloud identifica los archivos de salida que generan sus trabajos, decide si los carga en Amazon S3 y cómo puede colocarlos en su estación de trabajo. 

 En este ejemplo, utilice el `job_attachments_devguide_output` paquete de `job_attachments_devguide` trabajos en lugar del paquete de trabajos. Comience por hacer una copia del paquete en su AWS CloudShell entorno a partir de su clon del GitHub repositorio de muestras de Deadline Cloud: 

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

 La diferencia importante entre este paquete de trabajos y el paquete de `job_attachments_devguide` trabajos es la adición de un nuevo parámetro de trabajo en la plantilla de trabajo: 

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

 La `dataFlow` propiedad del parámetro tiene el valor`OUT`. Deadline Cloud utiliza el valor de los parámetros del `dataFlow` trabajo con un valor `INOUT` igual `OUT` o como resultados de su trabajo. Si la ubicación del sistema de archivos transferida como valor a este tipo de parámetros de trabajo se reasigna a una ubicación del sistema de archivos local del trabajador que ejecuta el trabajo, Deadline Cloud buscará nuevos archivos en la ubicación y los cargará en Amazon S3 como resultados del trabajo. 

 Para ver cómo funciona, primero inicia el agente de trabajadores de Deadline Cloud en una AWS CloudShell pestaña. Deje que los trabajos enviados anteriormente terminen de ejecutarse. A continuación, elimine los registros de trabajos del directorio de registros: 

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

 A continuación, envíe un trabajo con este paquete de trabajos. Después de que el trabajador CloudShell ejecute sus ejecuciones, observe los registros: 

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

 El registro muestra que se detectó un archivo como salida y se cargó en 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.
```

 El registro también muestra que Deadline Cloud creó un nuevo objeto de manifiesto en el bucket de Amazon S3 configurado para que lo usen los adjuntos de trabajos en cola`Q1`. El nombre del objeto de manifiesto se deriva de la granja, la cola, el trabajo, el paso, la tarea, la marca de tiempo y los `sessionaction` identificadores de la tarea que generó el resultado. Descarga este archivo de manifiesto para ver dónde ha colocado Deadline Cloud los archivos de salida para esta tarea: 

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

 El manifiesto tiene este aspecto: 

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

 Esto muestra que el contenido del archivo de salida se guarda en Amazon S3 de la misma manera que se guardan los archivos de entrada del trabajo. Al igual que los archivos de entrada, el archivo de salida se almacena en S3 con un nombre de objeto que contiene el hash del archivo y el prefijo`DeadlineCloud/Data`. 

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

 Puede descargar el resultado de un trabajo a su estación de trabajo mediante el monitor de Deadline Cloud o la CLI de Deadline Cloud: 

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

 El valor del parámetro del `OutputDir` trabajo en el trabajo enviado es`./output_dir`, por lo que los resultados se descargan a un directorio llamado `output_dir` dentro del directorio del paquete de trabajos. Si especificó una ruta absoluta o una ubicación relativa diferente como valor`OutputDir`, los archivos de salida se descargarán en esa ubicación. 

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

# Utilizar archivos de un paso en un paso dependiente
<a name="using-files-output-from-a-step-in-a-dependent-step"></a>

Este ejemplo muestra cómo un paso de un trabajo puede acceder a los resultados de un paso del que depende en el mismo trabajo. 

 Para que los resultados de un paso estén disponibles para otro, Deadline Cloud añade acciones adicionales a una sesión para descargar esos resultados antes de ejecutar tareas en la sesión. Para indicarle de qué pasos debe descargar los resultados, debe declarar esos pasos como dependencias del paso que debe utilizar los resultados. 

Utilice el paquete de `job_attachments_devguide_output` tareas para este ejemplo. Comience por hacer una copia en su AWS CloudShell entorno desde su clon del GitHub repositorio de muestras de Deadline Cloud. Modifíquelo para añadir un paso dependiente que solo se ejecute después del paso existente y utilice el resultado de ese paso: 

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

 El trabajo creado con este paquete de trabajos modificado se ejecuta en dos sesiones independientes, una para la tarea del paso «Paso» y otra para la tarea del paso «DependentStep». 

Primero, inicie el agente de trabajo de Deadline Cloud en una CloudShell pestaña. Deje que los trabajos enviados anteriormente terminen de ejecutarse y, a continuación, elimine los registros de trabajos del directorio de registros: 

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

 A continuación, envíe un trabajo con el paquete de `job_attachments_devguide_output` trabajos modificado. Espere a que termine de ejecutarse en el trabajador de su CloudShell entorno. Observe los registros de las dos sesiones: 

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

 En el registro de sesiones de la tarea del paso mencionado`DependentStep`, se ejecutan dos acciones de descarga independientes: 

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

 La primera acción descarga el `script.sh` archivo utilizado por el paso denominado «Paso». La segunda acción descarga los resultados de ese paso. Deadline Cloud determina qué archivos descargar utilizando el manifiesto de salida generado en ese paso como manifiesto de entrada. 

 Al final del mismo registro, puedes ver el resultado del paso denominado "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
```