

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

# 将现有 Linux 堆栈迁移到新的 Chef 版本
<a name="workingcookbook-chef11-migrate"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

你可以使用 OpsWorks Stacks 控制台、API 或 CLI 将你的 Linux 堆栈迁移到较新的 Chef 版本。但是，您可能需要修改配方以使其与更新的版本兼容。在准备迁移堆栈时，请考虑以下内容。
+ 您无法通过编辑或克隆 OpsWorks堆栈将堆栈版本从 Chef 11 更改为 Chef 12。使用这部分介绍的过程无法执行 Chef 主要版本升级。有关将 Chef 11.10 转换为 Chef 12 的更多信息，请参阅[实施配方：Chef 12](workingcookbook-chef12-linux.md)。
+ 从一个 Chef 版本转换为另一版本需要进行许多更改，其中一些是重大更改。

  有关将 Chef 0.9 转换为 Chef 11.4 的更多信息，请参阅[迁移到新的 Chef 版本](#workingcookbook-chef11-migrate)。有关将 Chef 11.4 转换为 Chef 11.10 的更多信息，请参阅[实施配方：Chef 11.10](workingcookbook-chef11-10.md)。有关将 Chef 11.10 转换为 Chef 12 的更多信息，请参阅[实施配方：Chef 12](workingcookbook-chef12-linux.md)。
+ Chef 运行对不同的 Chef 版本使用不同的 Ruby 版本：Chef 0.9 和 Chef 11.4 堆栈 (Ruby 1.8.7)、Chef 11.10 堆栈 (Ruby 2.0.0) 以及 Chef 12 堆栈 (Ruby 2.1.6)。

  有关更多信息，请参阅 [Ruby 版本](workingcookbook-ruby.md)。
+ Chef 11.10 堆栈安装说明书的方式与 Chef 0.9 或 Chef 11.4 堆栈不同。

  在将使用自定义说明书的堆栈迁移到 Chef 11.10 时，这种差别可能会引发问题。有关更多信息，请参阅 [说明书安装和优先顺序](workingcookbook-chef11-10.md#workingcookbook-chef11-10-override)。

 以下是针对将 Chef 堆栈迁移到更新的 Chef 版本的建议指南：

**将堆栈迁移到更新的 Chef 版本**

1. [克隆您的生产堆栈](workingstacks-cloning.md)。在 **Clone Stack** 页面上，单击 **Advanced>>** 可显示 **Configuration Management** 部分，然后将 **Chef version** 更改为高一级别的版本。
**注意**  
如果您从 Chef 0.9 堆栈开始，无法直接升级到 Chef 11.10；您必须先升级到 Chef 11.4。如果您希望在测试您的配方之前将您的堆栈迁移到 Chef 11.10，请等待 20 分钟，以便执行更新，然后将堆栈从 11.4 升级到 11.10。

1. 将实例添加到层中，并在测试或临时系统中测试克隆的堆栈的应用程序和说明书。有关更多信息，请参阅 [All about Chef ...](https://docs.chef.io/index.html)。

1. 当测试结果符合您的要求时，请执行以下操作之一：
   + 如果这是您所需的 Chef 版本，您可以使用克隆的堆栈作为您的生产堆栈，否则，您可以重置您的生产堆栈上的 Chef 版本。
   + 如果要分两个阶段将 Chef 0.9 堆栈迁移到 Chef 11.10，可以重复执行将堆栈从 Chef 11.4 迁移到 Chef 11.10 的过程。

**注意**  
测试配方时，您可以[使用 SSH 连接到](workinginstances-ssh.md)实例，然后使用[实例代理 CLI](agent.md) [run\$1command](agent-run.md) 命令运行与各个生命周期事件关联的配方。代理 CLI 对于测试 Setup 配方尤其有用，因为您甚至可以在 Setup 失败且实例没有处于在线状态的情况下使用它。您还可以使用 [Setup 堆栈命令](workingstacks-commands.md)来返回 Setup 配方，但该命令仅在 Setup 成功且实例处于在线状态的情况下可用。

可以将正在运行的堆栈更新到新的 Chef 版本。

**将正在运行的堆栈更新到新的 Chef 版本**

1. [编辑堆栈](workingstacks-edit.md)以更改 **Chef version** 堆栈设置。

1. 保存新设置并等待 OpsWorks Stacks 更新实例，这通常需要 15-20 分钟。

**重要**  
OpsWorks Stacks 不会将 Chef 版本更新与生命周期事件同步。如果要更新生产堆栈上的 Chef 版本，您必须谨慎，以确保在更新完成之后再进入下一个[生命周期事件](workingcookbook-events.md)。如果发生了事件（通常为 Deploy 或 Configure 事件），实例代理会更新您的自定义说明书，并运行该事件的已分配配方，无论版本更新是否已完成。关于确定版本更新何时已完成，没有直接的方法，但部署日志中包含 Chef 版本。