覆盖内置属性 - AWS OpsWorks

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

覆盖内置属性

重要

AWS OpsWorks Stacks 不再接受新客户。在 2024 年 5 月 26 日之前,现有客户将能够正常使用 OpsWorks 控制台、API、CLI 和 CloudFormation 资源,届时它们将停产。为准备此过渡,我们建议您尽快将堆栈过渡到AWS Systems Manager。有关更多信息,请参阅 AWS OpsWorks Stacks 生命周期终止常见问题解答将 AWS OpsWorks Stacks 应用程序迁移到 AWS Systems Manager Application Manager

注意

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

AWS OpsWorks Stacks 在每个实例上安装了一组内置说明书。其中的许多内置说明书都支持内置层,而且其属性文件定义了各种默认系统和应用程序设置,如 Apache 服务器配置设置。通过将这些设置放在属性文件中,您可以采用以下任一方式覆盖对应的内置属性,从而自定义多种配置设置:

  • 在自定义 JSON 中定义属性。

    此方法的优点是简单灵活。但是,您必须手动输入自定义 JSON,因此没有可靠的方法来管理属性定义。

  • customize.rb 属性文件中实施自定义说明书并定义属性。

    此方法比使用自定义 JSON 的灵活性更小,但更可靠,因为您可以将自定义说明书置于源代码管理下。

本主题介绍如何使用自定义说明书属性文件覆盖内置属性,例如使用 Apache 服务器。有关如何使用自定义 JSON 覆盖属性的更多信息,请参阅使用自定义 JSON。有关如何覆盖属性的一般性讨论,请参阅覆盖属性

注意

覆盖属性是自定义配置设置的首选方法,但设置并不总是由属性表示。在出现这种情况时,您通常可以通过覆盖内置配方用于创建配置文件的模板来自定义配置文件。有关示例,请参阅覆盖内置模板

内置属性通常表示 Setup 配方用于创建配置文件的模板文件中的值。例如,一种 apache2 Setup 配方 default.rb 使用 apache2.conf.erb 模板创建 Apache 服务器的主配置文件 httpd.conf (Amazon Linux) 或 apache2.conf (Ubuntu)。下面是来自模板文件的摘录:

... # # MaxKeepAliveRequests: The maximum number of requests to allow # during a persistent connection. Set to 0 to allow an unlimited amount. # We recommend you leave this number high, for maximum performance. # MaxKeepAliveRequests <%= node[:apache][:keepaliverequests] %> # # KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout <%= node[:apache][:keepalivetimeout] %> ## ## Server-Pool Size Regulation (MPM specific) ## ...

在本示例中,KeepAliveTimeout 设置是 [:apache][:keepalivetimeout] 属性的值。此属性的默认值在 apache2 说明书的 apache.rb 属性文件中定义,如以下摘录所示:

... # General settings default[:apache][:listen_ports] = [ '80','443' ] default[:apache][:contact] = 'ops@example.com' default[:apache][:log_level] = 'info' default[:apache][:timeout] = 120 default[:apache][:keepalive] = 'Off' default[:apache][:keepaliverequests] = 100 default[:apache][:keepalivetimeout] = 3 ...
注意

有关常用内置属性的更多信息,请参阅内置说明书属性

为了支持覆盖内置属性,所有内置说明书都要包含一个 customize.rb 属性文件,该文件将通过 include_attribute 指令集成到所有模块中。内置说明书的 customize.rb 文件未包含任何属性定义且对内置属性没有影响。要覆盖内置属性,您应使用与内置说明书相同的名称创建自定义说明书,然后将自定义属性定义放在同样名为 customize.rb 的属性文件中。该文件优先于内置版本且包含在任何相关模块中。如果您在 customize.rb 中定义了任何内置属性,则它们会覆盖对应的内置属性。

本示例说明如何覆盖内置 [:apache][:keepalivetimeout] 属性以将其值设置为 5 而不是 3。您可以对任何内置属性使用类似方法。但是,请注意您覆盖的属性。例如,在 opsworks 命名空间中覆盖属性可能会导致一些内置配方出现问题。

重要

请勿通过修改内置属性文件本身的副本来覆盖内置属性。例如,您可以apache.rb 的副本放在您的自定义说明书的 apache2/attributes 文件夹中并修改此文件的某些设置。但是,此文件优先于内置版本,而且内置配方现在将使用您的 apache.rb 版本。如果 AWS OpsWorks Stacks 之后修改了内置 apache.rb 文件,配方将不会获得新值,除非您手动更新了您的版本。通过使用customize.rb,您只能覆盖指定的属性;内置配方会继续自动获取您尚未覆盖的每个属性的 up-to-date 值。

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

创建说明书
  1. 在您的 opsworks_cookbooks 目录中,创建名为 apache2 的说明书目录并导航到该目录。

    要覆盖内置属性,自定义说明书必须具有与内置说明书相同的名称,本例中为 apache2

  2. apache2 目录中创建一个 attributes 目录。

  3. 将一个名为 customize.rb 的文件添加到 attributes 目录并使用该文件定义要覆盖的内置说明书属性。在本示例中,该文件应包含以下内容:

    normal[:apache][:keepalivetimeout] = 5
    重要

    要覆盖内置属性,自定义属性必须为 normal 类型或更高类型且具有与对应的内置属性完全相同的节点名称。normal 类型可确保自定义属性优先于内置属性,后者都是 default 类型。有关更多信息,请参阅 属性优先顺序

  4. 创建 opsworks_cookbooks 的名为 opsworks_cookbooks.zip.zip 存档,并将该存档上传到 Amazon Simple Storage Service (Amazon S3) 存储桶。为简单起见,请将此文件设置为公用。记录 URL 以供将来使用。您也可以将说明书存储在私有 Amazon S3 存档或其他存储库类型中。有关更多信息,请参阅 说明书存储库

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

要使用自定义属性,请创建堆栈并安装说明书。

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

  2. 指定以下标准设置。

    • 姓名 — ApacheConfig

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

      虽然您可将堆栈放在任何区域中,但在教程中,建议您放在美国西部(俄勒冈州)中。

    • 默认 SSH 密钥 - EC2 密钥对

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

    选择 Advanced>>,将 Use custom Chef cookbooks 设置为 Yes,然后指定以下设置。

    • 存储库类型 -Http 存档

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

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

    注意

    本示例使用默认操作系统 Amazon Linux。如果您愿意,则可以使用 Ubuntu。唯一区别是:在 Ubuntu 系统上,内置 Setup 配方会生成一个具有相同设置的名为 apache2.conf 的配置文件并将该文件放在 /etc/apache2 目录中。

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

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

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

  5. 在实例处于联机状态后,使用 SSH 连接到它httpd.conf 文件位于 /etc/httpd/conf 目录中。如果您检查该文件,则应看到您的自定义 KeepAliveTimeout 设置。设置的其余部分将具有内置 apache.rb 文件中的默认值。httpd.conf 的相关部分应类似于以下内容:

    ... # # KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout 5 ...