选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

步骤 3:创建和部署自定义说明书 - AWS OpsWorks

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

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

步骤 3:创建和部署自定义说明书

重要

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

目前,堆栈的功能尚不完备;您需要允许您的应用程序访问 Redis 服务器。最灵活的方法是在应用程序的 config 子文件夹中放置一个包含访问信息的 YAML 文件。这样,应用程序即可从该文件中获取信息。使用此方法,您可以更改连接信息,而无需重新编写和重新部署应用程序。在本示例中,文件应命名为 redis.yml 并包含 ElastiCache 集群的主机名和端口,如下所示:

host: cache-cluster-hostname port: cache-cluster-port

你可以手动将这个文件复制到你的服务器上,但更好的方法是实现一个 Chef 配方来生成文件,然后让 AWS OpsWorks Stacks 在每台服务器上运行这个配方。Chef 配方是专门的 Ruby 应用程序, AWS OpsWorks Stacks 使用它在实例上执行任务,例如安装软件包或创建配置文件。配方打包在说明书中,说明书可以包含多个配方和相关的文件,例如配置文件的模板。食谱放在存储库中,例如 GitHub,并且必须具有标准的目录结构。如果您还没有自定义说明书存储库,请参阅说明书存储库,以了解如何进行设置的信息。

在本示例中,将使用以下内容,向您的说明书存储库中添加一个名为 redis-config 的说明书:

my_cookbook_repository redis-config recipes generate.rb templates default redis.yml.erb

recipes 文件夹包含一个名为 generate.rb 的配方,该配方从 redis.yml.erb 生成应用程序的配置文件,如下所示:

node[:deploy].each do |app_name, deploy_config| # determine root folder of new app deployment app_root = "#{deploy_config[:deploy_to]}/current" # use template 'redis.yml.erb' to generate 'config/redis.yml' template "#{app_root}/config/redis.yml" do source "redis.yml.erb" cookbook "redis-config" # set mode, group and owner of generated file mode "0660" group deploy_config[:group] owner deploy_config[:user] # define variable “@redis” to be used in the ERB template variables( :redis => deploy_config[:redis] || {} ) # only generate a file if there is Redis configuration not_if do deploy_config[:redis].blank? end end end

配方取决于来自 St ac AWS OpsWorks ks 堆栈配置和部署 JSON 对象的数据,该对象安装在每个实例上,包含有关堆栈和任何已部署应用程序的详细信息。该对象的 deploy 节点具有以下结构:

{ ... "deploy": { "app1": { "application" : "short_name", ... } "app2": { ... } ... } }

此部署节点包含一组嵌入式 JSON 对象 (每个已部署应用程序对应一个对象,且对象以应用程序的短名称命名)。每个应用程序对象包含一组定义应用程序配置的属性,例如文档根和应用程序类型。关于 deploy 属性的列表,请参阅 deploy 属性。配方可以使用 Chef 属性语法来表示堆栈配置和部署 JSON 值。例如,[:deploy][:app1][:application] 表示 app1 应用程序的短名称。

对于 [:deploy] 中的每个应用程序,该配方执行关联的代码块,其中 deploy_config 表示应用程序属性。该配方首先将 app_root 设置为应用程序的根目录 [:deploy][:app_name][:deploy_to]/current。然后,它使用 Chef 模板资源redis.yml.erb 生成配置文件,并将该文件放在 app_root/config 中。

配置文件通常是从模板创建的,而且许多 (即便不是大多数) 设置是由 Chef 属性定义。借助这些属性,您可以使用自定义 JSON 更改设置 (如下文所述),而不是重写模板文件。redis.yml.erb 模板包含以下内容:

host: <%= @redis[:host] %> port: <%= @redis[:port] || 6379 %>

<%... %> 元素是表示属性值的占位符。

  • <%= @redis[:host] %> 表示 redis[:host] 的值,即缓存集群的主机名。

  • <%= @redis[:port] || 6379 %> 表示 redis[:port] 的值,如果未定义该属性,则表示默认端口值 6379。

template 资源的工作方式如下所示:

  • sourcecookbook 分别指定模板和说明书名称。

  • modegroupowner 为配置文件提供与应用程序相同的访问权限。

  • variables 部分将模板中使用的 @redis 变量设置为应用程序的 [:redis] 属性值。

    通过使用自定义 JSON 来设置 [:redis] 属性的值,如下文所述;它不是标准应用程序属性之一。

  • not_if 指令可确保该配方在已存在配置文件的情况下不会再生成配置文件。

编写说明书后,您必须将其部署到每个实例的说明书缓存。此操作并不运行该配方,它只是在堆栈的实例上安装新说明书。一般情况下,可通过将配方分配到某个层的生命周期事件来运行该配方,如下文所述。

部署自定义说明书
  1. 在 “堆栈 AWS OpsWorks 堆栈” 页面上,单击 “堆栈设置”,然后单击 “编辑”

  2. Configuration Management 部分中,将 Use custom Chef cookbooks 设置为 Yes,输入说明书存储库信息,然后单击 Save 以更新堆栈配置。

    Configuration form for custom Chef cookbooks with repository details and options.
  3. Stack 页面上,单击 Run Command,选择 Update Custom Cookbooks 堆栈命令,然后单击 Update Custom Cookbooks 以将新说明书安装到实例的说明书缓存中。

    Run Command interface showing Update Custom Cookbooks option and instance selection for Rails App Server.

如果您修改您的说明书,只需再次运行 Update Custom Cookbooks 来安装更新版本。有关此过程的更多信息,请参阅安装自定义说明书

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。