为 Chef 11.4 堆栈实施配方 - AWS OpsWorks

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

为 Chef 11.4 堆栈实施配方

重要

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

重要

请勿为自定义或社区说明书重复使用内置说明书名称。与内置说明书具有相同名称的自定义说明书可能会失败。如需查看 Chef 11.10、11.4 和 0.9 堆栈提供的内置说明书的完整列表,请参阅 opsworks-cookbooks repository on GitHub

Chef 11.4 堆栈的主要限制是:配方不能使用 Chef 搜索或数据包。但是,AWS OpsWorks Stacks 会在每个实例上安装堆栈配置和部署属性,这些包含您通过搜索可以获得的许多信息,其中包括以下内容:

  • 控制台中用户定义的数据,如主机名或应用程序名称。

  • AWS OpsWorks Stacks 服务生成的堆栈配置数据,如堆栈的层、应用程序和实例,以及每个实例的详细信息 (如 IP 地址)。

  • 包含用户提供的、几乎能够充当数据包来进行使用的数据的自定义 JSON 属性。

AWS OpsWorks Stacks 将在每个生命周期事件的每个实例上安装当前版本的堆栈配置和部署属性,然后再启动该事件的 Chef 运行。配方可通过标准 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 存储桶。之后,您的配方可以使用 AWS Ruby SDK(所有 AWS OpsWorks Stacks 实例上都安装了此工具)从存储桶下载数据。

注意

每个 AWS OpsWorks Stacks 实例都有一个实例配置文件。关联的IAM 角色指定在实例上运行的应用程序可以访问哪些 AWS 资源。要使您的配方能够访问 Amazon S3 存储桶,该角色的策略必须包括类似以下内容的语句,这可授予从指定的存储桶检索文件的权限。

"Action": ["s3:GetObject"], "Effect": "Allow", "Resource": "arn:aws:s3:::yourbucketname/*",

有关实例配置文件的更多信息,请参阅为在 EC2 实例上运行的应用程序指定权限