

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

# 使用截止日期雲端提交
<a name="submit-a-job"></a>

若要在工作者主機上執行截止日期雲端任務，您可以建立並使用開放任務描述 (OpenJD) 任務套件來設定任務。套件會設定任務，例如指定任務的輸入檔案，以及寫入任務輸出的位置。本主題包含您可以設定任務套件的方法範例。

您必須先完成下列操作，才能遵循本節中的程序：
+ [建立截止日期雲端陣列](create-a-farm.md)
+ [執行截止日期雲端工作者代理程式](run-worker.md)

若要使用 Deadline Cloud AWS 執行任務，請使用下列程序。使用第一個 AWS CloudShell 索引標籤將任務提交到您的開發人員陣列。使用第二個 CloudShell 索引標籤來檢視工作者代理程式輸出。

**Topics**
+ [提交simple\$1job範例](#submit-a-simplejob-sample)
+ [simple\$1job 使用 參數提交](#submit-with-parameter)
+ [使用檔案 I/O 建立 simple\$1file\$1job 任務套件](#create-job-bundle-with-file-io)
+ [後續步驟](#submit-a-job-next)

## 提交simple\$1job範例
<a name="submit-a-simplejob-sample"></a>

建立陣列並執行工作者代理程式後，您可以將simple\$1job範例提交至截止日期雲端。

**將simple\$1job範例提交至截止日期雲端**

1. 選擇您的第一個 CloudShell 標籤。

1. 從 GitHub 下載範例。

   ```
   cd ~
   git clone https://github.com/aws-deadline/deadline-cloud-samples.git
   ```

1. 導覽至任務套件範例目錄。

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

1. 提交simple\$1job範例。

   ```
   deadline bundle submit simple_job
   ```

1. 選擇您的第二個 CloudShell 索引標籤，以檢視有關呼叫 `BatchGetJobEntities`、取得工作階段和執行工作階段動作的記錄輸出。

   ```
   ...
   [2024-03-27 16:00:21,846][INFO    ] 🔷 Session.Starting 🔷 [session-053d77cef82648fe2] Starting new Session. [queue-3ba4ff683ff54db09b851a2ed8327d7b/job-d34cc98a6e234b6f82577940ab4f76c6]
   [2024-03-27 16:00:21,853][INFO    ] 📤 API.Req 📤 [deadline:BatchGetJobEntity] resource={'farm-id': 'farm-3e24cfc9bbcd423e9c1b6754bc1', 'fleet-id': 'fleet-246ee60f46d44559b6cce010d05', 'worker-id': 'worker-75e0fce9c3c344a69bff57fcd83'} params={'identifiers': [{'jobDetails': {'jobId': 'job-d34cc98a6e234b6f82577940ab4'}}]} request_url=https://scheduling.deadline.us-west-2.amazonaws.com/2023-10-12/farms/farm-3e24cfc9bbcd423e /fleets/fleet-246ee60f46d44559b1 /workers/worker- 75e0fce9c3c344a69b /batchGetJobEntity
   [2024-03-27 16:00:22,013][INFO    ] 📥 API.Resp 📥 [deadline:BatchGetJobEntity](200) params={'entities': [{'jobDetails': {'jobId': 'job-d34cc98a6e234b6f82577940ab6', 'jobRunAsUser': {'posix': {'user': 'job-user', 'group': 'job-group'}, 'runAs': 'QUEUE_CONFIGURED_USER'}, 'logGroupName': '/aws/deadline/farm-3e24cfc9bbcd423e9c1b6754bc1/queue-3ba4ff683ff54db09b851a2ed83', 'parameters': '*REDACTED*', 'schemaVersion': 'jobtemplate-2023-09'}}], 'errors': []} request_id=a3f55914-6470-439e-89e5-313f0c6
   [2024-03-27 16:00:22,013][INFO    ] 🔷 Session.Add 🔷 [session-053d77cef82648fea9c69827182] Appended new SessionActions. (ActionIds: ['sessionaction-053d77cef82648fea9c69827182-0']) [queue-3ba4ff683ff54db09b851a2ed8b/job-d34cc98a6e234b6f82577940ab6]
   [2024-03-27 16:00:22,014][WARNING ] 🔷 Session.User 🔷 [session-053d77cef82648fea9c69827182] Running as the Worker Agent's user. (User: cloudshell-user) [queue-3ba4ff683ff54db09b851a2ed8b/job-d34cc98a6e234b6f82577940ac6]
   [2024-03-27 16:00:22,015][WARNING ] 🔷 Session.AWSCreds 🔷 [session-053d77cef82648fea9c69827182] AWS Credentials are not available: Queue has no IAM Role. [queue-3ba4ff683ff54db09b851a2ed8b/job-d34cc98a6e234b6f82577940ab6]
   [2024-03-27 16:00:22,026][INFO    ] 🔷 Session.Logs 🔷 [session-053d77cef82648fea9c69827182] Logs streamed to: AWS CloudWatch Logs. (LogDestination: /aws/deadline/farm-3e24cfc9bbcd423e9c1b6754bc1/queue-3ba4ff683ff54db09b851a2ed83/session-053d77cef82648fea9c69827181) [queue-3ba4ff683ff54db09b851a2ed83/job-d34cc98a6e234b6f82577940ab4]
   [2024-03-27 16:00:22,026][INFO    ] 🔷 Session.Logs 🔷 [session-053d77cef82648fea9c69827182] Logs streamed to: local file. (LogDestination: /home/cloudshell-user/demoenv-logs/queue-3ba4ff683ff54db09b851a2ed8b/session-053d77cef82648fea9c69827182.log) [queue-3ba4ff683ff54db09b851a2ed83/job-d34cc98a6e234b6f82577940ab4]
   ...
   ```
**注意**  
只會顯示工作者代理程式的記錄輸出。執行任務的工作階段有單獨的日誌。

1. 選擇您的第一個索引標籤，然後檢查工作者代理程式寫入的日誌檔案。

   1. 導覽至工作者代理程式日誌目錄並檢視其內容。

      ```
      cd ~/demoenv-logs
      ls
      ```

   1. 列印工作者代理程式建立的第一個日誌檔案。

      ```
      cat worker-agent-bootstrap.log
      ```

      此檔案包含工作者代理程式輸出，其如何稱為截止日期雲端 API，以在機群中建立工作者資源，然後擔任機群角色。

   1. 工作者代理程式加入機群時列印日誌檔案輸出。

      ```
      cat worker-agent.log
      ```

      此日誌包含工作者代理程式採取之所有動作的輸出，但不包含其執行任務之佇列的輸出，但這些資源IDs 除外。

   1. 在名為與佇列資源 ID 相同的目錄中列印每個工作階段的日誌檔案。

      ```
      cat $DEV_QUEUE_ID/session-*.log
      ```

      如果任務成功，日誌檔案輸出將類似於以下內容：

      ```
      cat $DEV_QUEUE_ID/$(ls -t $DEV_QUEUE_ID | head -1)
                                  
      2024-03-27 16:00:22,026 WARNING Session running with no AWS Credentials.
      2024-03-27 16:00:22,404 INFO 
      2024-03-27 16:00:22,405 INFO ==============================================
      2024-03-27 16:00:22,405 INFO --------- Running Task
      2024-03-27 16:00:22,405 INFO ==============================================
      2024-03-27 16:00:22,406 INFO ----------------------------------------------
      2024-03-27 16:00:22,406 INFO Phase: Setup
      2024-03-27 16:00:22,406 INFO ----------------------------------------------
      2024-03-27 16:00:22,406 INFO Writing embedded files for Task to disk.
      2024-03-27 16:00:22,406 INFO Mapping: Task.File.runScript -> /sessions/session-053d77cef82648fea9c698271812a/embedded_fileswa_gj55_/tmp2u9yqtsz
      2024-03-27 16:00:22,406 INFO Wrote: runScript -> /sessions/session-053d77cef82648fea9c698271812a/embedded_fileswa_gj55_/tmp2u9yqtsz
      2024-03-27 16:00:22,407 INFO ----------------------------------------------
      2024-03-27 16:00:22,407 INFO Phase: Running action
      2024-03-27 16:00:22,407 INFO ----------------------------------------------
      2024-03-27 16:00:22,407 INFO Running command /sessions/session-053d77cef82648fea9c698271812a/tmpzuzxpslm.sh
      2024-03-27 16:00:22,414 INFO Command started as pid: 471
      2024-03-27 16:00:22,415 INFO Output:
      2024-03-27 16:00:22,420 INFO Welcome to AWS Deadline Cloud!
      2024-03-27 16:00:22,571 INFO 
      2024-03-27 16:00:22,572 INFO ==============================================
      2024-03-27 16:00:22,572 INFO --------- Session Cleanup
      2024-03-27 16:00:22,572 INFO ==============================================
      2024-03-27 16:00:22,572 INFO Deleting working directory: /sessions/session-053d77cef82648fea9c698271812a
      ```

1. 列印任務的相關資訊。

   ```
   deadline job get
   ```

   當您提交任務時，系統會將其儲存為預設值，因此您不需要輸入任務 ID。

## simple\$1job 使用 參數提交
<a name="submit-with-parameter"></a>

您可以使用參數提交任務。在下列程序中，您可以編輯simple\$1job範本以包含自訂訊息、提交 simple\$1job，然後列印工作階段日誌檔案以檢視訊息。

**使用 參數提交simple\$1job範例**

1. 選取您的第一個 CloudShell 索引標籤，然後導覽至任務套件範例目錄。

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

1. 列印simple\$1job範本的內容。

   ```
   cat simple_job/template.yaml
   ```

   具有 `Message` 參數的 `parameterDefinitions`區段應如下所示：

   ```
   parameterDefinitions:
   - name: Message
     type: STRING
     default: Welcome to AWS Deadline Cloud!
   ```

1. 使用參數值提交simple\$1job範例，然後等待任務完成執行。

   ```
   deadline bundle submit simple_job \
       -p "Message=Greetings from the developer getting started guide."
   ```

1. 若要查看自訂訊息，請檢視最新的工作階段日誌檔案。

   ```
   cd ~/demoenv-logs
   cat $DEV_QUEUE_ID/$(ls -t $DEV_QUEUE_ID | head -1)
   ```

## 使用檔案 I/O 建立 simple\$1file\$1job 任務套件
<a name="create-job-bundle-with-file-io"></a>

轉譯任務需要讀取場景定義、從中轉譯影像，然後將該影像儲存至輸出檔案。您可以模擬此動作，方法是讓任務運算輸入雜湊，而不是轉譯影像。

**使用檔案 I/O 建立 simple\$1file\$1job 任務套件**

1. 選取您的第一個 CloudShell 索引標籤，然後導覽至任務套件範例目錄。

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

1. 使用`simple_job`新名稱 複製 `simple_file_job`。

   ```
   cp -r simple_job simple_file_job
   ```

1. 編輯任務範本，如下所示：
**注意**  
建議您將 nano用於這些步驟。如果您偏好使用 Vim，則必須使用 設定貼圖模式`:set paste`。

   1. 在文字編輯器中開啟範本。

      ```
      nano simple_file_job/template.yaml
      ```

   1. 新增下列 `type`、 `objectType`和 `dataFlow` `parameterDefinitions`。

      ```
      - name: InFile
        type: PATH
        objectType: FILE
        dataFlow: IN
      - name: OutFile
        type: PATH
        objectType: FILE
        dataFlow: OUT
      ```

   1. 將下列`bash`指令碼命令新增至從輸入檔案讀取並寫入輸出檔案的檔案結尾。

      ```
              # hash the input file, and write that to the output
              sha256sum "{{Param.InFile}}" > "{{Param.OutFile}}"
      ```

      更新的 `template.yaml`應完全符合下列項目：

      ```
      specificationVersion: 'jobtemplate-2023-09'
      name: Simple File Job Bundle Example
      parameterDefinitions:
      - name: Message
        type: STRING
        default: Welcome to AWS Deadline Cloud!
      - name: InFile
        type: PATH
        objectType: FILE
        dataFlow: IN
      - name: OutFile
        type: PATH
        objectType: FILE
        dataFlow: OUT
      steps:
      - name: WelcomeToDeadlineCloud
        script:
          actions:
            onRun:
              command: '{{Task.File.Run}}'
          embeddedFiles:
          - name: Run
            type: TEXT
            runnable: true
            data: |
              #!/usr/bin/env bash
              echo "{{Param.Message}}"
      
              # hash the input file, and write that to the output
              sha256sum "{{Param.InFile}}" > "{{Param.OutFile}}"
      ```
**注意**  
如果您想要調整 中的間距`template.yaml`，請務必使用空格而非縮排。

   1. 儲存檔案，然後結束文字編輯器。

1. 提供輸入和輸出檔案的參數值，以提交 simple\$1file\$1job。

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

1. 列印任務的相關資訊。

   ```
   deadline job get
   ```
   + 您將看到如下所示的輸出：

     ```
     parameters:
       Message:
         string: Welcome to AWS Deadline Cloud!
       InFile:
         path: /local/home/cloudshell-user/BundleFiles/JobBundle-Examples/simple_job/template.yaml
       OutFile:
         path: /local/home/cloudshell-user/BundleFiles/JobBundle-Examples/hash.txt
     ```
   + 雖然您只提供相對路徑，但參數會設定完整的路徑。當路徑類型為 時， 會將目前的工作目錄 AWS CLI 聯結至做為參數提供的任何路徑`PATH`。
   + 在其他終端機視窗中執行的工作者代理程式會挑選並執行任務。此動作會建立 檔案，您可以使用下列命令檢視該`hash.txt`檔案。

     ```
     cat hash.txt
     ```

     此命令會列印類似以下的輸出。

     ```
     eaa2df5d34b54be5ac34c56a24a8c237b8487231a607eaf530a04d76b89c9cd3 /local/home/cloudshell-user/BundleFiles/JobBundle-Examples/simple_job/template.yaml
     ```

## 後續步驟
<a name="submit-a-job-next"></a>

了解如何使用截止日期雲端 CLI 提交簡單任務之後，您可以探索：
+ [在截止日期雲端中使用任務附件提交任務](run-jobs-job-attachments.md) 了解如何在執行不同作業系統的主機上執行任務。
+ [在截止日期雲端中將服務受管機群新增至您的開發人員陣列](service-managed-fleet.md) 在 Deadline Cloud 管理的主機上執行您的任務。
+ [在截止日期雲端中清除您的陣列資源](cleaning-up.md) 關閉您用於本教學課程的資源。