View a markdown version of this page

Deadline Cloud 如何将文件上传到亚马逊 S3 - 截止日期云

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

Deadline Cloud 如何将文件上传到亚马逊 S3

此示例显示了 Deadline Cloud 如何将文件从您的工作站或工作主机上传到 Amazon S3 以便共享。它使用来自网站上截止日期云样本存储库的示例任务包以及 PyPI GitHub 网站上的 Deadline Cloud CLI 来提交作业。

首先,将 deadline-cloud-samples 存储库克隆到您的AWS CloudShell环境中,然后将job_attachments_devguide任务包复制到您的主目录中:

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

安装 Deadline Cloud CLI 以提交任务包:

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/

运行此命令后,截止日期云 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 查看上传到 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表示哈希值是使用 xxHash 网站上的 xxHash 算法以 128 位哈希算法计算的。

  • 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 使用它来知道要为该文件的内容下载哪个对象。

有关清单文件的完整架构,请参阅网站上的 d eadline-cloud-job-attachments 存储库。 GitHub

使用该CreateJob 操作时,您可以设置清单对象的位置。您可以使用该GetJob操作来查看位置:

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