

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

# 截止日期雲端資源入門
<a name="getting-started"></a>

若要開始為 AWS 截止日期雲端建立自訂解決方案，您必須設定 資源。其中包括一個陣列、至少一個陣列的佇列，以及至少一個為佇列提供服務的工作者機群。您可以使用截止日期雲端主控台建立資源，也可以使用 AWS Command Line Interface。

在本教學課程中，您將使用 AWS CloudShell 建立簡單的開發人員陣列並執行工作者代理程式。然後，您可以提交和執行具有參數和附件的簡單任務、新增服務受管機群，並在完成時清除您的陣列資源。

以下各節將介紹 Deadline Cloud 的不同功能，以及它們如何一起運作和工作。遵循這些步驟有助於開發和測試新的工作負載和自訂。

如需使用 主控台設定陣列的說明，請參閱*《截止日期雲端使用者指南*》中的[入門](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/getting-started.html)。

**Topics**
+ [建立截止日期雲端陣列](create-a-farm.md)
+ [執行截止日期雲端工作者代理程式](run-worker.md)
+ [使用截止日期雲端提交](submit-a-job.md)
+ [在截止日期雲端中使用任務附件提交任務](run-jobs-job-attachments.md)
+ [在截止日期雲端中將服務受管機群新增至您的開發人員陣列](service-managed-fleet.md)
+ [在截止日期雲端中清除您的陣列資源](cleaning-up.md)

# 建立截止日期雲端陣列
<a name="create-a-farm"></a>

若要在 AWS 截止日期雲端中建立開發人員陣列和佇列資源，請使用 AWS Command Line Interface (AWS CLI)，如下列程序所示。您也將建立 AWS Identity and Access Management (IAM) 角色和客戶受管機群 (CMF)，並將機群與您的佇列建立關聯。然後，您可以設定 ， AWS CLI 並確認陣列已設定並依指定運作。

您可以使用此陣列來探索截止日期雲端的功能，然後開發和測試新的工作負載、自訂和管道整合。

**建立陣列**

