

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

# 故障排除 AWS OpsWorks for Chef Automate
<a name="troubleshoot-opscm"></a>

**重要**  
AWS OpsWorks for Chef Automate 已于 2024 年 5 月 5 日停用，新客户和现有客户均已禁用。我们建议现有客户迁移到 Chef SaaS 或其他替代解决方案。如果您有任何疑问，可以通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

本主题包含一些常见 AWS OpsWorks for Chef Automate 问题以及这些问题的建议解决方案。

**Topics**
+ [一般故障排除技巧](#w2ab1b9c52b9)
+ [针对特定错误进行故障排除](#tshooterrors-chef)
+ [其他帮助和支持](#tshooterrors-chef-support)

## 一般故障排除技巧
<a name="w2ab1b9c52b9"></a>

如果您无法创建或使用 Chef 服务器，可查看错误消息或日志来帮助您对问题进行故障排除。下列任务描述了在您排除 Chef 服务器问题故障时通常应从哪些方面入手。有关特定错误和解决方案的信息，请参阅本主题的[针对特定错误进行故障排除](#tshooterrors-chef)部分。
+ 在 Chef 服务器无法启动时，使用 AWS OpsWorks for Chef Automate 控制台查看错误消息。在 Chef 服务器详细信息页面上，与服务器启动和运行相关的错误消息将显示在页面顶部。错误可能来自用于创建 Chef 服务器的 AWS OpsWorks for Chef Automate CloudFormation EC2、或 Amazon 服务。在详细信息页面上，您还可查看正在运行的服务器上发生的事件，其中可能会包含故障事件消息。
+ 要帮助解决 EC2 问题，请使用 SSH 连接到服务器的实例，然后查看日志。 EC2 实例日志存储在`/var/log/aws/opsworks-cm`目录中。这些日志在 AWS OpsWorks for Chef Automate 启动 Chef 服务器时捕获命令输出。

## 针对特定错误进行故障排除
<a name="tshooterrors-chef"></a>

**Topics**
+ [服务器处于**连接丢失**状态](#tshooterrors-chef-connection-lost)
+ [托管节点显示在 Chef Automate 控制面板的“Missing”列中](#w2ab1b9c52c11b6)
+ [无法创建 Chef 保险库；`knife vault` 命令失败并返回错误](#w2ab1b9c52c11b8)
+ [服务器创建失败，并返回“requested configuration is currently not supported”消息](#w2ab1b9c52c11c10)
+ [Chef 服务器未识别 Chef Automate 控制面板中添加的组织名称](#w2ab1b9c52c11c12)
+ [无法创建服务器的 Amazon EC2 实例](#w2ab1b9c52c11c14)
+ [服务角色错误阻止服务器创建](#w2ab1b9c52c11c16)
+ [超出弹性 IP 地址限制](#w2ab1b9c52c11c18)
+ [无法登录 Chef Automate 控制面板](#w2ab1b9c52c11c20)
+ [无人参与节点关联失败](#w2ab1b9c52c11c22)
+ [系统维护失败](#tshooterrors-chef-maintenance-fails)

### 服务器处于**连接丢失**状态
<a name="tshooterrors-chef-connection-lost"></a>

**问题：**服务器的状态显示为**连接丢失**。

**原因：**这种情况最常发生在外部实体对 AWS OpsWorks for Chef Automate 服务器或其支持资源 OpsWorks 进行更改时。 OpsWorks 无法连接到处于**连接丢失**状态的 Chef Automate 服务器来处理维护任务，例如创建备份、应用操作系统补丁或更新 Chef Automate。因此，您的服务器可能缺少重要更新，容易受到安全问题的影响，或者无法按预期运行。

**解决方案：**尝试以下步骤来恢复服务器的连接。

1. 请确保您的服务角色具有所有必需的权限。

   1. 在服务器的**设置**页面上，在**网络和安全**中，选择服务器正在使用的服务角色的链接。这将将服务角色打开以供在 IAM 控制台中查看。

   1. 在**权限**选项卡上，确认 `AWSOpsWorksCMServiceRole` 是否在**权限策略**列表中。如果未列出该托管策略，请手动将 `AWSOpsWorksCMServiceRole` 托管策略添加到角色中。

   1. 在**信任关系**选项卡上，验证服务角色是否具有信任 `opsworks-cm.amazonaws.com` 服务代表您代入角色的信任策略。有关如何对角色使用信任策略的更多信息，请参阅[修改角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html)或 AWS 安全博客文章《[如何在 IAM 角色中使用信任策略》](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)。

1. 请确保您的实例配置文件具有所有必需的权限。

   1. 在服务器的**设置**页面上，在**网络和安全**中，选择服务器正在使用的实例配置文件的链接。这将打开实例配置文件以在 IAM 控制台中查看。

   1. 在**权限**选项卡上，确认 `AmazonEC2RoleforSSM` 和 `AWSOpsWorksCMInstanceProfileRole` 是否在**权限策略**列表中。如果未列出其中一个或两个托管策略，请手动将这些托管策略添加到角色中。

   1. 在**信任关系**选项卡上，验证服务角色是否具有信任 `ec2.amazonaws.com` 服务代表您代入角色的信任策略。有关如何对角色使用信任策略的更多信息，请参阅[修改角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html)或 AWS 安全博客文章《[如何在 IAM 角色中使用信任策略》](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)。

1. 在 Amazon EC2 控制台中，确保您与 AWS OpsWorks for Chef Automate 服务器所在区域位于同一区域，然后重启服务器正在使用的 EC2 实例。

   1. 选择名为的 EC2 实例`aws-opsworks-cm-instance-`*server-name*。

   1. 在**实例状态**菜单，选择**启动实例**。

   1. 等待最多 15 分钟让您的服务器重新启动并完全联机。

1. 在 AWS OpsWorks for Chef Automate 控制台的服务器详细信息页面上，验证服务器状态现在是否正**常**。

如果执行上述步骤后服务器状态仍为**连接丢失**，请尝试以下方法之一。
+ 通过[创建新服务器](gettingstarted-opscm-create.md)并[删除原始服务器](opscm-delete-server.md)来替换服务器。如果当前服务器上的数据对您很重要，请[从最近的备份中恢复服务器](opscm-chef-restore.md)，并验证数据是否为最新，[然后再删除未响应的原始服务器](opscm-delete-server.md)。
+ [请联系 AWS 支持](#tshooterrors-chef-support)。

### 托管节点显示在 Chef Automate 控制面板的“Missing”列中
<a name="w2ab1b9c52c11b6"></a>

**问题：**一个托管节点显示在 Chef Automate 控制面板的 **Missing** 列中。

**原因：**如果某个节点未连接到 Chef Automate 服务器的时间超过 12 小时，并且 `chef-client` 无法在该节点上运行，则该节点的状态将从 12 小时前的状态发生变化，并移动到 Chef Automate 控制面板的 **Missing** 列中。

**解决方案：**确认该节点处于联机状态。尝试运行 `knife node show node_name --run-list` 以查看 `chef-client` 能否在该节点上运行，或运行 `knife node show -l node_name` 以显示有关该节点的所有信息。该节点可能处于脱机状态或已断开网络连接。

### 无法创建 Chef 保险库；`knife vault` 命令失败并返回错误
<a name="w2ab1b9c52c11b8"></a>

**问题：**您尝试运行 `knife vault` 命令来在您的 Chef Automate 服务器上创建一个保管库，例如一个用于存储基于 Windows 的节点加入域所用的凭证的保管库。该命令返回类似以下的错误消息。

```
WARN: Auto inflation of JSON data is deprecated. Please pass in the class to inflate or use #edit_hash (CHEF-1) 
at /opt/chefdk/embedded/lib/ruby/2.3.0/forwardable.rb:189:in `edit_data'.Please see https://docs.chef.io/deprecations_json_auto_inflate.html 
for further details and information on how to correct this problem.
WARNING: pivotal not found in users, trying clients.
ERROR: ChefVault::Exceptions::AdminNotFound: FATAL: Could not find pivotal in users or clients!
```

当您远程运行 `knife user list` 时未返回关键用户，但当您在 Chef Automate 服务器上本地运行 `chef-server-ctl user-show` 命令时，可在结果中看到关键用户。换句话说，您的 `knife vault` 命令无法找到关键用户，但您知道它存在。

**原因：**虽然关键用户在 Chef 中被视为超级用户，并且具有完整权限，但它不属于任何组织，包括在 AWS OpsWorks for Chef Automate中使用的 `default` 组织。命令 `knife user list` 将返回属于您的 Chef 配置中的当前组织中的所有用户。`chef-server-ctl user-show` 命令将返回包括关键用户在内的所有用户，而不论用户属于哪个组织。

**解决方案：**要修复此问题，请通过运行 `knife opc` 将关键用户添加到默认组织。

首先，您需要安装 [knife-opc](https://github.com/chef/knife-opc) 插件。

```
chef gem install knife-opc
```

安装此插件后，运行以下命令将关键用户添加到默认组织。

```
knife opc org user add default pivotal
```

您可通过再次运行 `knife user list` 来确认关键用户是否为默认组织的一部分。`pivotal` 应会在结果中列出。然后，尝试再次运行 `knife vault`。

### 服务器创建失败，并返回“requested configuration is currently not supported”消息
<a name="w2ab1b9c52c11c10"></a>

**问题：**您尝试创建一台 Chef Automate 服务器，但服务器创建失败，并返回与“The requested configuration is currently not supported。Please check the documentation for supported configurations.”类似的错误消息。

**原因：**可能为 Chef Automate 服务器指定了不支持的实例类型。如果您选择在具有非默认租赁的 VPC 中创建 Chef Automate 服务器，例如适用于[专用实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)的 VPC，则指定 VPC 内的所有实例也必须为专用或主机租赁。由于某些实例类型 (如 t2) 只适用于默认租赁，指定 VPC 可能不支持 Chef Automate 服务器实例类型，因此服务器创建失败。

**解决方案：**如果您选择具有非默认租赁的 VPC，请使用 m4 实例类型，此类型可以支持专用租赁。

### Chef 服务器未识别 Chef Automate 控制面板中添加的组织名称
<a name="w2ab1b9c52c11c12"></a>

**问题：**您已在 Chef Automate 控制面板中添加新的工作流程组织名称，或在[无人参与节点关联脚本](opscm-unattend-assoc.md)中指定了 `"default"` 之外的 `CHEF_AUTOMATE_ORGANIZATION` 值，但节点关联失败。您的 AWS OpsWorks for Chef Automate 服务器未识别新的组织名称。

**原因：**工作流程组织名称和 Chef 服务器组织名称不同。您可在基于 Web 的 Chef Automate 控制面板中创建新的工作流程组织，而不是 Chef 服务器组织名称。您只能使用 Chef Automate 控制面板查看现有 Chef 服务器组织。您在 Chef Automate 控制面板中创建的新组织是一个工作流程组织，Chef 服务器未能识别。您无法通过在节点关联脚本中指定新的组织名称来创建它们。当在节点关联脚本中引用某个组织名称时，如果在此之前未将该组织添加到 Chef 服务器，则将导致节点关联失败。

**解决方案：**要创建在 Chef 服务器上识别的新组织，请使用 [https://docs.chef.io/plugin_knife_opc.html#opc-org-create](https://docs.chef.io/plugin_knife_opc.html#opc-org-create) 命令，或运行 [https://docs.chef.io/ctl_chef_server.html#organization-management](https://docs.chef.io/ctl_chef_server.html#organization-management)。

### 无法创建服务器的 Amazon EC2 实例
<a name="w2ab1b9c52c11c14"></a>

**问题：**服务器创建失败，并显示类似于以下内容的错误消息：“创建以下资源失败：[EC2实例]。Failed to receive 1 resource signal(s) within the specified duration.”

**原因：**这很可能是因为 EC2实例没有网络访问权限。

**解决方案：**确保实例具有出站 Internet 访问权限，并且 AWS 服务代理能够发出命令。请确保您的 VPC (具有单一公有子网的 VPC) 已启用 **DNS resolution**，并且您的子网已启用 **Auto-assign Public IP** 设置。

### 服务角色错误阻止服务器创建
<a name="w2ab1b9c52c11c16"></a>

**问题：**服务器创建失败，并显示一条错误消息，上面写着 “未授权执行 sts:” AssumeRole。

**原因：**当您使用的服务角色缺少足够的权限创建新服务器时，可能会出现此问题。

**解决方案：**打开 AWS OpsWorks for Chef Automate 控制台；使用控制台生成新的服务角色和实例配置文件角色。如果您希望使用自己的服务角色，请将 **AWSOpsWorks Rol CMService** e 策略附加到该角色。验证 **opsworks-cm.amazonaws.com** 在角色的 **Trust Relationships** 中随服务一起列出。验证与 Chef 服务器关联的服务角色是否附加了 **AWSOpsWorks CMService 角色**托管策略。

### 超出弹性 IP 地址限制
<a name="w2ab1b9c52c11c18"></a>

**问题：**服务器创建失败，并显示一条错误消息，指出 “以下资源创建失败：[EIP， EC2实例]。Resource creation cancelled, the maximum number of addresses has been reached.”

**原因：**当您的账户已使用最大数量的弹性 IP (EIP) 地址时，将会出现此问题。默认的 EIP 地址数量限制为 5。

**解决方案：**您可以释放现有 EIP 地址或删除您的账户未使用的 EIP 地址，也可以联系 Cust AWS omer Support 以增加与您的账户关联的 EIP 地址的限制。

### 无法登录 Chef Automate 控制面板
<a name="w2ab1b9c52c11c20"></a>

**问题：**Chef Automate 仪表板显示类似于以下内容的错误：“跨源请求已阻止：同源策略不允许读取输入的 https://myserver-name.region.opsworks-cm.io/api/v0/e/default/verify-token. (Reason: CORS header 'Access-Control-Allow-Origin' missing)". The error can also be similar to "The User Id / Password com bination 中的远程资源是不正确的。”

**原因：**Chef Automate 仪表板明确设置了 FQDN，并且不接受相对的。 URLs此时，您无法使用 Chef 服务器的 IP 地址登录；您只能使用服务器的 DNS 名称登录。

**解决方案：**使用 Chef 服务器的 DNS 名称条目而不是其 IP 地址来登录 Chef Automate 控制面板。您也可通过运行 AWS CLI 命令尝试重置 Chef Automate 控制面板凭证，如 [重置 Chef Automate 控制面板的凭证](opscm-resetchefcreds.md)中所述。

### 无人参与节点关联失败
<a name="w2ab1b9c52c11c22"></a>

**问题：**新的 Amazon EC2 节点的无人值守或自动关联失败。应该已经添加到 Chef 服务器的节点未显示在 Chef Automate 控制面板中，并且未在 `knife client show` 或 `knife node show` 命令的结果中列出。

**原因：**如果您没有将 IAM 角色设置为允许 `opsworks-cm` API 调用与新实例通信的实例配置文件，则可能会发生这种 EC2 情况。

**解决方案：**在您的 EC2 实例配置文件中附加允许`AssociateNode`和 `DescribeNodeAssociationStatus` API 调用的策略 EC2，如中所述[在中自动添加节点 AWS OpsWorks for Chef Automate](opscm-unattend-assoc.md)。

### 系统维护失败
<a name="tshooterrors-chef-maintenance-fails"></a>

AWS OpsWorks CM 每周执行系统维护，以确保最新次要版本的 Chef Server 和 Chef Automate Server（包括安全更新）始终在 AWS OpsWorks for Chef Automate 服务器上运行。如果由于任何原因导致系统维护失败，则 AWS OpsWorks CM 会通知您该故障。有关系统维护的更多信息，请参阅 [中的系统维护 AWS OpsWorks for Chef Automate](opscm-maintenance.md)。

本节介绍可能的失败原因并提出解决方案。

**Topics**
+ [服务角色或实例配置文件错误会阻止系统维护](#w2ab1b9c52c11c24b8)

#### 服务角色或实例配置文件错误会阻止系统维护
<a name="w2ab1b9c52c11c24b8"></a>

**问题：**系统维护失败，并显示一条错误消息，上面写着 “未授权执行 sts:AssumeRole” 或类似的权限错误消息。

**原因：**当您使用的服务角色或实例配置文件缺少在服务器上执行系统维护的足够权限时，可能会发生这种情况。

**解决方案：**确保您的服务角色和实例配置文件具有所有必需的权限。

1. 请确保您的服务角色具有所有必需的权限。

   1. 在服务器的**设置**页面上，在**网络和安全**中，选择服务器正在使用的服务角色的链接。这将将服务角色打开以供在 IAM 控制台中查看。

   1. 在**权限**选项卡上，验证 `AWSOpsWorksCMServiceRole` 是否已附加到该服务角色。如果 `AWSOpsWorksCMServiceRole` 未列出，则将此策略添加到角色。

   1. 验证 **opsworks-cm.amazonaws.com** 在角色的 **Trust Relationships** 中随服务一起列出。有关如何对角色使用信任策略的更多信息，请参阅[修改角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html)或 AWS 安全博客文章《[如何在 IAM 角色中使用信任策略》](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)。

1. 请确保您的实例配置文件具有所有必需的权限。

   1. 在服务器的**设置**页面上，在**网络和安全**中，选择服务器正在使用的实例配置文件的链接。这将打开实例配置文件以在 IAM 控制台中查看。

   1. 在**权限**选项卡上，确认 `AmazonEC2RoleforSSM` 和 `AWSOpsWorksCMInstanceProfileRole` 是否在**权限策略**列表中。如果未列出其中一个或两个托管策略，请手动将这些托管策略添加到角色中。

   1. 在**信任关系**选项卡上，验证服务角色是否具有信任 `ec2.amazonaws.com` 服务代表您代入角色的信任策略。有关如何对角色使用信任策略的更多信息，请参阅[修改角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html)或 AWS 安全博客文章《[如何在 IAM 角色中使用信任策略》](https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/)。

## 其他帮助和支持
<a name="tshooterrors-chef-support"></a>

如果本主题没有描述您的特定问题，或者您已尝试本主题中的建议，但问题仍然存在，请访问 [OpsWorks 论坛](https://forums.aws.amazon.com/forum.jspa?forumID=153&start=0)。

您也可访问 [AWS Support Center ](https://console.aws.amazon.com/support/home#/)。 AWS 支持中心是创建和管理 AWS 支持案例的中心。S AWS upport Center 还包括指向其他有用资源的链接，例如论坛 FAQs、技术、服务运行状况和 AWS Trusted Advisor。