

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

# 第 16 步：更新说明书以使用社区说明书
<a name="gettingstarted-cookbooks-community-cookbooks"></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 支持 团队联系。

最后，更新说明书以使用 Chef 社区提供的外部说明书中的功能。您用于此演练的外部说明书，可以通过 [Chef Supermarket](https://supermarket.chef.io/) (访问外部 Chef 说明书的一个普通地方) 获得。此外部说明书提供自定义资源，利用这个资源，您可以下载和安装应用程序，这类似于您在[第 4 步：更新说明书以安装程序包](gettingstarted-cookbooks-install-package.md)中执行的操作。不过，此资源除了可以安装程序包以外，还可以 Web 应用程序和其他类型的应用程序。

当一个说明书依赖另一个说明书时，您必须指定对另一个说明书的依赖项。要宣布和管理说明书依赖项，我们建议您使用一个名为 Berkshelf 的工具。有关如何在本地工作站上安装 Berkshelf 的更多信息，请参阅 Chef 网站上的[关于 Berkshelf](https://docs.chef.io/berkshelf.html)。

当您安装 Berkshelf 后，按照以下步骤来宣布说明书依赖项，然后创建可在外部说明书中调用资源的配方：

**宣布说明书依赖项**

1. 在您的本地工作站上的 `opsworks_cookbook_demo` 目录中，在 `metadata.rb` 文件的结尾添加以下行：

   ```
   depends "application", "5.0.0"
   ```

   这可宣布对一个名为 `application` 的说明书 (版本 5.0.0.) 的依赖项。

1. 从 `opsworks_cookbook_demo` 目录的根目录运行以下命令。命令末尾的句点是有意设计的。

   ```
   berks init .
   ```

   Berkshelf 创建的许多文件夹和文件都可以用于以后更高级的方案。对于此演练，我们需要的唯一文件是名为 `Berksfile` 的文件。

1. 将以下行添加到 `Berksfile` 文件的末尾处：

   ```
   cookbook "application", "5.0.0"
   ```

   这将告知 Berkshelf，您要使用 Berkshelf 从 Chef Supermarket 下载的[应用程序说明书版本 5.0.0](https://supermarket.chef.io/cookbooks/application/versions/5.0.0)。

1. 在终端处或在命令提示符下，在 `opsworks_cookbook_demo` 目录的根目录下运行以下命令：

   ```
   berks install
   ```

   Berkshelf 将创建一份您的说明书以及应用程序说明书的依赖项列表。Berkshelf 在下一个步骤中使用此依赖项列表。

**更新实例上的说明书并运行新的配方**

1. 在 `recipes` 目录的 `opsworks_cookbook_demo` 子目录中，创建名为 `dependencies_demo.rb` 的包含以下代码的文件：

   ```
   application "Install NetHack" do
     package "nethack.x86_64"
   end
   ```

   此方法依赖于应用程序食谱中的应用程序资源，以便在实例 NetHack 上安装流行的基于文本的冒险游戏。(当然，您可以替换想要替换的其他任何程序包名称，但前提是实例上程序包管理器要能够随时获得程序包。)

1. 从 `opsworks_cookbook_demo` 目录的根目录运行以下命令：

   ```
   berks package
   ```

   Berkshelf 使用上一个步骤中创建的依赖项列表创建一个名为 `cookbooks-timestamp.tar.gz` 的文件，该文件包含 `opsworks_cookbook_demo` 目录和其更新后的内容 (包括说明书所依赖的说明书)。将此文件重命名为 `opsworks_cookbook_demo.tar.gz`。

1. 将更新后重命名为 `opsworks_cookbook_demo.tar.gz` 的文件上传到 S3 存储桶。

1. 按照[第 5 步：更新实例上的说明书并运行配方](gettingstarted-cookbooks-copy-cookbook.md)中的步骤，更新实例上的说明书并运行配方。在“运行配方”步骤中，对于 **Recipes to execute (要执行的配方)**，键入 **opsworks\$1cookbook\$1demo::dependencies\$1demo**。

1. 运行配方后，您应当能够登录实例，然后在命令提示符下键入 **nethack** 以开始播放。（有关游戏的更多信息，请参阅[NetHack](https://en.wikipedia.org/wiki/NetHack)和[NetHack指南](http://www.nethack.org/v343/Guidebook.html)。） 

在[下一步](gettingstarted-cookbooks-clean-up.md)中，您可以清理用于本演练的 AWS 资源。下一步是可选的。随着您继续了解 OpsWorks Stacks的更多信息，您可能需要继续使用这些 AWS 资源。但是，保留这些 AWS 资源可能会导致您的 AWS 账户持续收取一些费用。如果你想保留这些 AWS 资源以备后用，现在你已经完成了本演练，你可以直接跳到[后续步骤](gettingstarted-cookbooks-next-steps.md)。