排除 AWS OpsWorks for Chef Automate 的故障 - AWS OpsWorks

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

排除 AWS OpsWorks for Chef Automate 的故障

重要

AWS OpsWorks 因为 Chef Automate 不再接受新客户。现有客户在 2024 年 5 月 5 日之前不会受到影响,届时该服务将不可用。我们建议现有客户迁移到 Chef SaaS 或其他替代解决方案。有关更多信息,请参阅Chef Automate 生命周期终止常见问题解答的 AWS OpsWorks

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

一般故障排除技巧

如果您无法创建或使用 Chef 服务器,可查看错误消息或日志来帮助您对问题进行故障排除。下列任务描述了在您排除 Chef 服务器问题故障时通常应从哪些方面入手。有关特定错误和解决方案的信息,请参阅本主题的针对特定错误进行故障排除部分。

  • 如果 Chef 服务器无法启动,请使用 AWS OpsWorks for Chef Automate 控制台查看错误消息。在 Chef 服务器详细信息页面上,与服务器启动和运行相关的错误消息将显示在页面顶部。错误可能来自 AWS OpsWorks for Chef Automate、AWS CloudFormation 或 (用来创建 Chef 服务器的服务)。在详细信息页面上,您还可查看正在运行的服务器上发生的事件,其中可能会包含故障事件消息。

  • 要帮助解决 EC2 问题,请通过使用 SSH 连接到您的服务器实例并查看日志。EC2 实例日志存储在 /var/log/aws/opsworks-cm 目录中。当 AWS OpsWorks for Chef Automate 启动 Chef 服务器时,这些日志会捕获命令输出。

针对特定错误进行故障排除

服务器处于连接丢失状态

问题:服务器的状态显示为连接丢失

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

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

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

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

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

    3. 信任关系选项卡上,验证服务角色是否具有信任 opsworks-cm.amazonaws.com 服务代表您代入角色的信任策略。有关如何对角色使用信任策略的更多信息,请参阅修改角色(控制台)或AWS安全博客文章《如何在 IAM 角色中使用信任策略》

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

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

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

    3. 信任关系选项卡上,验证服务角色是否具有信任 ec2.amazonaws.com 服务代表您代入角色的信任策略。有关如何对角色使用信任策略的更多信息,请参阅修改角色(控制台)或AWS安全博客文章《如何在 IAM 角色中使用信任策略》

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

    1. 选择名为 aws-opsworks-cm-instance- 服务器名称的 EC2 实例。

    2. 实例状态菜单,选择启动实例

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

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

如果执行上述步骤后服务器状态仍为连接丢失,请尝试以下方法之一。

托管节点显示在 Chef Automate 控制面板的“Missing”列中

问题:一个托管节点显示在 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 命令失败并返回错误

问题:您尝试运行 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 插件。

chef gem install knife-opc

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

knife opc org user add default pivotal

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

服务器创建失败,并返回“requested configuration is currently not supported”消息

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

原因:可能为 Chef Automate 服务器指定了不支持的实例类型。如果您选择在具有非默认租赁的 VPC 中创建 Chef Automate 服务器,例如适用于专用实例的 VPC,则指定 VPC 内的所有实例也必须为专用或主机租赁。由于某些实例类型 (如 t2) 只适用于默认租赁,指定 VPC 可能不支持 Chef Automate 服务器实例类型,因此服务器创建失败。

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

Chef 服务器未识别 Chef Automate 控制面板中添加的组织名称

问题:您已在 Chef Automate 控制面板中添加新的工作流程组织名称,或在无人参与节点关联脚本中指定了 "default" 之外的 CHEF_AUTOMATE_ORGANIZATION 值,但节点关联失败。您的 AWS OpsWorks for Chef Automate 服务器未识别新的组织名称。

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

解决方案:要创建在 Chef 服务器上识别的新组织,请使用 knife opc org create 命令,或运行 chef-server-ctl org-create

无法创建服务器的 Amazon EC2 实例