1. [開啟工作階段 AWS CloudShell](https://console.aws.amazon.com/cloudshell/home?region=us-west-2)。您將使用 CloudShell 視窗輸入 AWS Command Line Interface (AWS CLI) 命令來執行本教學課程中的範例。繼續進行時，請保持 CloudShell 視窗開啟。

1. 為您的陣列建立名稱，並將該陣列名稱新增至 `~/.bashrc`。這將使其可用於其他終端機工作階段。

   ```
   echo "DEV_FARM_NAME=DeveloperFarm" >> ~/.bashrc
   source ~/.bashrc
   ```

1. 建立陣列資源，並將其陣列 ID 新增至 `~/.bashrc`。

   ```
   aws deadline create-farm \
       --display-name "$DEV_FARM_NAME"
   
   echo "DEV_FARM_ID=\$(aws deadline list-farms \
           --query \"farms[?displayName=='\$DEV_FARM_NAME'].farmId \
           | [0]\" --output text)" >> ~/.bashrc
   source ~/.bashrc
   ```

1. 建立佇列資源，並將其佇列 ID 新增至 `~/.bashrc.`

   ```
   aws deadline create-queue \
       --farm-id $DEV_FARM_ID \
       --display-name "$DEV_FARM_NAME Queue" \
       --job-run-as-user '{"posix": {"user": "job-user", "group": "job-group"}, "runAs":"QUEUE_CONFIGURED_USER"}'
   
   echo "DEV_QUEUE_ID=\$(aws deadline list-queues \
           --farm-id \$DEV_FARM_ID \
           --query \"queues[?displayName=='\$DEV_FARM_NAME Queue'].queueId \
           | [0]\" --output text)" >> ~/.bashrc
   source ~/.bashrc
   ```

1. 為機群建立 IAM 角色。此角色為機群中的工作者主機提供從佇列執行任務所需的安全登入資料。

   ```
   aws iam create-role \
       --role-name "${DEV_FARM_NAME}FleetRole" \
       --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}FleetRole" \
       --policy-name WorkerPermissions \
       --policy-document \
           '{
               "Version": "2012-10-17",		 	 	 
               "Statement": [
                   {
                       "Effect": "Allow",
                       "Action": [
                           "deadline:AssumeFleetRoleForWorker",
                           "deadline:UpdateWorker",
                           "deadline:DeleteWorker",
                           "deadline:UpdateWorkerSchedule",
                           "deadline:BatchGetJobEntity",
                           "deadline:AssumeQueueRoleForWorker"
                       ],
                       "Resource": "*",
                       "Condition": {
                           "StringEquals": {
                               "aws:PrincipalAccount": "${aws:ResourceAccount}"
                           }
                       }
                   },
                   {
                       "Effect": "Allow",
                       "Action": [
                           "logs:CreateLogStream"
                       ],
                       "Resource": "arn:aws:logs:*:*:*:/aws/deadline/*",
                       "Condition": {
                           "StringEquals": {
                               "aws:PrincipalAccount": "${aws:ResourceAccount}"
                           }
                       }
                   },
                   {
                       "Effect": "Allow",
                       "Action": [
                           "logs:PutLogEvents",
                           "logs:GetLogEvents"
                       ],
                       "Resource": "arn:aws:logs:*:*:*:/aws/deadline/*",
                       "Condition": {
                           "StringEquals": {
                               "aws:PrincipalAccount": "${aws:ResourceAccount}"
                           }
                       }
                   }
               ]
           }'
   ```

1. 建立客戶受管機群 (CMF)，並將其機群 ID 新增至 `~/.bashrc`。

   ```
   FLEET_ROLE_ARN="arn:aws:iam::$(aws sts get-caller-identity \
           --query "Account" --output text):role/${DEV_FARM_NAME}FleetRole"
   aws deadline create-fleet \
       --farm-id $DEV_FARM_ID \
       --display-name "$DEV_FARM_NAME CMF" \
       --role-arn $FLEET_ROLE_ARN \
       --max-worker-count 5 \
       --configuration \
           '{
               "customerManaged": {
                   "mode": "NO_SCALING",
                   "workerCapabilities": {
                       "vCpuCount": {"min": 1},
                       "memoryMiB": {"min": 512},
                       "osFamily": "linux",
                       "cpuArchitectureType": "x86_64"
                   }
               }
           }'
   
   echo "DEV_CMF_ID=\$(aws deadline list-fleets \
           --farm-id \$DEV_FARM_ID \
           --query \"fleets[?displayName=='\$DEV_FARM_NAME CMF'].fleetId \
           | [0]\" --output text)" >> ~/.bashrc
   source ~/.bashrc
   ```

1. 將 CMF 與您的佇列建立關聯。

   ```
   aws deadline create-queue-fleet-association \
       --farm-id $DEV_FARM_ID \
       --queue-id $DEV_QUEUE_ID \
       --fleet-id $DEV_CMF_ID
   ```

1. 安裝截止日期雲端命令列界面。

   ```
   pip install deadline
   ```

1. 若要將預設陣列設定為陣列 ID，並將佇列設定為您先前建立的佇列 ID，請使用下列命令。

   ```
   deadline config set defaults.farm_id $DEV_FARM_ID
   deadline config set defaults.queue_id $DEV_QUEUE_ID
   ```

1. （選用） 若要確認您的陣列已根據您的規格設定，請使用下列命令：
   + 列出所有陣列 – **deadline farm list**
   + 列出預設陣列中的所有佇列 – **deadline queue list**
   + 列出預設陣列中的所有機群 – **deadline fleet list**
   + 取得預設陣列 – **deadline farm get**
   + 取得預設佇列 – **deadline queue get**
   + 取得與預設佇列相關聯的所有機群 – **deadline fleet get**

## 後續步驟
<a name="gs-create-farm-next"></a>

建立陣列後，您可以在機群中的主機上執行截止日期雲端工作者代理程式，以處理任務。請參閱[執行截止日期雲端工作者代理程式](run-worker.md)。

# 執行截止日期雲端工作者代理程式
<a name="run-worker"></a>

您必須先在工作者主機上以開發人員模式執行 AWS 截止日期雲端工作者代理程式，才能執行您提交至開發人員陣列上的佇列的任務。

在本教學課程的其餘部分中，您將使用兩個 AWS CloudShell 索引標籤在開發人員陣列上執行 AWS CLI 操作。在第一個索引標籤中，您可以提交任務。在第二個索引標籤中，您可以執行工作者代理程式。

**注意**  
如果您讓 CloudShell 工作階段閒置超過 20 分鐘，將會逾時並停止工作者代理程式。若要重新啟動工作者代理程式，請遵循下列程序的指示。

您必須先設定截止日期雲端陣列、佇列和機群，才能啟動工作者代理程式。請參閱 [建立截止日期雲端陣列](create-a-farm.md)。

**在開發人員模式下執行工作者代理程式**

1. 在第一個 CloudShell 索引標籤中仍開啟您的陣列時，開啟第二個 CloudShell 索引標籤，然後建立 `demoenv-logs`和 `demoenv-persist`目錄。

   ```
   mkdir ~/demoenv-logs 
   mkdir ~/demoenv-persist
   ```

1. 從 PyPI 下載並安裝截止日期雲端工作者代理程式套件：
**注意**  
在 上Windows，代理程式檔案必須安裝在 Python 的全域網站套件目錄中。目前不支援 Python 虛擬環境。

   ```
   python -m pip install deadline-cloud-worker-agent
   ```

1. 若要允許工作者代理程式為執行中的任務建立臨時目錄，請建立目錄：

   ```
   sudo mkdir /sessions
   sudo chmod 750 /sessions
   sudo chown cloudshell-user /sessions
   ```

1. 使用`DEV_FARM_ID``DEV_CMF_ID`您新增至 的變數，在開發人員模式下執行截止日期雲端工作者代理程式`~/.bashrc`。

   ```
   deadline-worker-agent \
       --farm-id $DEV_FARM_ID \
       --fleet-id $DEV_CMF_ID \
       --run-jobs-as-agent-user \
       --logs-dir ~/demoenv-logs \
       --persistence-dir ~/demoenv-persist
   ```

   當工作者代理程式初始化然後輪詢 `UpdateWorkerSchedule` API 操作時，會顯示下列輸出：

   ```
   INFO    Worker Agent starting
   [2024-03-27 15:51:01,292][INFO    ] 👋 Worker Agent starting
   [2024-03-27 15:51:01,292][INFO    ] AgentInfo 
   Python Interpreter: /usr/bin/python3
   Python Version: 3.9.16 (main, Sep  8 2023, 00:00:00)  - [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)]
   Platform: linux
   ...
   [2024-03-27 15:51:02,528][INFO    ] 📥 API.Resp 📥 [deadline:UpdateWorkerSchedule](200) params={'assignedSessions': {}, 'cancelSessionActions': {}, 'updateIntervalSeconds': 15} ...
   [2024-03-27 15:51:17,635][INFO    ] 📥 API.Resp 📥 [deadline:UpdateWorkerSchedule](200) params=(Duplicate removed, see previous response) ...
   [2024-03-27 15:51:32,756][INFO    ] 📥 API.Resp 📥 [deadline:UpdateWorkerSchedule](200) params=(Duplicate removed, see previous response) ...
   ...
   ```

1. 選取您的第一個 CloudShell 標籤，然後列出機群中的工作者。

   ```
   deadline worker list --fleet-id $DEV_CMF_ID
   ```

   會顯示如下所示的輸出：

   ```
   Displaying 1 of 1 workers starting at 0
   
   - workerId: worker-8c9af877c8734e89914047111f
     status: STARTED
     createdAt: 2023-12-13 20:43:06+00:00
   ```

在生產組態中，截止日期雲端工作者代理程式需要將多個使用者和組態目錄設定為主機上的管理使用者。您可以覆寫這些設定，因為您在自己的開發陣列中執行任務，只有您可以存取。

## 後續步驟
<a name="gs-run-worker-agent-next"></a>

現在，工作者代理程式正在您的工作者主機上執行，您可以將任務傳送給工作者。您可以：
+ [使用截止日期雲端提交](submit-a-job.md) 使用簡單的 OpenJD 任務套件。
+ [在截止日期雲端中使用任務附件提交任務](run-jobs-job-attachments.md) 使用不同的作業系統在工作站之間共用檔案。

# 使用截止日期雲端提交
<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) 關閉您用於本教學課程的資源。

