

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

# Deadline Cloud でジョブアタッチメントを使用してジョブを送信する
<a name="run-jobs-job-attachments"></a>

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

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

AWS Deadline Cloud は、E メールの*添付ファイルと同様のジョブ*の添付ファイルを含むシンプルなソリューションを提供します。ジョブアタッチメントでは、データをジョブにアタッチします。その後、Deadline Cloud はジョブデータの転送と Amazon Simple Storage Service (Amazon S3) バケットへの保存の詳細を処理します。

コンテンツ作成ワークフローは、多くの場合反復的です。つまり、ユーザーは変更されたファイルの小さなサブセットでジョブを送信します。Amazon S3 バケットはジョブアタッチメントをコンテンツアドレス可能なストレージに保存するため、各オブジェクトの名前はオブジェクトのデータのハッシュに基づいており、ディレクトリツリーのコンテンツはジョブにアタッチされたマニフェストファイル形式で保存されます。

このセクションの手順を実行する前に、以下を完了する必要があります。
+ [Deadline Cloud ファームを作成する](create-a-farm.md)
+ [Deadline Cloud ワーカーエージェントを実行する](run-worker.md)

ジョブアタッチメントを使用してジョブを実行するには、次の手順を実行します。

**Topics**
+ [ジョブアタッチメント設定をキューに追加する](#job-attachments-config)
+ [ジョブアタッチメントsimple\$1file\$1jobを使用して送信する](#submit-job-attachments)
+ [ジョブアタッチメントを Amazon S3 に保存する方法を理解する](#job-attachments-in-depth)
+ [次の手順](#run-jobs-job-attachments-next)

## ジョブアタッチメント設定をキューに追加する
<a name="job-attachments-config"></a>

キューでジョブアタッチメントを有効にするには、アカウントのキューリソースにジョブアタッチメント設定を追加します。

**ジョブアタッチメント設定をキューに追加するには**

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
     ```

1. Amazon S3 バケットを作成または選択したら、バケット名を に追加`~/.bashrc`して、バケットを他のターミナルセッションで使用できるようにします。

   ```
   echo "DEV_FARM_BUCKET=$DEV_FARM_BUCKET" >> ~/.bashrc
    source ~/.bashrc
   ```

1. キューの 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"
                   }
               ]
               }'
   ```

1. キューを更新して、ジョブアタッチメント設定と 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"
           }'
   ```

1. キューを更新したことを確認します。

   ```
   deadline queue get
   ```

   次のような出力が表示されます。

   ```
   ...
   jobAttachmentSettings:
     s3BucketName: DEV_FARM_BUCKET
     rootPrefix: JobAttachments
   roleArn: arn:aws:iam::ACCOUNT_NUMBER:role/DeveloperFarmQueueRole
   ...
   ```

## ジョブアタッチメントsimple\$1file\$1jobを使用して送信する
<a name="submit-job-attachments"></a>

ジョブアタッチメントを使用する場合、ジョブバンドルは Deadline Cloud に、`PATH`パラメータの使用など、ジョブのデータフローを決定するのに十分な情報を提供する必要があります。の場合simple\$1file\$1job、 `template.yaml` ファイルを編集して、データフローが入力ファイルと出力ファイルにあることを Deadline Cloud に伝えます。

ジョブアタッチメント設定をキューに追加したら、ジョブアタッチメントを含む simple\$1file\$1job サンプルを送信できます。これを行うと、ログ記録とジョブ出力を表示して、ジョブアタッチメントsimple\$1file\$1jobを持つ が機能していることを確認できます。

**ジョブアタッチメントを使用して simple\$1file\$1job ジョブバンドルを送信するには**

1. 最初の CloudShell タブを選択し、 `JobBundle-Samples` ディレクトリを開きます。

1. 

   ```
   cd ~/deadline-cloud-samples/job_bundles/
   ```

1. simple\$1file\$1job をキューに送信します。アップロードを確認するプロンプトが表示されたら、 と入力します**y**。

   ```
   deadline bundle submit simple_file_job \
       -p InFile=simple_job/template.yaml \
       -p OutFile=hash-jobattachments.txt
   ```

1. ジョブアタッチメントのデータ転送セッションログ出力を表示するには、次のコマンドを実行します。

   ```
   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
   ```

1. セッション内で実行されたセッションアクションを一覧表示します。

   ```
   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 番目のアクションは前のステップのようにタスクを実行し、出力ジョブアタッチメントをアップロードします。

1. 出力ディレクトリを一覧表示します。

   ```
   ls *.txt
   ```

   などの出力は ディレクトリに`hash.txt`存在しますが、ジョブの出力ファイルがまだダウンロードされていないため`hash-jobattachments.txt`、存在しません。

1. 最新のジョブから出力をダウンロードします。

   ```
   deadline job download-output
   ```

1. ダウンロードしたファイルの出力を表示します。

   ```
   cat hash-jobattachments.txt
   ```

   次のような出力が表示されます。

   ```
   eaa2df5d34b54be5ac34c56a24a8c237b8487231a607eaf530a04d76b89c9cd3  /tmp/openjd/session-123/assetroot-abc/simple_job/template.yaml
   ```

## ジョブアタッチメントを Amazon S3 に保存する方法を理解する
<a name="job-attachments-in-depth"></a>

 AWS Command Line Interface (AWS CLI) を使用して、Amazon S3 バケットに保存されているジョブアタッチメントのデータをアップロードまたはダウンロードできます。Deadline Cloud が Amazon S3 にジョブアタッチメントを保存する方法を理解すると、ワークロードとパイプラインの統合を開発するのに役立ちます。

**Deadline Cloud ジョブアタッチメントが Amazon S3 にどのように保存されているかを調べるには**

1. 最初の CloudShell タブを選択し、ジョブバンドルサンプルディレクトリを開きます。

   ```
   cd ~/deadline-cloud-samples/job_bundles/
   ```

1. ジョブのプロパティを検査します。

   ```
   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`。マニフェストファイルには、ジョブの入力データのディレクトリツリースナップショットのメタデータが含まれています。

1. 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
    }
   ```

1. 出力ジョブアタッチメントのマニフェストを保持する 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

1. 特定のセッションアクション 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 つのマニフェストオブジェクトしかありませんが、一般的にタスク実行ごとにより多くのオブジェクトを持つことができます。

1. `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
   ```

## 次の手順
<a name="run-jobs-job-attachments-next"></a>

Deadline Cloud CLI を使用して添付ファイルを含むジョブを送信する方法を学習したら、以下を確認できます。
+ [Deadline Cloud で送信する](submit-a-job.md) ワーカーホストで OpenJD バンドルを使用してジョブを実行する方法について説明します。
+ [Deadline Cloud のデベロッパーファームにサービスマネージドフリートを追加する](service-managed-fleet.md) は、Deadline Cloud によって管理されるホストでジョブを実行します。
+ [Deadline Cloud でファームリソースをクリーンアップする](cleaning-up.md) このチュートリアルで使用したリソースをシャットダウンするには、 を使用します。