覆盖内置模板 - AWS OpsWorks

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

覆盖内置模板

重要

该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre mium Su AWS pp ort 与 AWS Support 团队联系。

注意

本主题仅适用于 Linux 堆栈。您无法在 Windows 堆栈上覆盖内置模板。

AWS OpsWorks Stacks 内置配方使用模板在实例上创建文件,主要是服务器(例如 Apache)的配置文件。例如,apache2 配方使用 apache2.conf.erb 模板创建 Apache 服务器的主配置文件 httpd.conf (Amazon Linux) 或 apache2.conf (Ubuntu)。

这些模板中的大部分配置设置由属性表示,因此自定义配置文件的首选方法是覆盖相应的内置属性。有关示例,请参阅覆盖内置属性。但是,如果您要自定义的设置不是由内置属性表示的,或根本不在模板中,则您必须覆盖模板本身。本主题介绍如何覆盖内置模板以指定自定义 Apache 配置设置。

您可以通过将 ErrorDocument 设置添加到 httpd.conf 文件来提供对 Apache 的自定义错误响应。apache2.conf.erb 仅包含一些注释掉的示例,如下所示:

... # # Customizable error responses come in three flavors: # 1) plain text 2) local redirects 3) external redirects # # Some examples: #ErrorDocument 500 "The server made a boo boo." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html ...

由于这些设置是硬编码注释,因此您无法通过覆盖属性来指定自定义值;您必须覆盖模板本身。但是,与属性不同,您无法通过任何方法覆盖模板文件的特定部分。您必须使用与内置版本相同的名称创建自定义说明书,将模板文件复制到同一子目录,然后根据需要修改文件。本主题说明如何覆盖 apache2.conf.erb 以提供对错误 500 的自定义响应。有关覆盖模板的一般性讨论,请参阅使用自定义模板

重要

当您覆盖内置模板时,内置配方将使用您的模板的自定义版本而不是内置版本。如果 AWS OpsWorks Stacks 更新内置模板,则自定义模板将不同步,可能无法正常工作。 AWS OpsWorks Stacks 不经常进行此类更改,当模板发生更改时, AWS OpsWorks Stacks 会列出更改,并允许您选择升级到新版本。建议您监控 AWS OpsWorks Stacks 存储库的更改并根据需要手动更新您的自定义模板。请注意,该存储库对于每个支持的 Chef 版本都有一个单独的分支,因此,请确保您位于正常的分支中。

要开始,请创建一个自定义说明书。

创建说明书
  1. opsworks_cookbooks 目录中,创建名为 apache2 的说明书目录,然后导航到该目录。要覆盖内置模板,自定义说明书必须具有与内置说明书相同的名称,本例中为 apache2

    注意

    如果您已完成覆盖内置属性演练,则可在本例中使用相同的 apache2 说明书,然后跳过步骤 2。

  2. 创建一个包含以下内容的 metadata.rb 文件,并将该文件保存到 apache2 目录。

    name "apache2" version "0.1.0"
  3. apache2 目录中创建一个 templates/default 目录。

    注意

    templates/default 目录适用于 Amazon Linux 实例,这些实例使用默认 apache2.conf.erb 模板。Ubuntu 14.04 实例使用特定于操作系统的 apache2.conf.erb 模板,该模板位于 templates/ubuntu-14.04 目录中。如果您希望自定义项也应用于 Ubuntu 14.04 实例,则还必须覆盖该模板。

  4. 内置apache2.conf.erb模板复制到您的 templates/default 目录。打开模板文件,取消注释 ErrorDocument 500 行,然后提供自定义错误消息,如下所示:

    ... ErrorDocument 500 "A custom error message." #ErrorDocument 404 /missing.html ...
  5. 创建 opsworks_cookbooks 的名为 opsworks_cookbooks.zip.zip 存档,并将文件上传到 Amazon Simple Storage Service (Amazon S3) 存储桶。为简单起见,请公开该存档。记录该存档的 URL 以供将来使用。您也可以将说明书存储在私有 Amazon S3 存档或其他存储库类型中。有关更多信息,请参阅 说明书存储库

    发送到 Amazon S3 存储桶的内容可能包含客户内容。有关删除敏感数据的更多信息,请参阅如何清空 S3 存储桶?如何删除 S3 存储桶?

注意

为简单起见,本示例向该模板添加了一个硬编码的错误消息。要更改它,您必须修改该模板并重新安装说明书。要为自己提供更大的灵活性,您可以在自定义说明书的 属性文件中为错误字符串定义一个默认自定义属性customize.rb,然后将该属性的值分配到 ErrorDocument 500。例如,如果您将属性命名为 [:apache][:custom][:error500],则 apache2.conf.erb 中的对应行将类似于以下内容:

... ErrorDocument 500 <%= node[:apache][:custom][:error500] %> #ErrorDocument 404 /missing.html ...

您随后可以通过覆盖 [:apache][:custom][:error500] 来随时更改自定义错误消息。如果您使用自定义 JSON 覆盖属性,则您甚至不需要接触说明书。

要使用自定义模板,请创建一个堆栈并安装说明书。

使用自定义模板
  1. 打开 AWS OpsWorks Stacks 控制台,然后选择 Add Stack (添加堆栈)

  2. 指定以下标准设置:

    • 姓名 — ApacheTemplate

    • 区域-美国西部(俄勒冈州)

    • 默认 SSH 密钥 — Amazon Elastic Compute Cloud(Amazon EC2)密钥对

      如果您需要创建 Amazon EC2 密钥对,请参阅 Amazon EC2 密钥对。请注意,该密钥对必须属于与实例相同的 Amazon Web Services Region。

    选择 Advanced>>,然后选择 Use custom Chef cookbooks 指定以下设置:

    • 存储库类型 -Http 存档

    • 存储库 URL -您之前记录的说明书存档 URL。

    接受其他设置的默认值,然后选择 Add Stack 创建堆栈。

  3. 选择 Add a layer,然后将采用默认设置的 Java App Server 层添加到堆栈。

  4. 向层添加全天候实例 (采用默认设置) 并启动该实例。

    本示例中,一个 t2.micro 实例已足够。

  5. 在实例处于联机状态后,使用 SSH 连接到它httpd.conf 文件位于 /etc/httpd/conf 目录中。该文件应包含您的自定义 ErrorDocument 设置,后者将类似于以下内容:

    ... # Some examples: ErrorDocument 500 "A custom error message." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html ...