

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Deadline Cloud 如何选择要上传的文件
<a name="how-job-attachments-decides-what-to-upload-to-amazon-s3"></a>

 任务附件考虑上传到 Amazon S3 作为任务输入的文件和目录是：
+  在作业捆绑包的作业模板中定义的所有 `PATH`-type 作业参数的值，其`dataFlow`值为`IN`或`INOUT`。
+  在作业捆绑包的资产引用文件中作为输入列出的文件和目录。

 如果您提交的工作没有存储配置文件，则会上传所有考虑上传的文件。如果您提交带有存储配置文件的任务，则如果文件位于存储配置文件的 `SHARED`-type 文件系统位置，而这些位置也是队列所需的文件系统位置，则不会将其上传到 Amazon S3。这些位置预计将在运行任务的工作服务器主机上可用，因此无需将其上传到 S3。

 在此示例中，您在 AWS CloudShell 环境`WSAll`中创建`SHARED`文件系统位置，然后将文件添加到这些文件系统位置。使用以下命令：

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

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

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

 接下来，将资产引用文件添加到作业捆绑包中，该文件包含您作为作业输入创建的所有文件。使用以下命令：

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

 接下来，将 Deadline Cloud CLI 配置为使用`WSAll`存储配置文件提交作业，然后提交任务捆绑包：

```
# 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 会将两个文件上传到 Amazon S3。您可以从 S3 下载任务的清单对象以查看上传的文件：

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

 在此示例中，有一个包含以下内容的清单文件：

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

 使用清单的[GetJob 操作](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html)可以查看是否`rootPath`为 “/”。

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

 一组输入文件的根路径始终是这些文件中最长的公共子路径。如果您的作业是从中提交的，并且由于输入文件位于不同的驱动器上Windows而没有公共子路径，则您会在每个驱动器上看到一个单独的根路径。清单中的路径始终相对于清单的根路径，因此上传的输入文件为：
+  `/home/cloudshell-user/job_attachments_devguide/script.sh`— 作业包中的脚本文件。
+  `/shared/projects/project2/file.txt`— `WSAll` 存储配置`SHARED`文件中文件系统位置中**不**在队列所需文件系统位置列表中的文件`Q1`。

文件系统位置 `FSCommon` (`/shared/common/file.txt`) 和 `FS1` (`/shared/projects/project1/file.txt`) 中的文件不在列表中。这是因为这些文件系统位置位于`WSAll`存储配置文件`SHARED`中，并且都在队列中所需的文件系统位置列表中`Q1`。

您可以看到在操作中使用特定存储配置文件提交的[GetStorageProfileForQueue 作业](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetStorageProfileForQueue.html)所考虑`SHARED`的文件系统位置。要查询队列`WSAll`的存储配置文件，`Q1`请使用以下命令：

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

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