

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

# Deadline Cloud 如何將檔案上傳至 Amazon S3
<a name="what-job-attachments-uploads-to-amazon-s3"></a>

此範例顯示 Deadline Cloud 如何將檔案從工作站或工作者主機上傳至 Amazon S3，以便共用這些檔案。它使用來自 GitHub 和截止日期雲端 CLI 的範例任務套件來提交任務。

 首先將[截止期限雲端範例 GitHub 儲存庫](https://github.com/aws-deadline/deadline-cloud-samples)複製到您的[AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)環境，然後將`job_attachments_devguide`任務套件複製到您的主目錄：

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

 安裝[截止日期雲端 CLI](https://pypi.org/project/deadline/) 以提交任務套件：

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

 `job_attachments_devguide` 任務套件具有單一步驟，其中包含執行 bash shell 指令碼的任務，其檔案系統位置會以任務參數傳遞。任務參數的定義為：

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

 `dataFlow` 屬性`IN`的值會告知任務附件， `ScriptFile` 參數的值是任務的輸入。`default` 屬性的值是任務套件目錄的相對位置，但也可以是絕對路徑。此參數定義會將任務套件目錄中`script.sh`的檔案宣告為執行任務所需的輸入檔案。

 接下來，請確定截止日期雲端 CLI 未設定儲存設定檔，然後將任務提交至佇列 `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/
```

 在此命令執行後，來自截止日期雲端 CLI 的輸出如下所示：

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

當您提交任務時，截止日期雲端會先雜湊`script.sh`檔案，然後將其上傳至 Amazon S3。

Deadline Cloud 會將 S3 儲存貯體視為內容可定址儲存體。檔案會上傳至 S3 物件。物件名稱衍生自檔案內容的雜湊。如果兩個檔案具有相同的內容，則無論檔案位於何處或名稱為何，它們都具有相同的雜湊值。此內容可定址儲存可讓 Deadline Cloud 在檔案已可用時避免上傳檔案。

 您可以使用 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 來查看上傳至 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
```

 兩個物件已上傳至 S3：
+  `DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128` – 的內容`script.sh`。物件金鑰`87cb19095dd5d78fcaf56384ef0e6241`中的值是檔案內容的雜湊，副檔`xxh128`名表示雜湊值計算為 128 位元 [xxhash](https://xxhash.com/)。
+  `DeadlineCloud/Manifests/<farm-id>/<queue-id>/Inputs/<guid>/a1d221c7fd97b08175b3872a37428e8c_input` – 任務提交的資訊清單物件。值 `<farm-id>`、 `<queue-id>`和 `<guid>`是您的陣列識別符、佇列識別符和隨機十六進位值。`a1d221c7fd97b08175b3872a37428e8c` 此範例中的值是從字串 計算的雜湊值`/home/cloudshell-user/job_attachments_devguide`，即 `script.sh` 所在的目錄。

 資訊清單物件包含作為任務提交的一部分上傳至 S3 之特定根路徑上的輸入檔案資訊。下載此資訊清單檔案 (`aws s3 cp s3://$Q1_S3_BUCKET/<objectname>`)。其內容類似：

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

這表示檔案`script.sh`已上傳，且該檔案內容的雜湊為 `87cb19095dd5d78fcaf56384ef0e6241`。此雜湊值符合物件名稱 中的值`DeadlineCloud/Data/87cb19095dd5d78fcaf56384ef0e6241.xxh128`。Deadline Cloud 會使用它來知道要為此檔案的內容下載哪個物件。

 此檔案的完整結構描述可在 [ GitHub 中取得](https://github.com/aws-deadline/deadline-cloud/blob/mainline/src/deadline/job_attachments/asset_manifests/v2023_03_03/validate.py)。

當您使用 [CreateJob 操作](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_CreateJob.html)時，您可以設定資訊清單物件的位置。您可以使用 [GetJob 操作](https://docs.aws.amazon.com/deadline-cloud/latest/APIReference/API_GetJob.html)來查看位置：

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