问题:服务器创建失败,并返回类似以下的错误消息:“The following resource(s) failed to create: [EC2Instance]。Failed to receive 1 resource signal(s) within the specified duration.”

原因:很可能的原因是 EC2 实例没有网络访问权限。

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

服务角色错误阻止服务器创建

问题:服务器创建失败,并返回错误消息,指示“Not authorized to perform sts:AssumeRole.”

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

解决方案:打开 AWS OpsWorks for Chef Automate 控制台并通过它生成新的服务角色和实例配置文件角色。如果您希望使用您自己的服务角色,请将 AWSOpsWorksCMServiceRole 策略附加到该角色。验证 opsworks-cm.amazonaws.com 在角色的 Trust Relationships 中随服务一起列出。确认与 Chef 服务器关联的服务角色已附加 AWSOpsWorksCMServiceRole 托管策略。

超出弹性 IP 地址限制

问题:服务器创建失败,并返回错误消息,指示“The following resource(s) failed to create: [EIP, EC2Instance]。Resource creation cancelled, the maximum number of addresses has been reached.”

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

解决方案:您可释放现有 EIP 地址或删除您的账户当前未使用的地址,也可联系 AWS 客户支持提高与您的账户关联的 EIP 地址的限额。

无法登录 Chef Automate 控制面板

问题:Chef Automate 控制面板显示类似以下的错误:“Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://myserver-name.region.opsworks-cm.io/api/v0/e/default/verify-token。(Reason: CORS header 'Access-Control-Allow-Origin' missing)”。错误也可能类似于“The User Id / Password combination entered is incorrect.”

原因:Chef Automate 控制面板显式设置了 FQDN,并且不接受相对 URL。此时,您无法使用 Chef 服务器的 IP 地址登录;您只能使用服务器的 DNS 名称登录。

解决方案:使用 Chef 服务器的 DNS 名称条目而不是其 IP 地址来登录 Chef Automate 控制面板。您也可通过运行 AWS CLI 命令尝试重置 Chef Automate 控制面板凭证,如 重置 Chef Automate 控制面板的凭证中所述。

无人参与节点关联失败

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

原因:当您未将 IAM 角色设置为允许 opsworks-cm API 调用与新的 EC2 实例通信的实例配置文件时,可能会出现此问题。

解决方案:将一个策略附加到您的 EC2 实例配置文件以允许 AssociateNodeDescribeNodeAssociationStatus API 调用与 EC2 一起工作,如在 AWS OpsWorks for Chef Automate 自动添加节点中所述。

系统维护失败

AWS OpsWorks CM 执行每周系统维护可确保 AWS OpsWorks for Chef Automate 服务器上始终运行 Chef 服务器和 Chef Automate 服务器的最新次要版本,包括安全更新。如果由于任何原因导致系统维护失败,则 AWS OpsWorks CM 会通知您该故障。有关系统维护的更多信息,请参阅 AWS OpsWorks for Chef Automate 中的系统维护

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

服务角色或实例配置文件错误会阻止系统维护

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

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

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

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

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

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

    3. 验证 opsworks-cm.amazonaws.com 在角色的 Trust Relationships 中随服务一起列出。有关如何对角色使用信任策略的更多信息,请参阅修改角色(控制台)或AWS安全博客文章《如何在 IAM 角色中使用信任策略》

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

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

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

    3. 信任关系选项卡上,验证服务角色是否具有信任 ec2.amazonaws.com 服务代表您代入角色的信任策略。有关如何对角色使用信任策略的更多信息,请参阅修改角色(控制台)或AWS安全博客文章《如何在 IAM 角色中使用信任策略》

其他帮助和支持

如果本主题没有描述您的特定问题,或者您已尝试本主题中的建议,但问题仍然存在,请访问 AWS OpsWorks 论坛

您也可访问 AWS Support Center 。AWS 支持中心是创建和管理 AWS 支持案例的中心。AWS 支持中心还提供指向其他有用资源(如论坛、技术常见问题、服务运行状况以及 AWS Trusted Advisor)的链接。