

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用管理员权限运行主机配置脚本
<a name="smf-admin"></a>

主机配置脚本允许您对服务管理的车队工作人员执行管理任务，例如安装软件。这些脚本以更高的权限运行（开`sudo`启Linux，管理员开启Windows），使您可以灵活地为系统配置工作器。

Deadline Cloud 在工作人员进入`STARTING`状态之后和运行任何任务之前运行脚本。

**重要**  
该脚本以提升的权限运行。您有责任确保脚本不会引入任何安全问题。  
使用主机配置脚本时，您负责监控队列的运行状况。

主机配置脚本的常见用途包括：
+ 安装需要管理员访问权限的软件
+ 安装Docker容器
+ 安装第三方云存储解决方案，例如LucidLink. 有关演练，请参阅 For M&E 博客[上的 Deadline Cloud LucidLink 使用服务托管队列脚本 AWS 进行设置](https://aws.amazon.com/blogs/media/set-up-lucidlink-with-service-managed-fleet-scripts-for-aws-deadline-cloud/)。

您可以使用控制台或使用创建和更新主机配置脚本 AWS CLI。

------
#### [ Console ]

1. 在**舰队详细信息**页面上，选择**配置**选项卡。

1. 在 “**脚本**” 字段中，输入要使用提升权限运行的脚本。您可以选择 “**导入**” 从您的工作站加载脚本。

1. 设置运行脚本的超时时间（以秒为单位）。默认值为 300 秒（5 分钟）。

1. 选择 “**保存更改**” 以保存脚本。

------
#### [ Create with CLI ]

使用以下 AWS CLI 命令创建带有主机配置脚本的队列。用您的信息替换*placeholder*文本。

```
aws deadline create-fleet \
--farm-id farm-12345 \
--display-name "fleet-name" \
--max-worker-count 1 \
--configuration '{
"serviceManagedEc2": {
  "instanceCapabilities": {
    "vCpuCount": {"min": 2},
    "memoryMiB": {"min": 4096},
    "osFamily": "linux",
    "cpuArchitectureType": "x86_64"
  },
  "instanceMarketOptions": {"type":"spot"}
}
}' \
--role-arn arn:aws:iam::111122223333:role/role-name \
--host-configuration '{ "scriptBody": "script body", "scriptTimeoutSeconds": timeout value}'
```

------
#### [ Update with CLI ]

使用以下 AWS CLI 命令更新队列的主机配置脚本。用您的信息替换*placeholder*文本。

```
aws deadline update-fleet \
--farm-id farm-12345 \
--fleet-id fleet-455678 \
--host-configuration '{ "scriptBody": "script body", "scriptTimeoutSeconds": timeout value}'
```

------

以下脚本演示：
+ 脚本可用的环境变量
+ 这些 AWS 凭据在外壳中起作用
+ 该脚本正在提升的 shell 中运行

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

使用以下脚本显示脚本正在使用`root`权限运行：

```
# Print environment variables
set 
# Check AWS Credentials
aws sts get-caller-identity
```

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

使用以下PowerShell脚本显示脚本正在以管理员权限运行：

```
Get-ChildItem env: | ForEach-Object { "$($_.Name)=$($_.Value)" }
aws sts get-caller-identity
function Test-AdminPrivileges {
  $currentUser = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
  $isAdmin = $currentUser.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
  
  return $isAdmin
}

if (Test-AdminPrivileges) {
  Write-Host "The current PowerShell session is elevated (running as Administrator)."
} else {
  Write-Host "The current PowerShell session is not elevated (not running as Administrator)."
}
exit 0
```

------

## 主机配置脚本疑难解答
<a name="smf-admin-troubleshooting"></a>

运行主机配置脚本时：
+ 成功时：工作人员负责工作
+ 失败时（非零退出代码或崩溃）：
  + 工作人员关机了

  队列使用最新的主机配置脚本自动启动新的工作程序

要监视脚本，请执行以下操作：

1. 在 Deadline Cloud 控制台中打开舰队页面。

1. 选择**查看工作人员**以打开 Deadline Cloud 监视器。

1. 在 “监控” 页面中查看工作人员的状态。

**提示**  
在测试主机配置脚本时，请将队列的最大工作器数设置为 1，以避免在迭代脚本时启动多个工作程序。

重要提示：
+ 由于错误而关闭的工作人员不在监视器中的工作人员列表中。使用 CloudWatch Logs 查看以下日志组中的工作日志：

  ```
  /aws/deadline/farm-XXXXX/fleet-YYYYY
  ```

  在该日志组中，查找名为的流`worker-ZZZZZ`。
+ CloudWatch 日志会根据您配置的保留期保留工作人员日志。

### 监控主机配置脚本的执行情况
<a name="smf-admin-monitoring"></a>

使用主机配置脚本，您可以完全控制 Deadline Cloud 工作程序。您可以安装任何软件包、重新配置操作系统参数或挂载共享文件系统。借助此高级功能和 Deadline Cloud 扩展到数千名工作人员的功能，您可以监控配置脚本何时成功执行或失败。

我们建议使用以下解决方案来监控主机配置脚本的执行情况。

#### CloudWatch 日志监控
<a name="smf-admin-cloudwatch-logs"></a>

所有队列主机配置日志都流式传输到队列的 CloudWatch 日志组，特别是流式传输到工作人员的 CloudWatch 日志流。例如，`/aws/deadline/farm-123456789012/fleet-777788889999`是 farm `123456789012`、fleet 的日志组`777788889999`。

例如，每个 worker 都会配置一个专用的日志流`worker-123456789012`。主机配置日志包括日志标语，例如*正在运行主机配置脚本*和*已完成运行主机配置脚本，退出代码：0*。脚本的退出代码包含在已完成的横幅中，可以使用 CloudWatch 工具进行查询。

#### CloudWatch 日志见解
<a name="smf-admin-log-insights"></a>

CloudWatch Logs Insights 提供了分析日志信息的高级功能。例如，以下 Log Insights 查询解析主机配置退出代码，按时间排序：

```
fields @timestamp, @message, @logStream, @log
| filter @message like /Finished running Host Configuration Script/
| parse @message /exit code: (?<exit_code>\d+)/
| display @timestamp, exit_code
| sort @timestamp desc
```

有关 [Lo CloudWatch gs Insights 的更多信息，请参阅 *Amazon Logs 用户指南中的使用 CloudWatch CloudWatch 日志*见解分析日志数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html)。

##### 工作代理结构化日志
<a name="smf-admin-structured-logging"></a>

Deadline Cloud 的工作代理将结构化 JSON 日志发布到 CloudWatch。工作人员代理提供各种结构化日志，用于分析工作人员的健康状况。有关更多信息，请参阅 De [adline Cloud 工作者代理登录](https://github.com/aws-deadline/deadline-cloud-worker-agent/blob/mainline/docs/logging.md) GitHub。

结构化日志的属性被解压缩为 Log Insights 中的字段。您可以使用此 CloudWatch 功能来统计和分析主机配置启动失败。例如，可以使用 count 和 bin 查询来确定故障发生的频率：

```
fields @timestamp, @message, @logStream, @log
| sort @timestamp desc
| filter message like /Worker Agent host configuration failed with exit code/
| stats count(*) by exit_code, bin(1h)
```

#### CloudWatch 指标和警报的指标过滤器
<a name="smf-admin-metric-filters"></a>

您可以设置 CloudWatch 指标筛选条件以从日志中生成 CloudWatch 指标。指标筛选器允许您创建警报和仪表板，用于监控主机配置脚本的执行情况。

**创建指标筛选条件**

1. 打开控制 CloudWatch 台。

1. 在导航窗格中，选择**日志**，然后选择**日志组**。

1. 选择您的舰队的日志组。

1. 选择 **Create metric filter（创建指标筛选条件）**。

1. 使用以下方法之一定义您的过滤器模式：
   + **对于成功指标：**

     ```
     {$.message = "*Worker Agent host configuration succeeded.*"}
     ```
   + **对于失败指标：**

     ```
     {$.exit_code != 0 && $.message = "*Worker Agent host configuration failed with exit code*"}
     ```

1. 选择 “**下一步**” 以创建具有以下值的指标：
   + **指标命名空间：**您的指标命名空间（例如，**MyDeadlineFarm**）
   + **指标名称：**您请求的指标名称（例如，**host\$1config\$1failure**）
   + **指标值：****1**（每个实例的计数为 1）
   + **默认值：**留空
   + **单位：****Count**

创建指标筛选器后，您可以将标准 CloudWatch 警报配置为在主机配置失败率上升时采取措施，或者将指标添加到 CloudWatch 仪表板中以进行 day-to-day操作和监控。

有关更多详细信息，请参阅 *Amazon CloudWatch 日志用户指南*中的[筛选条件和模式语法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)。