本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Deadline Cloud 如何将文件上传到亚马逊 S3
此示例显示了 Deadline Cloud 如何将文件从您的工作站或工作主机上传到 Amazon S3 以便共享。它使用来自网站上截止日期云样本存储库
首先,将 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-00112233445566778899aabbccddeeffdeadline 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 存储库。
使用该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" } ] }, ... }