

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

# 步骤 3：创建和部署自定义说明书
<a name="using-s3-cookbook"></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 支持 团队联系。

堆栈尚未就绪：
+ 您的应用程序需要一些信息来访问 MySQL 数据库服务器和 Amazon S3 存储桶，例如数据库主机名和 Amazon S3 存储桶名称。
+ 您需要在 MySQL 数据库服务器中设置数据库，并创建表来保存照片的元数据。

你可以手动处理这些任务，但更好的方法是实现 Chef *配方，让* OpsWorks Stacks 在相应的实例上自动运行配方。Chef 配方是专门的 Ruby 应用程序， OpsWorks Stacks 使用它在实例上执行任务，例如安装软件包或创建配置文件。它们打包在*说明书* 中，说明书可以包含多个配方和相关的文件，例如配置文件的模板。食谱放在存储库中，例如 GitHub，并且必须具有标准的目录结构。如果您还没有自定义说明书存储库，请参阅[说明书存储库](workingcookbook-installingcustom-repo.md)，以了解如何进行设置的信息。

在此示例中，食谱已为您实现并存储在[公共存储 GitHub 库](https://github.com/amazonwebservices/opsworks-example-cookbooks/tree/master/photoapp)中。说明书包含两个配方 `appsetup.rb` 和 `dbsetup.rb`，以及一个模板文件 `db-connect.php.erb`。

`appsetup.rb` 配方将创建配置文件，其中包含应用程序访问数据库和 Amazon S3 存储桶所需信息。它基本上是 [将应用程序连接到数据库](gettingstarted-db-recipes.md#gettingstarted-db-recipes-appsetup) 中所述的 `appsetup.rb` 配方经过略微修改的版本。主要差别在于传递到模板的变量，这代表了访问信息。

前四个属性定义数据库连接设置，由 OpsWorks 堆栈在创建 MySQL 实例时自动定义。

这些变量与原始配方中的变量之间有两个主要差别：
+ 与原始配方一样，`table` 变量表示由 `dbsetup.rb` 创建的数据库表的名称，并设置为在说明书的属性文件中定义的属性的值。

  但是，该属性有不同的名称：`[:photoapp][:dbtable]`。
+ `s3bucket` 变量特定于此示例，设置为表示 Amazon S3 存储桶名称的属性 `[:photobucket]` 的值。

   `[:photobucket]` 使用自定义 JSON 定义，如下文所述。有关属性的更多信息，请参阅[属性](workingcookbook-installingcustom-components-attributes.md)。

有关属性的更多信息，请参阅[属性](workingcookbook-installingcustom-components-attributes.md)。

`dbsetup.rb` 配方设置数据库表用于保存各个照片的元数据。它基本上是 `dbsetup.rb` 中所述的 [设置数据库](gettingstarted-db-recipes.md#gettingstarted-db-recipes-dbsetup) 配方经过略微修改的版本；有关详细说明，请参阅该主题。

此示例与原始配方之间的唯一差别是数据库架构，它有三列，包含 ID、URL 和各照片的标题，存储在 Amazon S3 存储桶中。

食谱已经实现了，所以你所需要做的就是将 photoapp 食谱部署到每个实例的食谱缓存中。 OpsWorks 然后，当相应的生命周期事件发生时，Stacks 会运行缓存的配方，如下所述。

**部署 photoapp 说明书**

1. 在 “**堆栈 OpsWorks 堆栈**” 页面上，选择 “**堆栈设置”**，然后选择 “**编辑”**。

1. 在 **Configuration Management** 部分中：
   + 将 **Use custom Chef cookbooks** 设置为 **Yes**。
   + 将 **Repository type** 设置为 Git。
   + 将 **Repository URL (存储库 URL)** 设置为 **git://github.com/amazonwebservices/opsworks-example-cookbooks.git**。

1. 在 **Stack (堆栈)** 页面上，依次选择 **Run Command (运行命令)**、**Update Custom Cookbooks (更新自定义说明书)** 堆栈命令以及 **Update Custom Cookbooks (更新自定义说明书)**，以将新说明书安装到实例说明书缓存中。  
![\[Run Command interface showing Update Custom Cookbooks option and instance selection.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/redis_walkthrough_command.png)