本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在截止日期雲端中使用任務附件提交任務
許多陣列會使用共用檔案系統,在提交任務的主機與執行任務的主機之間共用檔案。例如,在先前的simple_file_job
範例中,本機檔案系統會在 AWS CloudShell 終端機視窗之間共用,其會在您提交任務的索引標籤 1 中執行,並在您執行工作者代理程式的索引標籤 2 中執行。
當提交者工作站和工作者主機位於相同的區域網路上時,共用檔案系統是有利的。如果您將資料存放在靠近存取它的工作站的現場部署,則使用雲端型陣列表示您必須透過高延遲 VPN 共用檔案系統,或在雲端同步檔案系統。這些選項都不容易設定或操作。
AWS Deadline Cloud 提供具有任務附件的簡單解決方案,類似於電子郵件附件。使用任務附件,您可以將資料連接至任務。然後,截止日期雲端會處理在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中傳輸和儲存任務資料的詳細資訊。
內容建立工作流程通常是反覆的,這表示使用者提交具有一小部分修改檔案的任務。由於 Amazon S3 儲存貯體將任務附件存放在可定址的內容儲存體中,因此每個物件的名稱都是以物件資料的雜湊為基礎,目錄樹狀目錄的內容會以附加至任務的資訊清單檔案格式儲存。
您必須完成下列操作,才能遵循本節中的程序:
若要使用任務附件執行任務,請完成下列步驟。
將任務附件組態新增至佇列
若要在佇列中啟用任務附件,請將任務附件組態新增至帳戶中的佇列資源。
將任務附件組態新增至佇列
-
選擇您的第一個 CloudShell 標籤,然後輸入下列其中一個命令,以使用 Amazon S3 儲存貯體做為任務附件。
-
如果您沒有現有的私有 Amazon S3 儲存貯體,您可以建立和使用新的 S3 儲存貯體。
DEV_FARM_BUCKET=$(echo $DEV_FARM_NAME \ | tr '[:upper:]' '[:lower:]')-$(xxd -l 16 -p /dev/urandom) if [ "$AWS_REGION" == "us-east-1" ]; then LOCATION_CONSTRAINT= else LOCATION_CONSTRAINT="--create-bucket-configuration \ LocationConstraint=${AWS_REGION}" fi aws s3api create-bucket \ $LOCATION_CONSTRAINT \ --acl private \ --bucket ${DEV_FARM_BUCKET}
-
如果您已有私有 Amazon S3 儲存貯體,您可以使用它,方法是將
取代為儲存貯體的名稱。MY_BUCKET_NAME
DEV_FARM_BUCKET=
MY_BUCKET_NAME
-
-
建立或選擇 Amazon S3 儲存貯體之後,請將儲存貯體名稱新增至
~/.bashrc
,讓儲存貯體可供其他終端機工作階段使用。echo "DEV_FARM_BUCKET=$DEV_FARM_BUCKET" >> ~/.bashrc source ~/.bashrc
-
為佇列建立 AWS Identity and Access Management (IAM) 角色。
aws iam create-role --role-name "${DEV_FARM_NAME}QueueRole" \ --assume-role-policy-document \ '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.deadline.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }' aws iam put-role-policy \ --role-name "${DEV_FARM_NAME}QueueRole" \ --policy-name S3BucketsAccess \ --policy-document \ '{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*" ], "Resource": [ "arn:aws:s3:::'$DEV_FARM_BUCKET'", "arn:aws:s3:::'$DEV_FARM_BUCKET'/*" ], "Effect": "Allow" } ] }'
-
更新您的佇列以包含任務附件設定和 IAM 角色。
QUEUE_ROLE_ARN="arn:aws:iam::$(aws sts get-caller-identity \ --query "Account" --output text):role/${DEV_FARM_NAME}QueueRole" aws deadline update-queue \ --farm-id $DEV_FARM_ID \ --queue-id $DEV_QUEUE_ID \ --role-arn $QUEUE_ROLE_ARN \ --job-attachment-settings \ '{ "s3BucketName": "'$DEV_FARM_BUCKET'", "rootPrefix": "JobAttachments" }'
-
確認您已更新佇列。
deadline queue get
如下所示的輸出:
... jobAttachmentSettings: s3BucketName: DEV_FARM_BUCKET rootPrefix: JobAttachments roleArn: arn:aws:iam::ACCOUNT_NUMBER:role/DeveloperFarmQueueRole ...
simple_file_job 使用任務附件提交
當您使用任務附件時,任務套件必須提供 Deadline Cloud 足夠的資訊來判斷任務的資料流程,例如使用PATH
參數。在 的情況下simple_file_job,您編輯了 template.yaml
檔案,以告知 Deadline Cloud 資料流程位於輸入檔案和輸出檔案中。
將任務附件組態新增至佇列後,您可以提交具有任務附件的 simple_file_job 範例。執行此操作後,您可以檢視記錄和任務輸出,以確認simple_file_job具有任務附件的 正常運作。
使用任務附件提交 simple_file_job 任務套件
-
選擇您的第一個 CloudShell 標籤,然後開啟
JobBundle-Samples
目錄。 -
cd ~/deadline-cloud-samples/job_bundles/
-
將 simple_file_job 提交至佇列。出現確認上傳的提示時,請輸入
y
。deadline bundle submit simple_file_job \ -p InFile=simple_job/template.yaml \ -p OutFile=hash-jobattachments.txt
-
若要檢視任務連接資料傳輸工作階段日誌輸出,請執行下列命令。
JOB_ID=$(deadline config get defaults.job_id) SESSION_ID=$(aws deadline list-sessions \ --farm-id $DEV_FARM_ID \ --queue-id $DEV_QUEUE_ID \ --job-id $JOB_ID \ --query "sessions[0].sessionId" \ --output text) cat ~/demoenv-logs/$DEV_QUEUE_ID/$SESSION_ID.log
-
列出在工作階段中執行的工作階段動作。
aws deadline list-session-actions \ --farm-id $DEV_FARM_ID \ --queue-id $DEV_QUEUE_ID \ --job-id $JOB_ID \ --session-id $SESSION_ID
如下所示的輸出:
{ "sessionactions": [ { "sessionActionId": "sessionaction-123-0", "status": "SUCCEEDED", "startedAt": "<timestamp>", "endedAt": "<timestamp>", "progressPercent": 100.0, "definition": { "syncInputJobAttachments": {} } }, { "sessionActionId": "sessionaction-123-1", "status": "SUCCEEDED", "startedAt": "<timestamp>", "endedAt": "<timestamp>", "progressPercent": 100.0, "definition": { "taskRun": { "taskId": "task-abc-0", "stepId": "step-def" } } } ] }
第一個工作階段動作會下載輸入任務附件,而第二個動作會像先前步驟一樣執行任務,然後上傳輸出任務附件。
-
列出輸出目錄。
ls *.txt
目錄中
hash.txt
存在 之類的輸出,但hash-jobattachments.txt
由於任務的輸出檔案尚未下載,因此不存在。 -
從最近的任務下載輸出。
deadline job download-output
-
檢視下載檔案的輸出。
cat hash-jobattachments.txt
如下所示的輸出:
eaa2df5d34b54be5ac34c56a24a8c237b8487231a607eaf530a04d76b89c9cd3 /tmp/openjd/session-123/assetroot-abc/simple_job/template.yaml
了解任務附件如何儲存在 Amazon S3 中
您可以使用 AWS Command Line Interface (AWS CLI) 上傳或下載存放在 Amazon S3 儲存貯體的任務附件資料。了解 Deadline Cloud 如何在 Amazon S3 上存放任務附件,在您開發工作負載和管道整合時提供協助。
檢查截止日期雲端任務附件如何存放在 Amazon S3 中
-
選擇您的第一個 CloudShell 索引標籤,然後開啟任務套件範例目錄。
cd ~/deadline-cloud-samples/job_bundles/
-
檢查任務屬性。
deadline job get
如下所示的輸出:
parameters: Message: string: Welcome to AWS Deadline Cloud! InFile: path: /home/cloudshell-user/deadline-cloud-samples/job_bundles/simple_job/template.yaml OutFile: path: /home/cloudshell-user/deadline-cloud-samples/job_bundles/hash-jobattachments.txt attachments: manifests: - rootPath: /home/cloudshell-user/deadline-cloud-samples/job_bundles/ rootPathFormat: posix outputRelativeDirectories: - . inputManifestPath: farm-3040c59a5b9943d58052c29d907a645d/queue-cde9977c9f4d4018a1d85f3e6c1a4e6e/Inputs/f46af01ca8904cd8b514586671c79303/0d69cd94523ba617c731f29c019d16e8_input.xxh128 inputManifestHash: f95ef91b5dab1fc1341b75637fe987ee fileSystem: COPIED
附件欄位包含資訊清單結構清單,描述任務執行時使用的輸入和輸出資料路徑。查看
rootPath
查看提交任務之電腦上的本機目錄路徑。若要檢視包含資訊清單檔案的 Amazon S3 物件尾碼,請檢閱inputManifestFile
。資訊清單檔案包含任務輸入資料的目錄樹狀目錄快照的中繼資料。 -
列印 Amazon S3 資訊清單物件,以查看任務的輸入目錄結構。
MANIFEST_SUFFIX=$(aws deadline get-job \ --farm-id $DEV_FARM_ID \ --queue-id $DEV_QUEUE_ID \ --job-id $JOB_ID \ --query "attachments.manifests[0].inputManifestPath" \ --output text) aws s3 cp s3://$DEV_FARM_BUCKET/JobAttachments/Manifests/$MANIFEST_SUFFIX - | jq .
如下所示的輸出:
{ "hashAlg": "xxh128", "manifestVersion": "2023-03-03", "paths": [ { "hash": "2ec297b04c59c4741ed97ac8fb83080c", "mtime": 1698186190000000, "path": "simple_job/template.yaml", "size": 445 } ], "totalSize": 445 }
-
建構 Amazon S3 字首,其中包含輸出任務附件的資訊清單,並在其中列出物件。
SESSION_ACTION=$(aws deadline list-session-actions \ --farm-id $DEV_FARM_ID \ --queue-id $DEV_QUEUE_ID \ --job-id $JOB_ID \ --session-id $SESSION_ID \ --query "sessionActions[?definition.taskRun != null] | [0]") STEP_ID=$(echo $SESSION_ACTION | jq -r .definition.taskRun.stepId) TASK_ID=$(echo $SESSION_ACTION | jq -r .definition.taskRun.taskId) TASK_OUTPUT_PREFIX=JobAttachments/Manifests/$DEV_FARM_ID/$DEV_QUEUE_ID/$JOB_ID/$STEP_ID/$TASK_ID/ aws s3api list-objects-v2 --bucket $DEV_FARM_BUCKET --prefix $TASK_OUTPUT_PREFIX
輸出任務附件不會直接從任務資源中參考,而是根據陣列資源 IDs 放置在 Amazon S3 儲存貯體中。
-
取得特定工作階段動作 ID 的最新資訊清單物件金鑰,然後完美列印資訊清單物件。
SESSION_ACTION_ID=$(echo $SESSION_ACTION | jq -r .sessionActionId) MANIFEST_KEY=$(aws s3api list-objects-v2 \ --bucket $DEV_FARM_BUCKET \ --prefix $TASK_OUTPUT_PREFIX \ --query "Contents[*].Key" --output text \ | grep $SESSION_ACTION_ID \ | sort | tail -1) MANIFEST_OBJECT=$(aws s3 cp s3://$DEV_FARM_BUCKET/$MANIFEST_KEY -) echo $MANIFEST_OBJECT | jq .
您會在輸出
hash-jobattachments.txt
中看到 檔案的屬性,如下所示:{ "hashAlg": "xxh128", "manifestVersion": "2023-03-03", "paths": [ { "hash": "f60b8e7d0fabf7214ba0b6822e82e08b", "mtime": 1698785252554950, "path": "hash-jobattachments.txt", "size": 182 } ], "totalSize": 182 }
您的任務每次任務執行只會有單一資訊清單物件,但一般而言,每次任務執行可能會有更多物件。
-
在
Data
字首下檢視內容可定址的 Amazon S3 儲存輸出。FILE_HASH=$(echo $MANIFEST_OBJECT | jq -r .paths[0].hash) FILE_PATH=$(echo $MANIFEST_OBJECT | jq -r .paths[0].path) aws s3 cp s3://$DEV_FARM_BUCKET/JobAttachments/Data/$FILE_HASH -
如下所示的輸出:
eaa2df5d34b54be5ac34c56a24a8c237b8487231a607eaf530a04d76b89c9cd3 /tmp/openjd/session-123/assetroot-abc/simple_job/template.yaml
後續步驟
了解如何使用截止日期雲端 CLI 提交具有附件的任務後,您可以探索:
-
使用截止日期雲端提交 了解如何在工作者主機上使用 OpenJD 套件執行任務。
-
在截止日期雲端中將服務受管機群新增至您的開發人員陣列 在 Deadline Cloud 管理的主機上執行您的任務。
-
在截止日期雲端中清除您的陣列資源 關閉您用於本教學課程的資源。