Deadline Cloud でジョブアタッチメントを使用してジョブを送信する - Deadline クラウド

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Deadline Cloud でジョブアタッチメントを使用してジョブを送信する

多くのファームは、共有ファイルシステムを使用して、ジョブを送信するホストとジョブを実行するホスト間でファイルを共有します。たとえば、前のsimple_file_job例では、ローカルファイルシステムは、ジョブを送信するタブ 1 とワーカーエージェントを実行するタブ 2 で実行される AWS CloudShell ターミナルウィンドウ間で共有されます。

共有ファイルシステムは、送信者ワークステーションとワーカーホストが同じローカルエリアネットワーク上にある場合に便利です。それにアクセスするワークステーションの近くのオンプレミスにデータを保存する場合、クラウドベースのファームを使用すると、高レイテンシーの VPN 経由でファイルシステムを共有するか、クラウドでファイルシステムを同期する必要があります。これらのオプションはいずれも、設定や操作が容易ではありません。

AWS Deadline Cloud は、E メールの添付ファイルに似たジョブの添付ファイルを含むシンプルなソリューションを提供します。ジョブアタッチメントでは、データをジョブにアタッチします。その後、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" } } } ] }

    最初のセッションアクションは入力ジョブアタッチメントをダウンロードし、2 番目のアクションは前のステップのようにタスクを実行し、出力ジョブアタッチメントをアップロードします。

  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 にジョブアタッチメントを保存する方法を理解すると、ワークロードとパイプラインの統合を開発するのに役立ちます。

Deadline Cloud ジョブアタッチメントが 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

    出力ジョブアタッチメントは、ジョブリソースから直接参照されるのではなく、ファームリソース ID に基づいて Amazon S3 バケットに配置されます。 IDs

  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 }

    ジョブにはタスク実行ごとに 1 つのマニフェストオブジェクトしかありませんが、一般的にタスク実行ごとにより多くのオブジェクトを持つことができます。

  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

次のステップ

Deadline Cloud CLI を使用して添付ファイルを含むジョブを送信する方法を学習したら、以下を確認できます。