# 在截止日期雲端中使用任務附件提交任務
<a name="run-jobs-job-attachments"></a>

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

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

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

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

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

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

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 上存放任務附件，有助於您開發工作負載和管道整合。

**檢查截止日期雲端任務附件在 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. Pretty 列印 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
   ```

   輸出任務附件不會直接從任務資源中參考，而是根據陣列資源 IDs 放置在 Amazon S3 儲存貯體中。

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

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

# 在截止日期雲端中將服務受管機群新增至您的開發人員陣列
<a name="service-managed-fleet"></a>

AWS CloudShell 無法提供足夠的運算容量來測試更大的工作負載。它也不會設定為使用在多個工作者主機上分配任務的任務。

您可以新增 Auto Scaling 服務受管機群 (SMF) 到您的開發人員陣列，而不是使用 CloudShell。SMF 可為較大的工作負載提供足夠的運算容量，並可處理需要將任務分配到多個工作者主機的任務。

在新增 SMF 之前，您必須設定截止日期雲端陣列、佇列和機群。請參閱 [建立截止日期雲端陣列](create-a-farm.md)。

**將服務受管機群新增至您的開發人員陣列**

1. 選擇您的第一個 AWS CloudShell 索引標籤，然後建立服務受管機群，並將其機群 ID 新增至 `.bashrc`。此動作可供其他終端機工作階段使用。

   ```
   FLEET_ROLE_ARN="arn:aws:iam::$(aws sts get-caller-identity \
            --query "Account" --output text):role/${DEV_FARM_NAME}FleetRole"
    aws deadline create-fleet \
        --farm-id $DEV_FARM_ID \
        --display-name "$DEV_FARM_NAME SMF" \
        --role-arn $FLEET_ROLE_ARN \
        --max-worker-count 5 \
        --configuration \
            '{
                "serviceManagedEc2": {
                    "instanceCapabilities": {
                        "vCpuCount": {
                            "min": 2,
                            "max": 4
                        },
                        "memoryMiB": {
                            "min": 512
                        },
                        "osFamily": "linux",
                        "cpuArchitectureType": "x86_64"
                    },
                    "instanceMarketOptions": {
                        "type": "spot"
                    }
                }
            }'
   
    echo "DEV_SMF_ID=$(aws deadline list-fleets \
            --farm-id $DEV_FARM_ID \
            --query "fleets[?displayName=='$DEV_FARM_NAME SMF'].fleetId \
            | [0]" --output text)" >> ~/.bashrc
    source ~/.bashrc
   ```

1. 將 SMF 與您的佇列建立關聯。

   ```
   aws deadline create-queue-fleet-association \
        --farm-id $DEV_FARM_ID \
        --queue-id $DEV_QUEUE_ID \
        --fleet-id $DEV_SMF_ID
   ```

1. 提交simple\$1file\$1job至佇列。出現確認上傳的提示時，請輸入 **y**。

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

1. 確認 SMF 正常運作。

   ```
   deadline fleet get
   ```
   + 工作者可能需要幾分鐘的時間才能開始。重複 `deadline fleet get`命令，直到您可以看到機群正在執行。
   + `queueFleetAssociationsStatus` 適用於服務受管機群的 將是 `ACTIVE`。
   + SMF `autoScalingStatus`將從 變更為 `GROWING` `STEADY`。

   您的狀態看起來會類似以下內容：

   ```
   fleetId: fleet-2cc78e0dd3f04d1db427e7dc1d51ea44
   farmId: farm-63ee8d77cdab4a578b685be8c5561c4a
   displayName: DeveloperFarm SMF
   description: ''
   status: ACTIVE
   autoScalingStatus: STEADY
   targetWorkerCount: 0
   workerCount: 0
   minWorkerCount: 0
   maxWorkerCount: 5
   ```

1. 檢視您提交之任務的日誌。此日誌存放在 Amazon CloudWatch Logs 的日誌中，而不是 CloudShell 檔案系統。

   ```
    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)
    aws logs tail /aws/deadline/$DEV_FARM_ID/$DEV_QUEUE_ID \
        --log-stream-names $SESSION_ID
   ```

## 後續步驟
<a name="service-managed-fleet-next"></a>

在建立和測試服務受管機群之後，您應該移除您建立的資源，以避免不必要的費用。
+ [在截止日期雲端中清除您的陣列資源](cleaning-up.md) 關閉您用於本教學課程的資源。

# 在截止日期雲端中清除您的陣列資源
<a name="cleaning-up"></a>

若要開發和測試新的工作負載和管道整合，您可以繼續使用您在本教學課程中建立的截止日期雲端開發人員陣列。如果您不再需要開發人員陣列，可以在 Amazon CloudWatch Logs 中刪除其資源，包括陣列、機群、佇列、 AWS Identity and Access Management (IAM) 角色和日誌。刪除這些資源後，您需要再次開始教學課程才能使用這些資源。如需詳細資訊，請參閱[截止日期雲端資源入門](getting-started.md)。

**清除開發人員陣列資源**

1. 選擇您的第一個 CloudShell 標籤，然後停止佇列的所有佇列機群關聯。

   ```
    FLEETS=$(aws deadline list-queue-fleet-associations \
            --farm-id $DEV_FARM_ID \
            --queue-id $DEV_QUEUE_ID \
            --query "queueFleetAssociations[].fleetId" \
            --output text)
    for FLEET_ID in $FLEETS; do
        aws deadline update-queue-fleet-association \
            --farm-id $DEV_FARM_ID \
            --queue-id $DEV_QUEUE_ID \
            --fleet-id $FLEET_ID \
            --status STOP_SCHEDULING_AND_CANCEL_TASKS
    done
   ```

1. 列出佇列機群關聯。

   ```
   aws deadline list-queue-fleet-associations \
        --farm-id $DEV_FARM_ID \
        --queue-id $DEV_QUEUE_ID
   ```

   您可能需要重新執行命令，直到輸出報告 `"status": "STOPPED"`，然後您可以繼續下一個步驟。此程序可能需要幾分鐘的時間才能完成。

   ```
   {
       "queueFleetAssociations": [
           {
               "queueId": "queue-abcdefgh01234567890123456789012id",
               "fleetId": "fleet-abcdefgh01234567890123456789012id",
               "status": "STOPPED",
               "createdAt": "2023-11-21T20:49:19+00:00",
               "createdBy": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/MySessionName",
               "updatedAt": "2023-11-21T20:49:38+00:00",
               "updatedBy": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/MySessionName"
           },
           {
               "queueId": "queue-abcdefgh01234567890123456789012id",
               "fleetId": "fleet-abcdefgh01234567890123456789012id",
               "status": "STOPPED",
               "createdAt": "2023-11-21T20:32:06+00:00",
               "createdBy": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/MySessionName",
               "updatedAt": "2023-11-21T20:49:39+00:00",
               "updatedBy": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/MySessionName"
           }
       ]
   }
   ```

1. 刪除佇列的所有佇列機群關聯。

   ```
   for FLEET_ID in $FLEETS; do
        aws deadline delete-queue-fleet-association \
            --farm-id $DEV_FARM_ID \
            --queue-id $DEV_QUEUE_ID \
            --fleet-id $FLEET_ID
    done
   ```

1. 刪除與佇列相關聯的所有機群。

   ```
   for FLEET_ID in $FLEETS; do
        aws deadline delete-fleet \
            --farm-id $DEV_FARM_ID \
            --fleet-id $FLEET_ID
    done
   ```

1. 刪除佇列。

   ```
   aws deadline delete-queue \
        --farm-id $DEV_FARM_ID \
        --queue-id $DEV_QUEUE_ID
   ```

1. 刪除陣列。

   ```
   aws deadline delete-farm \
        --farm-id $DEV_FARM_ID
   ```

1. 刪除陣列的其他 AWS 資源。

   1. 刪除 fleet AWS Identity and Access Management (IAM) 角色。

      ```
      aws iam delete-role-policy \
           --role-name "${DEV_FARM_NAME}FleetRole" \
           --policy-name WorkerPermissions
      aws iam delete-role \
           --role-name "${DEV_FARM_NAME}FleetRole"
      ```

   1. 刪除佇列 IAM 角色。

      ```
      aws iam delete-role-policy \
           --role-name "${DEV_FARM_NAME}QueueRole" \
           --policy-name S3BucketsAccess
      aws iam delete-role \
           --role-name "${DEV_FARM_NAME}QueueRole"
      ```

   1. 刪除 Amazon CloudWatch Logs 日誌群組。每個佇列和機群都有自己的日誌群組。

      ```
      aws logs delete-log-group \
           --log-group-name "/aws/deadline/$DEV_FARM_ID/$DEV_QUEUE_ID"
      aws logs delete-log-group \
           --log-group-name "/aws/deadline/$DEV_FARM_ID/$DEV_CMF_ID"
      aws logs delete-log-group \
           --log-group-name "/aws/deadline/$DEV_FARM_ID/$DEV_SMF_ID"
      ```