在截止日期雲端中使用任務附件提交任務 - 截止日期雲端

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

在截止日期雲端中使用任務附件提交任務

許多陣列會使用共用檔案系統,在提交任務的主機與執行任務的主機之間共用檔案。例如,在先前的simple_file_job範例中,本機檔案系統會在 AWS CloudShell 終端機視窗之間共用,其會在您提交任務的索引標籤 1 中執行,並在您執行工作者代理程式的索引標籤 2 中執行。

當提交者工作站和工作者主機位於相同的區域網路上時,共用檔案系統是有利的。如果您將資料存放在靠近存取它的工作站的現場部署,則使用雲端型陣列表示您必須透過高延遲 VPN 共用檔案系統,或在雲端同步檔案系統。這些選項都不容易設定或操作。

AWS Deadline Cloud 提供具有任務附件的簡單解決方案,類似於電子郵件附件。使用任務附件,您可以將資料連接至任務。然後,截止日期雲端會處理在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中傳輸和儲存任務資料的詳細資訊。

內容建立工作流程通常是反覆的,這表示使用者提交具有一小部分修改檔案的任務。由於 Amazon S3 儲存貯體將任務附件存放在可定址的內容儲存體中,因此每個物件的名稱都是以物件資料的雜湊為基礎,目錄樹狀目錄的內容會以附加至任務的資訊清單檔案格式儲存。

您必須完成下列操作,才能遵循本節中的程序:

若要使用任務附件執行任務,請完成下列步驟。

將任務附件組態新增至佇列

若要在佇列中啟用任務附件,請將任務附件組態新增至帳戶中的佇列資源。

將任務附件組態新增至佇列
  1. 選擇您的第一個 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
  2. 建立或選擇 Amazon S3 儲存貯體之後,請將儲存貯體名稱新增至 ~/.bashrc,讓儲存貯體可供其他終端機工作階段使用。

    echo "DEV_FARM_BUCKET=$DEV_FARM_BUCKET" >> ~/.bashrc source ~/.bashrc
  3. 為佇列建立 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" } ] }'
  4. 更新您的佇列以包含任務附件設定和 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" }'
  5. 確認您已更新佇列。

    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 任務套件
  1. 選擇您的第一個 CloudShell 標籤,然後開啟 JobBundle-Samples目錄。

  2. cd ~/deadline-cloud-samples/job_bundles/
  3. 將 simple_file_job 提交至佇列。出現確認上傳的提示時,請輸入 y

    deadline bundle submit simple_file_job \ -p InFile=simple_job/template.yaml \ -p OutFile=hash-jobattachments.txt
  4. 若要檢視任務連接資料傳輸工作階段日誌輸出,請執行下列命令。

    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
  5. 列出在工作階段中執行的工作階段動作。

    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" } } } ] }

    第一個工作階段動作會下載輸入任務附件,而第二個動作會像先前步驟一樣執行任務,然後上傳輸出任務附件。

  6. 列出輸出目錄。

    ls *.txt

    目錄中hash.txt存在 之類的輸出,但hash-jobattachments.txt由於任務的輸出檔案尚未下載,因此不存在。

  7. 從最近的任務下載輸出。

    deadline job download-output
  8. 檢視下載檔案的輸出。

    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 中
  1. 選擇您的第一個 CloudShell 索引標籤,然後開啟任務套件範例目錄。

    cd ~/deadline-cloud-samples/job_bundles/
  2. 檢查任務屬性。

    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。資訊清單檔案包含任務輸入資料的目錄樹狀目錄快照的中繼資料。

  3. 列印 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 }
  4. 建構 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 儲存貯體中。

  5. 取得特定工作階段動作 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 }

    您的任務每次任務執行只會有單一資訊清單物件,但一般而言,每次任務執行可能會有更多物件。

  6. 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 提交具有附件的任務後,您可以探索: