

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

# 工作者主機設定和組態
<a name="worker-host"></a>

工作者主機是指執行截止日期雲端工作者的主機機器。本節說明如何設定工作者主機，並根據您的特定需求進行設定。每個工作者主機都會執行稱為*工作者代理*程式的程式。工作者代理程式負責：
+ 管理工作者生命週期。
+ 同步指派的工作、進度和結果。
+ 監控執行中的工作。
+ 將日誌轉送至設定的目的地。

我們建議您使用提供的截止日期雲端工作者代理程式。工作者代理程式是開放原始碼，我們鼓勵功能請求，但您也可以開發和自訂以滿足您的需求。

若要完成以下章節中的任務，您需要下列項目：

------
#### [ Linux ]
+ Linux以 為基礎的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。我們建議使用 Amazon Linux 2023。
+ `sudo` 權限
+ Python 3.9 或更新版本

------
#### [ Windows ]
+ Windows以 為基礎的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。我們建議使用 Windows Server 2022。
+ 工作者主機的管理員存取權
+ 為所有使用者安裝 Python 3.9 或更新版本

------

## 建立和設定 Python 虛擬環境
<a name="python-virtual-env"></a>

Linux 如果您已安裝 Python 3.9 或更新版本並將其放置在 中，您可以在 上建立 Python 虛擬環境。 `PATH`

**注意**  
在 上Windows，代理程式檔案必須安裝在 Python 的全域 site-packages 目錄中。目前不支援 Python 虛擬環境。

**建立和啟用 Python 虛擬環境**

1. 以`root`使用者身分開啟終端機 （或使用 `sudo` / `su`)。

1. 建立和啟用 Python 虛擬環境。

   ```
   python3 -m venv /opt/deadline/worker
   source /opt/deadline/worker/bin/activate
   pip install --upgrade pip
   ```

## 安裝截止日期雲端工作者代理程式
<a name="install-worker-agent"></a>

在您設定 Python 並在 上建立虛擬環境之後Linux，請安裝截止日期雲端工作者代理程式 Python 套件。

### 安裝工作者代理程式 Python 套件
<a name="w2aac23c17c19b5"></a>

------
#### [ Linux ]

1. 以`root`使用者身分開啟終端機 （或使用 `sudo` / `su`)。

1. 從 PyPI 下載並安裝截止日期雲端工作者代理程式套件：

   ```
   /opt/deadline/worker/bin/python -m pip install deadline-cloud-worker-agent
   ```

------
#### [ Windows ]

1. 開啟管理員命令提示字元或 PowerShell 終端機。

1. 從 PyPI 下載並安裝截止日期雲端工作者代理程式套件：

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

------

當您的Windows工作者主機需要長路徑名稱 （大於 250 個字元） 時，您必須啟用長路徑名稱，如下所示：

#### 為Windows工作者主機啟用長路徑
<a name="long-path"></a>

1. 請確定已啟用長路徑登錄機碼。如需詳細資訊，請參閱在 Microsoft [網站上啟用日誌路徑的登錄設定](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#registry-setting-to-enable-long-paths)。

1. 安裝適用於桌面 C\$1\$1 x86 應用程式的 Windows SDK。如需詳細資訊，請參閱Windows開發中心中的 [Windows SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/)。

1. 在安裝工作者代理程式的環境中開啟 Python 安裝位置。預設值為 `C:\Program Files\Python311`。有一個名為 的可執行檔`pythonservice.exe`。

1. 在`pythonservice.exe.manifest`相同位置建立名為 的新檔案。新增下列項目：

   ```
   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
   <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
     <assemblyIdentity type="win32" name="pythonservice" processorArchitecture="x86" version="1.0.0.0"/>
     <application xmlns="urn:schemas-microsoft-com:asm.v3">
       <windowsSettings>
         <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
       </windowsSettings>
     </application>
   </assembly>
   ```

1. 開啟命令提示字元，並在您建立的資訊清單檔案的位置執行下列命令：

   ```
   "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86\mt.exe" -manifest pythonservice.exe.manifest -outputresource:pythonservice.exe;#1
   ```

   您應該會看到類似下列的輸出：

   ```
   Microsoft (R) Manifest Tool
   Copyright (c) Microsoft Corporation.
   All rights reserved.
   ```

工作者現在可以存取長路徑。若要清除，請移除 `pythonservice.exe.manifest` 檔案並解除安裝 SDK。

## 設定截止日期雲端工作者代理程式
<a name="worker-agent-config"></a>

您可以透過三種方式設定截止日期雲端工作者代理程式設定。我們建議您透過執行 `install-deadline-worker`工具來使用作業系統設定。

工作者代理程式不支援在 Windows 上以網域使用者身分執行 。若要以網域使用者身分執行任務，您可以在設定執行任務的佇列使用者時指定網域使用者帳戶。如需詳細資訊，請參閱[《截止日期雲端使用者指南》中的截止日期雲端佇列](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/queues.html)的步驟 7。 *AWS *

**命令列引**數 — 當您從命令列執行截止日期雲端工作者代理程式時，可以指定引數。某些組態設定無法透過命令列引數使用。若要查看所有可用的命令列引數，請輸入 `deadline-worker-agent --help`。

**環境變數** — 您可以透過設定以 開頭的環境變數，來設定截止日期雲端工作者代理程式`DEADLINE_WORKER_`。例如，若要查看所有可用的命令列引數，您可以使用 將工作者代理程式的輸出`export DEADLINE_WORKER_VERBOSE=true`設定為詳細。如需更多範例和資訊，請參閱 `/etc/amazon/deadline/worker.toml.example` 上的 Linux或 `C:\ProgramData\Amazon\Deadline\Config\worker.toml.example`上的 Windows。

**組態檔案** — 安裝工作者代理程式時，它會建立位於 `/etc/amazon/deadline/worker.toml`Linux或 `C:\ProgramData\Amazon\Deadline\Config\worker.toml`上的組態檔案Windows。工作者代理程式會在啟動時載入此組態檔案。您可以使用範例組態檔案 (`/etc/amazon/deadline/worker.toml.example` 上的 Linux或 `C:\ProgramData\Amazon\Deadline\Config\worker.toml.example`上的 Windows)，根據您的特定需求量身打造預設的工作者代理程式組態檔案。

最後，我們建議您在部署軟體並如預期運作*之後*，為工作者代理程式啟用自動關閉。這可讓工作者機群在需要時擴展，並在任務完成時關閉。自動擴展有助於確保您僅使用所需的資源。若要讓自動擴展群組啟動的執行個體關閉，您必須將 `shutdown_on_stop=true`新增至`worker.toml`組態檔案。

**啟用自動關閉**

身為 **root** 使用者：
+ 使用參數 安裝工作者代理程式**--allow-shutdown**。

------
#### [ Linux ]

  輸入：

  ```
  /opt/deadline/worker/bin/install-deadline-worker \
    --farm-id FARM_ID \
    --fleet-id FLEET_ID \
    --region REGION \
    --allow-shutdown
  ```

------
#### [ Windows ]

  輸入：

  ```
  install-deadline-worker ^
    --farm-id FARM_ID ^
    --fleet-id FLEET_ID ^
    --region REGION ^
    --allow-shutdown
  ```

------

## 建立任務使用者和群組
<a name="create-job-user-and-group"></a>

本節說明客服人員使用者與佇列上`jobRunAsUser`定義的 之間所需的使用者和群組關係。

Deadline Cloud 工作者代理程式應以主機上的專用代理程式特定使用者身分執行。您應該設定截止日期雲端佇列的 `jobRunAsUser` 屬性，以便工作者以特定的作業系統使用者和群組身分執行佇列任務。此組態表示您可以控制任務擁有的共用檔案系統許可。它也為您的任務和工作者代理程式使用者之間提供重要的安全界限。

**Linux 任務使用者和群組**

若要設定本機工作者代理程式使用者 和 `jobRunAsUser`，請確定您符合下列要求。如果您使用的是 Linux 可插拔身分驗證模組 (PAM)，例如 Active Directory 或 LDAP，您的程序可能會有所不同。

工作者代理程式使用者和共用`jobRunAsUser`群組會在您安裝工作者代理程式時設定。預設值為 `deadline-worker-agent`和 `deadline-job-users`，但您可以在安裝工作者代理程式時變更這些預設值。

```
install-deadline-worker \
    --user AGENT_USER_NAME \
    --group JOB_USERS_GROUP
```

命令應以根使用者身分執行。
+ 每個 `jobRunAsUser`都應有一個相符的主要群組。使用 `adduser`命令建立使用者通常會建立相符的主要群組。

  ```
  adduser -r -m jobRunAsUser
  ```
+ 的主要群組`jobRunAsUser`是工作者客服人員使用者的次要群組。共用群組可讓工作者代理程式在任務執行時提供檔案。

  ```
  usermod -a -G jobRunAsUser deadline-worker-agent
  ```
+ `jobRunAsUser` 必須是共用任務群組的成員。

  ```
  usermod -a -G deadline-job-users jobRunAsUser
  ```
+ `jobRunAsUser` 不得屬於工作者代理程式使用者的主要群組。工作者代理程式寫入的敏感檔案由代理程式的主要群組擁有。如果 `jobRunAsUser`是此群組的一部分，則工作者代理程式檔案可供工作者上執行的任務存取。
+ 預設值 AWS 區域 必須符合工作者所屬的陣列區域。這應該套用到工作者上的所有`jobRunAsUser`帳戶。

  ```
  sudo -u jobRunAsUser aws configure set default.region aws-region
  ```
+ 工作者代理程式使用者必須能夠以 身分執行`sudo`命令`jobRunAsUser`。執行下列命令以開啟編輯器來建立新的 sudoers 規則：

  ```
  visudo -f /etc/sudoers.d/deadline-worker-job-user
  ```

  將下列項目新增至 檔案：

  ```
  # Allows the Deadline Cloud worker agent OS user to run commands
   # as the queue OS user without requiring a password.
  deadline-worker-agent ALL=(jobRunAsUser) NOPASSWD:ALL
  ```

下圖說明代理程式使用者與與機群相關聯佇列`jobRunAsUser`的使用者和群組之間的關係。

![\[客服人員使用者與佇列jobRunAsUser上 之間的關係圖例。\]](http://docs.aws.amazon.com/zh_tw/deadline-cloud/latest/developerguide/images/worker_users_and_groups.png)


**Windows 使用者**

若要使用Windows使用者做為 `jobRunAsUser`，必須符合下列要求：
+ 所有佇列`jobRunAsUser`使用者都必須存在。
+ 他們的密碼必須符合佇列`JobRunAsUser`欄位中指定的秘密值。如需說明，請參閱[《截止日期雲端使用者指南》中的截止日期雲端佇列](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/queues.html)的步驟 7。 *AWS *
+  代理程式使用者必須能夠以這些使用者身分登入。

## 保護您的工作者主機
<a name="securing-worker-host"></a>

設定工作者主機時，請遵循安全最佳實務來保護敏感資訊，並維護適當的存取控制。

### 設定日誌資料夾許可
<a name="configuring-log-folder-permissions"></a>

工作者代理程式會撰寫日誌檔案，其中可能包含來自主機組態指令碼和任務執行的敏感資訊。`install-deadline-worker` 命令會建立具有安全許可的日誌目錄。如果您需要在安裝之前手動建立目錄，請使用下列程序來比對服務受管機群使用的許可：

------
#### [ Linux ]

**在 上設定日誌目錄許可 Linux**

1. 建立日誌目錄：

   ```
   sudo mkdir -p /var/log/amazon/deadline
   ```

1. 將擁有者和群組設定為工作者代理程式使用者：

   ```
   sudo chown -R deadline-worker:deadline-worker /var/log/amazon/deadline
   ```

1. 將許可設定為 750：

   ```
   sudo chmod -R 750 /var/log/amazon/deadline
   ```

   這些許可可確保只有工作者代理程式使用者和群組可以存取日誌檔案，防止任務使用者和其他未經授權的使用者讀取潛在的敏感資訊。

------
#### [ Windows ]

**在 上設定日誌目錄許可 Windows**

1. 開啟管理員 PowerShell 終端機。

1. 建立日誌目錄：

   ```
   New-Item -ItemType Directory -Force -Path "$env:PROGRAMDATA\Amazon\Deadline\Logs"
   ```

1. 設定受限 ACLs以僅允許工作者代理程式使用者和管理員：

   ```
   $acl = Get-Acl "$env:PROGRAMDATA\Amazon\Deadline\Logs"
   $acl.SetAccessRuleProtection($true, $false)
   $acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) }
   $agentRule = New-Object System.Security.AccessControl.FileSystemAccessRule("deadline-worker", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
   $adminRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
   $acl.AddAccessRule($agentRule)
   $acl.AddAccessRule($adminRule)
   Set-Acl "$env:PROGRAMDATA\Amazon\Deadline\Logs" $acl
   ```

   這些命令限制只有工作者代理程式使用者和管理員群組才能存取日誌目錄，防止任務使用者和其他未經授權的使用者讀取潛在的敏感資訊。

------