

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Use anexos de trabalho para compartilhar arquivos
<a name="build-job-attachments"></a>

Use *anexos de tarefas* para disponibilizar arquivos que não estão em diretórios compartilhados para suas tarefas e para capturar os arquivos de saída se eles não estiverem gravados em diretórios compartilhados. Job attachments usa o Amazon S3 para transferir arquivos entre hosts. Os arquivos são armazenados em buckets do S3 e você não precisa fazer upload de um arquivo se o conteúdo não tiver sido alterado.

Você deve usar anexos de trabalho ao executar trabalhos em [frotas gerenciadas por serviços, pois os](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/smf-manage.html) hosts não compartilham os locais do sistema de arquivos. Os anexos de trabalho também são úteis com [frotas gerenciadas pelo cliente quando os](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/manage-cmf.html) arquivos de entrada ou saída de um trabalho são armazenados em um sistema de arquivos de rede compartilhado, como quando seu pacote de [trabalhos contém scripts shell ou Python](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/submit-job-bundle.html). 

 Quando você envia um pacote de trabalhos com a [CLI do Deadline Cloud](https://pypi.org/project/deadline/) ou com um remetente do Deadline Cloud, os anexos do trabalho usam o perfil de armazenamento do trabalho e os locais necessários do sistema de arquivos da fila para identificar os arquivos de entrada que não estão em um host de trabalho e devem ser enviados para o Amazon S3 como parte do envio do trabalho. Esses perfis de armazenamento também ajudam o Deadline Cloud a identificar os arquivos de saída nos locais de hospedagem dos trabalhadores que devem ser carregados no Amazon S3 para que estejam disponíveis em sua estação de trabalho. 

 Os exemplos de anexos de trabalho usam as configurações de fazenda, frota, filas e perfis de armazenamento de e. [Exemplo de infraestrutura de projeto](sample-project-infrastructure.md) [Perfis de armazenamento e mapeamento de caminhos](storage-profiles-and-path-mapping.md) Você deve passar por essas seções antes desta. 

Nos exemplos a seguir, você usa um pacote de tarefas de amostra como ponto de partida e, em seguida, o modifica para explorar a funcionalidade do anexo de tarefas. Pacotes de tarefas são a melhor maneira de seus trabalhos usarem anexos de trabalho. Eles combinam um modelo de [trabalho do Open Job Description](https://github.com/OpenJobDescription/openjd-specifications/wiki) em um diretório com arquivos adicionais que listam os arquivos e diretórios exigidos pelos trabalhos que usam o pacote de trabalhos. Para obter mais informações sobre pacotes de tarefas, consulte[Modelos de Open Job Description (OpenJD) para Deadline Cloud](build-job-bundle.md).

# Enviando arquivos com um trabalho
<a name="submitting-files-with-a-job"></a>

Com o Deadline Cloud, você pode permitir que os fluxos de trabalho acessem arquivos de entrada que não estão disponíveis em locais de sistemas de arquivos compartilhados em hosts de trabalho. Os anexos de tarefas permitem que as tarefas de renderização acessem arquivos que residem somente em uma unidade de estação de trabalho local ou em um ambiente de frota gerenciado por serviços. Ao enviar um pacote de tarefas, você pode incluir listas de arquivos de entrada e diretórios exigidos pelo trabalho. O Deadline Cloud identifica esses arquivos não compartilhados, os carrega da máquina local para o Amazon S3 e os baixa para o host do trabalhador. Ele simplifica o processo de transferência de ativos de entrada para os nós de renderização, garantindo que todos os arquivos necessários estejam acessíveis para execução distribuída de trabalhos.

Você pode especificar os arquivos para trabalhos diretamente no pacote de trabalhos, usar parâmetros no modelo de trabalho que você fornece usando variáveis de ambiente ou um script e usar o `assets_references` arquivo do trabalho. Você pode usar um desses métodos ou uma combinação dos três. Você pode especificar um perfil de armazenamento para o pacote do trabalho para que ele carregue somente os arquivos que foram alterados na estação de trabalho local.

Esta seção usa um exemplo de pacote de tarefas GitHub para demonstrar como o Deadline Cloud identifica os arquivos em seu trabalho para upload, como esses arquivos são organizados no Amazon S3 e como são disponibilizados para os hosts de trabalho que processam seus trabalhos. 

**Topics**
+ [Como o Deadline Cloud carrega arquivos para o Amazon S3](what-job-attachments-uploads-to-amazon-s3.md)
+ [Como o Deadline Cloud escolhe os arquivos a serem enviados](how-job-attachments-decides-what-to-upload-to-amazon-s3.md)
+ [Como os trabalhos encontram arquivos de entrada de anexos de trabalhos](how-jobs-find-job-attachments-input-files.md)

# Como o Deadline Cloud carrega arquivos para o Amazon S3
<a name="what-job-attachments-uploads-to-amazon-s3"></a>

Este exemplo mostra como o Deadline Cloud carrega arquivos da sua estação de trabalho ou host de trabalho para o Amazon S3 para que eles possam ser compartilhados. Ele usa um pacote de tarefas de amostra GitHub e a CLI do Deadline Cloud para enviar trabalhos.

 Comece clonando o [ GitHubrepositório de amostras do Deadline Cloud](https://github.com/aws-deadline/deadline-cloud-samples) em seu [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)ambiente e, em seguida, copie o pacote de `job_attachments_devguide` tarefas em seu diretório inicial: 

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

 Instale a [CLI do Deadline Cloud](https://pypi.org/project/deadline/) para enviar pacotes de tarefas: 

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

 O pacote de `job_attachments_devguide` tarefas tem uma única etapa com uma tarefa que executa um script bash shell cujo local do sistema de arquivos é passado como um parâmetro do trabalho. A definição do parâmetro do trabalho é: 

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

 O `IN` valor da `dataFlow` propriedade informa aos anexos do trabalho que o valor do `ScriptFile` parâmetro é uma entrada para o trabalho. O valor da `default` propriedade é um local relativo ao diretório do pacote de tarefas, mas também pode ser um caminho absoluto. Essa definição de parâmetro declara o `script.sh` arquivo no diretório do pacote de tarefas como um arquivo de entrada necessário para a execução da tarefa. 

 Em seguida, certifique-se de que a CLI do Deadline Cloud não tenha um perfil de armazenamento configurado e envie o trabalho para a fila: `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/
```

 A saída da CLI do Deadline Cloud após a execução desse comando é semelhante a: 

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

Quando você envia o trabalho, o Deadline Cloud primeiro faz o hash do `script.sh` arquivo e depois o carrega para o Amazon S3. 

O Deadline Cloud trata o bucket S3 como armazenamento endereçável ao conteúdo. Os arquivos são enviados para objetos do S3. O nome do objeto é derivado de um hash do conteúdo do arquivo. Se dois arquivos tiverem conteúdos idênticos, eles terão o mesmo valor de hash, independentemente de onde os arquivos estejam localizados ou do nome que tenham. Esse armazenamento endereçável por conteúdo permite que o Deadline Cloud evite o upload de um arquivo se ele já estiver disponível.

 Você pode usar a [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) para ver os objetos que foram enviados para o 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
```

 Dois objetos foram enviados para o S3: 
+  `DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128`— O conteúdo do`script.sh`. [O valor `87cb19095dd5d78fcaf56384ef0e6241` na chave do objeto é o hash do conteúdo do arquivo, e a extensão `xxh128` indica que o valor do hash foi calculado como um xxhash de 128 bits.](https://xxhash.com/) 
+  `DeadlineCloud/Manifests/<farm-id>/<queue-id>/Inputs/<guid>/a1d221c7fd97b08175b3872a37428e8c_input`— O objeto manifesto para o envio do trabalho. Os valores `<farm-id>``<queue-id>`, e `<guid>` são o identificador da fazenda, o identificador da fila e um valor hexidecimal aleatório. O valor `a1d221c7fd97b08175b3872a37428e8c` neste exemplo é um valor de hash calculado a partir da string`/home/cloudshell-user/job_attachments_devguide`, o diretório em que `script.sh` está localizado. 

 O objeto de manifesto contém as informações dos arquivos de entrada em um caminho raiz específico carregado no S3 como parte do envio do trabalho. Baixe esse arquivo de manifesto (`aws s3 cp s3://$Q1_S3_BUCKET/<objectname>`). Seu conteúdo é semelhante a: 

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

Isso indica que o arquivo `script.sh` foi carregado e o hash do conteúdo desse arquivo é`87cb19095dd5d78fcaf56384ef0e6241`. Esse valor de hash corresponde ao valor no nome `DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128` do objeto. Ele é usado pelo Deadline Cloud para saber qual objeto baixar para o conteúdo desse arquivo.

 O esquema completo desse arquivo está [disponível em GitHub](https://github.com/aws-deadline/deadline-cloud/blob/mainline/src/deadline/job_attachments/asset_manifests/v2023_03_03/validate.py). 

Ao usar a [CreateJob operação](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_CreateJob.html), você pode definir a localização dos objetos do manifesto. Você pode usar a [GetJoboperação](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html) para ver a localização: 

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

# Como o Deadline Cloud escolhe os arquivos a serem enviados
<a name="how-job-attachments-decides-what-to-upload-to-amazon-s3"></a>

 Os arquivos e diretórios que os anexos de trabalho consideram para serem carregados no Amazon S3 como entradas para seu trabalho são: 
+  Os valores de todos os parâmetros `PATH` de trabalho do tipo definidos no modelo de trabalho do pacote de tarefas com um `dataFlow` valor de `IN` ou. `INOUT`
+  Os arquivos e diretórios listados como entradas no arquivo de referências de ativos do pacote de tarefas. 

 Se você enviar um trabalho sem perfil de armazenamento, todos os arquivos considerados para envio serão enviados. Se você enviar um trabalho com um perfil de armazenamento, os arquivos não serão enviados para o Amazon S3 se estiverem localizados nos locais do sistema de arquivos do `SHARED` tipo do perfil de armazenamento, que também são locais obrigatórios do sistema de arquivos para a fila. Espera-se que esses locais estejam disponíveis nos hosts de trabalho que executam o trabalho, portanto, não há necessidade de carregá-los para o S3. 

 Neste exemplo, você cria locais do sistema de `SHARED` arquivos `WSAll` em seu CloudShell ambiente da AWS e, em seguida, adiciona arquivos a esses locais do sistema de arquivos. Use o seguinte 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
```

 Em seguida, adicione um arquivo de referências de ativos ao pacote de tarefas que inclua todos os arquivos que você criou como entradas para o trabalho. Use o seguinte 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
```

 Em seguida, configure a CLI do Deadline Cloud para enviar trabalhos com o perfil `WSAll` de armazenamento e, em seguida, envie o pacote de trabalhos: 

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

O Deadline Cloud carrega dois arquivos para o Amazon S3 quando você envia o trabalho. Você pode baixar os objetos de manifesto do trabalho do S3 para ver os arquivos enviados: 

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

 Neste exemplo, há um único arquivo de manifesto com o seguinte conteúdo: 

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

 Use a [GetJob operação](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html) do manifesto para ver se `rootPath` é “/”. 

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

 O caminho raiz para o conjunto de arquivos de entrada é sempre o subcaminho comum mais longo desses arquivos. Se o seu trabalho foi enviado pelo Windows Instead e há arquivos de entrada sem um subcaminho comum porque eles estavam em unidades diferentes, você verá um caminho raiz separado em cada unidade. Os caminhos em um manifesto são sempre relativos ao caminho raiz do manifesto, então os arquivos de entrada que foram carregados são: 
+  `/home/cloudshell-user/job_attachments_devguide/script.sh`— O arquivo de script no pacote de tarefas. 
+  `/shared/projects/project2/file.txt`— O arquivo em um local do sistema de `SHARED` arquivos no perfil `WSAll` de armazenamento que **não** está na lista de locais necessários do sistema de arquivos para a fila`Q1`. 

Os arquivos nos locais do sistema de arquivos `FSCommon` (`/shared/common/file.txt`) e `FS1` (`/shared/projects/project1/file.txt`) não estão na lista. Isso ocorre porque esses locais do sistema de arquivos estão `SHARED` no perfil `WSAll` de armazenamento e ambos estão na lista de locais necessários do sistema de arquivos na fila`Q1`. 

Você pode ver os locais do sistema de arquivos considerados `SHARED` para um trabalho que é enviado com um perfil de armazenamento específico com a [GetStorageProfileForQueue operação](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetStorageProfileForQueue.html). Para consultar o perfil de armazenamento `WSAll` para fila, `Q1` use o seguinte 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
```

# Como os trabalhos encontram arquivos de entrada de anexos de trabalhos
<a name="how-jobs-find-job-attachments-input-files"></a>

 Para que um trabalho use os arquivos que o Deadline Cloud carrega para o Amazon S3 usando anexos de trabalho, seu trabalho precisa desses arquivos disponíveis por meio do sistema de arquivos nos hosts do trabalhador. Quando uma [sessão](https://github.com/OpenJobDescription/openjd-specifications/wiki/How-Jobs-Are-Run#sessions) do seu trabalho é executada em um host de trabalho, o Deadline Cloud baixa os arquivos de entrada do trabalho em um diretório temporário na unidade local do host de trabalho e adiciona regras de mapeamento de caminhos para cada um dos caminhos raiz do trabalho na localização do sistema de arquivos na unidade local. 

 Neste exemplo, inicie o agente Deadline Cloud Worker em uma CloudShell guia da AWS. Deixe que todos os trabalhos enviados anteriormente terminem de ser executados e, em seguida, exclua os registros de trabalhos do diretório de registros: 

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

 O script a seguir modifica o pacote de tarefas para mostrar todos os arquivos no diretório de trabalho temporário da sessão e o conteúdo do arquivo de regras de mapeamento de caminhos e, em seguida, envia uma tarefa com o pacote 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/
```

 Você pode ver o registro da execução do trabalho após ele ter sido executado pelo trabalhador em seu AWS CloudShell ambiente: 

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

O registro mostra que a primeira coisa que ocorre na sessão é que os dois arquivos de entrada do trabalho são baixados para o trabalhador: 

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

 A seguir está a saída de `script.sh` run by the job: 
+  Os arquivos de entrada enviados quando o trabalho foi enviado estão localizados em um diretório cujo nome começa com “assetroot” no diretório temporário da sessão. 
+  Os caminhos dos arquivos de entrada foram realocados em relação ao diretório “assetroot” em vez de em relação ao caminho raiz do manifesto de entrada () do trabalho. `"/"`
+  O arquivo de regras de mapeamento de caminhos contém uma regra adicional que é remapeada `"/"` para o caminho absoluto do diretório “assetroot”. 

 Por exemplo: 

```
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**  
 Se o trabalho que você enviar tiver vários manifestos com caminhos raiz diferentes, há um diretório com o nome “assetroot” diferente para cada um dos caminhos raiz. 

 Se precisar referenciar a localização do sistema de arquivos realocado de um dos seus arquivos de entrada, diretórios ou localizações do sistema de arquivos, você pode processar o arquivo de regras de mapeamento de caminhos em sua tarefa e realizar o remapeamento sozinho, ou adicionar um parâmetro de `PATH` tipo de tarefa ao modelo de tarefa em seu pacote de tarefas e passar o valor que você precisa remapear como o valor desse parâmetro. Por exemplo, o exemplo a seguir modifica o pacote de tarefas para ter um desses parâmetros de tarefa e, em seguida, envia uma tarefa com a localização `/shared/projects/project2` do sistema de arquivos como seu 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
```

 O arquivo de log para a execução desse trabalho contém sua saída: 

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

# Obtendo arquivos de saída de um trabalho
<a name="getting-output-files-from-a-job"></a>

Este exemplo mostra como o Deadline Cloud identifica os arquivos de saída que seus trabalhos geram, decide se deseja fazer o upload desses arquivos para o Amazon S3 e como você pode obter esses arquivos de saída em sua estação de trabalho. 

 Use o pacote de `job_attachments_devguide_output` tarefas em vez do pacote de `job_attachments_devguide` tarefas para este exemplo. Comece fazendo uma cópia do pacote em seu AWS CloudShell ambiente a partir do seu clone do repositório de amostras GitHub do Deadline Cloud: 

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

 A diferença importante entre esse pacote de tarefas e o pacote de `job_attachments_devguide` tarefas é a adição de um novo parâmetro de tarefa no modelo de tarefa: 

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

 A `dataFlow` propriedade do parâmetro tem o valor`OUT`. O Deadline Cloud usa o valor dos parâmetros do `dataFlow` trabalho com um valor de `OUT` ou `INOUT` como resultados do seu trabalho. Se a localização do sistema de arquivos passada como um valor para esses tipos de parâmetros de trabalho for remapeada para uma localização do sistema de arquivos local no trabalhador que executa o trabalho, o Deadline Cloud procurará novos arquivos no local e os enviará para o Amazon S3 como resultados do trabalho. 

 Para ver como isso funciona, primeiro inicie o agente do Deadline Cloud Worker em uma AWS CloudShell guia. Permita que todos os trabalhos enviados anteriormente terminem de ser executados. Em seguida, exclua os registros de tarefas do diretório de registros: 

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

 Em seguida, envie um trabalho com esse pacote de trabalhos. Depois que o trabalhador estiver executando suas CloudShell execuções, veja os 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
```

 O registro mostra que um arquivo foi detectado como saída e carregado no 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.
```

 O registro também mostra que o Deadline Cloud criou um novo objeto de manifesto no bucket do Amazon S3 configurado para uso por anexos de trabalho na fila. `Q1` O nome do objeto manifesto é derivado do farm, da fila, do trabalho, da etapa, da tarefa, do carimbo de data/hora e dos `sessionaction` identificadores da tarefa que gerou a saída. Baixe esse arquivo de manifesto para ver onde o Deadline Cloud colocou os arquivos de saída para essa tarefa: 

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

 O manifesto se parece com: 

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

 Isso mostra que o conteúdo do arquivo de saída é salvo no Amazon S3 da mesma forma que os arquivos de entrada do trabalho são salvos. Semelhante aos arquivos de entrada, o arquivo de saída é armazenado no S3 com um nome de objeto contendo o hash do arquivo e o prefixo. `DeadlineCloud/Data` 

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

 Você pode baixar a saída de um trabalho para sua estação de trabalho usando o monitor do Deadline Cloud ou a CLI do Deadline Cloud: 

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

 O valor do parâmetro do `OutputDir` trabalho no trabalho enviado é`./output_dir`, portanto, a saída é baixada para um diretório chamado `output_dir` dentro do diretório do pacote de trabalhos. Se você especificou um caminho absoluto ou um local relativo diferente como valor para`OutputDir`, os arquivos de saída seriam baixados para esse local. 

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

# Usando arquivos de uma etapa em uma etapa dependente
<a name="using-files-output-from-a-step-in-a-dependent-step"></a>

Este exemplo mostra como uma etapa em uma tarefa pode acessar as saídas de uma etapa da qual ela depende na mesma tarefa. 

 Para disponibilizar as saídas de uma etapa para outra, o Deadline Cloud adiciona ações adicionais a uma sessão para baixar essas saídas antes de executar tarefas na sessão. Você diz a ele de quais etapas fazer o download das saídas declarando essas etapas como dependências da etapa que precisa usar as saídas. 

Use o pacote de `job_attachments_devguide_output` tarefas para este exemplo. Comece fazendo uma cópia em seu AWS CloudShell ambiente a partir do seu clone do GitHub repositório de amostras do Deadline Cloud. Modifique-a para adicionar uma etapa dependente que só é executada após a etapa existente e usa a saída dessa etapa: 

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

 O trabalho criado com esse pacote de trabalhos modificado é executado como duas sessões separadas, uma para a tarefa na etapa “Etapa” e outra para a tarefa na etapa "DependentStep”. 

Primeiro, inicie o agente Deadline Cloud Worker em uma CloudShell guia. Deixe que todos os trabalhos enviados anteriormente terminem de ser executados e, em seguida, exclua os registros do trabalho do diretório de registros: 

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

 Em seguida, envie um trabalho usando o pacote de `job_attachments_devguide_output` trabalhos modificado. Espere até que ele termine de ser executado no trabalhador em seu CloudShell ambiente. Veja os registros das duas sessões: 

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

 No registro da sessão da tarefa na etapa denominada`DependentStep`, há duas ações de download separadas executadas: 

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

 A primeira ação baixa o `script.sh` arquivo usado pela etapa chamada “Etapa”. A segunda ação baixa as saídas dessa etapa. O Deadline Cloud determina quais arquivos baixar usando o manifesto de saída gerado por essa etapa como um manifesto de entrada. 

 Mais tarde, no mesmo registro, você pode ver a saída da etapa chamada "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
```