

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Deadline Cloud 如何選擇要上傳的檔案
<a name="how-job-attachments-decides-what-to-upload-to-amazon-s3"></a>

 任務附件視為上傳到 Amazon S3 做為任務輸入的檔案和目錄如下：
+  任務套件任務範本中定義之所有 `PATH`類型任務參數的值，`dataFlow`其值為 `IN`或 `INOUT`。
+  列為任務套件資產參考檔案中輸入的檔案和目錄。

 如果您提交的任務沒有儲存描述檔，則會上傳所有考慮上傳的檔案。如果您使用儲存描述檔提交任務，如果檔案位於儲存描述檔的 `SHARED`類型檔案系統位置，而這些位置也是佇列所需的檔案系統位置，則檔案不會上傳到 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
```

 接著，設定截止日期雲端 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/
```

當您提交任務時，截止日期 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 `SHARED` 操作，查看使用特定儲存設定檔提交之任務所考慮的檔案系統位置。 [GetStorageProfileForQueue ](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetStorageProfileForQueue.html) 若要查詢佇列`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
```