

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

# 说明书存储库
<a name="workingcookbook-installingcustom-repo"></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 支持 团队联系。

您的自定义说明书必须存储在联机存储库中，它或者是一个存档 (如 .zip 文件)，或者是一个源代码控制管理器 (如 Git)。一个堆栈只能有一个自定义说明书存储库，但一个存储库可以包含任意多个说明书。安装或更新食谱时， OpsWorks Stacks 会将整个存储库安装到每个堆栈实例的本地缓存中。例如，当实例需要运行一个或多个配方时，它会使用来自该本地缓存的代码。

下面介绍如何构造您的说明书存储库，这取决于类型。图示中的斜体字代表用户定义的目录和文件名，包括存储库或存档名称。

**源代码控制管理器**  
OpsWorks Stacks 支持以下源代码控制管理器：  
+ Linux 堆栈：Git 和 Subversion
+ Windows 堆栈：Git
下图显示了所需的目录和文件结构：  

![\[SCM 说明书存储库的强制结构\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/cookbook_folders.png)

+ 说明书目录必须全都在最高一级。

**档案**  
OpsWorks Stacks 支持以下存档：  
+ Linux 堆栈：zip、gzip、bzip2 或 tarball 文件，存储在 Amazon S3 或网站（HTTP 存档）上。

  OpsWorks 堆栈不支持未压缩的压缩包。
+ Windows 堆栈：zip 和 tgz（gzip 压缩的 tar）文件，存储在 Amazon S3 上。
下图显示了所需的目录和文件结构，这取决于您是运行 Linux 还是 Windows 堆栈。说明书结构与 SCM 存储库的一样，所以就用省略号 (...) 来表示。  

![\[强制存档结构\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/cookbook_folders_archive.png)

+ Linux 堆栈：说明书目录必须包含在根目录中。
+ Windows 堆栈：说明书必须位于存档的最高一级。

  如果您只有一个说明书，可以选择省略说明书目录而将说明书文件放到最顶层。在那种情况下， OpsWorks Stacks 从 metadata.rb 获取说明书名称。

每个说明书目录都至少拥有下面一个标准目录和文件，但通常拥有所有这些标准目录和文件，这些目录和文件必须使用标准名称：
+ `attributes`：说明书的属性文件。
+ `recipes`：说明书的配方文件。
+ `templates`：说明书的模板文件。
+ *other*— 包含其他文件类型（例如定义或规范）的可选用户定义目录。
+ `metadata.rb`：说明书的元数据。

  对于 Chef 11.10 及更高版本，如果您的配方依靠其他说明书，则您必须在说明书的 `depends` 文件中包括相应的 `metadata.rb` 语句。例如，如果您的说明书包括含有类似于 `include_recipe anothercookbook::somerecipe` 的语句的配方，则您说明书的 `metadata.rb` 文件必须包括以下行：`depends "anothercookbook"`。有关更多信息，请参阅[关于说明书元数据](http://docs.chef.io/cookbook_repo.html#about-cookbook-metadata)。

模板必须位于 `templates` 的子目录下，其中包含至少一个或多个子目录。这些子目录下还可以有子目录。
+ 模板通常具有一个 `default` 子目录，其中包含 Chef 默认使用的模板文件。
+ *other* 代表可用于操作系统特定模板的可选子目录。
+ Chef 会基于[文件特异性](http://docs.chef.io/templates.html#file-specificity)中描述的命名约定自动使用相应子目录中的模板。例如，对于 Linux 和 操作系统，您可以将操作系统特定的模板放在名为 `amazon`amazon 或 `ubuntu`ubuntu 的子目录中。

具体如何处理自定义说明书取决于您的首选存储库类型。

**使用存档**

1. 使用上一节所示的文件夹结构实现您的说明书。

1. 创建压缩存档文件并将其上传到 Amazon S3 存储桶或网站。

   如果您更新说明书，则必须创建并上传新的存档文件。发送到 Amazon S3 存储桶的内容可能包含客户内容。有关删除敏感数据的更多信息，请参阅[如何清空 S3 存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)或[如何删除 S3 存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)。

**使用 SCM**

1. 使用前面所示的结构设置 Git 或 Subversion 存储库。

1. (可选) 使用存储库的版本控制功能来实施多个分支或版本。

   如果您更新食谱，则可以在新分支中进行更新，然后直接 OpsWorks 使用新版本。您也可以指定特定标记的版本。有关更多信息，请参阅 [指定自定义说明书存储库](workingcookbook-installingcustom-enable.md#workingcookbook-installingcustom-enable-repo)。

[安装自定义说明书](workingcookbook-installingcustom-enable.md)描述了如何让 OpsWorks Stacks 在堆栈的实例上安装你的食谱存储库。

**重要**  
更新存储库中的现有食谱后，必须运行 OpsWorks st `update_cookbooks` ack 命令指示 Stacks 更新每个在线实例的本地缓存。有关更多信息，请参阅 [运行堆栈命令](workingstacks-commands.md)。