本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 Chef 11.4 堆栈实施配方
重要
这些区域有: AWS OpsWorks Stacks 该服务已于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请联系 AWS Support 团队开启 AWS re: post 或通过
重要
请勿为自定义或社区说明书重复使用内置说明书名称。与内置说明书具有相同名称的自定义说明书可能会失败。有关 Chef 11.10、11.4 和 0.9 堆栈中可用的内置食谱的完整列表,请参阅 opsworks-cookbooks 存储库。 GitHub
Chef 11.4 堆栈的主要限制是:配方不能使用 Chef 搜索或数据包。但是, AWS OpsWorks Stacks 会在每个实例上安装堆栈配置和部署属性,这些属性包含您通过搜索获得的大部分信息,包括以下内容:
-
控制台中用户定义的数据,如主机名或应用程序名称。
-
由生成的堆栈配置数据 AWS OpsWorks 堆叠服务,例如堆栈的层、应用程序和实例,以及有关每个实例的详细信息,例如 IP 地址。
-
包含用户提供的数据的自定义JSON属性,其用途与数据袋大致相同。
AWS OpsWorks 在事件的 Chef 运行开始之前,Stacks 会在每个生命周期事件的每个实例上安装最新版本的堆栈配置和部署属性。配方可通过标准 node[:attribute][:child_attribute][...]
语法获得这些数据。例如,堆栈配置和部署属性包括堆栈名称 node[:opsworks][:stack][:name]
。
以下内容摘自其中一个内置配方,这部分摘录内容可获得堆栈名称并使用这个名称创建一个配置文件。
template '/etc/ganglia/gmetad.conf' do source 'gmetad.conf.erb' mode '0644' variables :stack_name => node[:opsworks][:stack][:name] notifies :restart, "service[gmetad]" end
许多堆栈配置和部署属性值包含多个属性。您必须循环访问这些属性来获取所需的信息。以下示例显示了堆栈配置和部署属性的摘录,为方便起见,它们以JSON对象形式表示。它包含一个顶级属性 deploy
,这个属性包含每个堆栈的应用程序的属性,并以应用程序的简称命名。
{ ... "deploy": { "app1_shortname": { "document_root": "app1_root", "deploy_to": "deploy_directory", "application_type": "php", ... }, "app2_shortname": { "document_root": "app2_root", ... } }, ... }
每个应用程序属性都包含一组描述应用程序特征的属性。例如,deploy_to
属性表示应用程序的部署目录。以下摘录设定每个应用程序的部署目录的用户、组和路径。
node[:deploy].each do |application, deploy| opsworks_deploy_dir do user deploy[:user] group deploy[:group] path deploy[:deploy_to] end ... end
有关堆栈配置和部署属性的更多信息,请参阅正在定制 AWS OpsWorks 堆栈。有关部署目录的更多信息,请参阅Deploy 配方。
Chef 11.4 堆栈不支持数据包,但您可以通过指定自定义向堆栈配置和部署属性添加任意数据。JSON然后,您的配方可以使用标准 Chef 节点语法访问这些数据。有关更多信息,请参阅 使用自定义 JSON。
如果您需要使用加密数据包的功能,一种方法是将敏感属性存储到安全的位置,如私有 Amazon S3 存储桶。然后,你的食谱就可以使用 AWSRuby
注意
每个 AWS OpsWorks 堆栈实例具有实例配置文件。关联的IAM角色指定实例上运行的应用程序可以访问哪些AWS资源。要使您的配方能够访问 Amazon S3 存储桶,该角色的策略必须包括类似以下内容的语句,这可授予从指定的存储桶检索文件的权限。
"Action": ["s3:GetObject"], "Effect": "Allow", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/*",
有关实例配置文件的更多信息,请参阅为在EC2实例上运行的应用程序指定权限。