

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

# Deadline Cloud 如何将文件上传到亚马逊 S3
<a name="what-job-attachments-uploads-to-amazon-s3"></a>

此示例显示 Deadline Cloud 如何将文件从您的工作站或工作主机上传到 Amazon S3，以便共享这些文件。它使用来自的示例任务包 GitHub 和 Deadline Cloud CLI 来提交作业。

 首先将 De [adline Cloud 示例 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 ~/
```

 安装 De [adline Cloud 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`文件声明为作业运行所需的输入文件。

 接下来，请确保 Deadline Cloud 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/
```

 运行此命令后 Deadline Cloud 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
```

当您提交任务时，Deadline Cloud 会先对`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 位 [xx](https://xxhash.com/) hash 计算得出的。
+  `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"
            }
        ]
    },
    ...
}
```