本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
传递数据到应用程序
重要
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre
将键/值对之类的数据传递到服务器上的应用程序通常会很有用。为此,请使用自定义 JSON 添加数据到堆栈。 AWS OpsWorks Stacks 将每个生命周期事件的数据添加到每个实例的节点对象。
不过请注意,虽然配方可以使用 Chef 属性从节点对象获取自定义 JSON 数据,但应用程序不能。将自定义 JSON 数据传输到一个或多个应用程序的方法之一是,实施从 node
对象提取数据的自定义配方并将其写入到应用程序可读取的文件中。本主题中的示例显示了如何将数据写入 YAML 文件,但您可以为其他格式 (例如 JSON 或 XML) 使用相同的基本方法。
要将键/值数据传递到堆栈的实例,请将类似于下文的自定义 JSON 添加到堆栈。有关如何将自定义 JSON 添加到堆栈的更多信息,请参阅使用自定义 JSON。
{
"my_app_data": {
"app1": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
},
"app2": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
}
}
该示例假定您有两个应用程序,其短名称为 app1
和 app2
,每个应用程序均有三个数据值。随附的配方假设您使用应用程序的短名称来确定关联的数据,其他名称任意。有关应用程序短名称的更多信息,请参阅设置。
以下示例中的配方显示了如何为每个应用程序从 deploy
属性提取数据并将其放到 .yml
文件中。该配方假定您的自定义 JSON 包含每个应用程序的数据。
node[:deploy].each do |app, deploy| file File.join(deploy[:deploy_to], 'shared', 'config', '
app_data.yml
') do content YAML.dump(node[:my_app_data
][app].to_hash) end end
deploy
属性为每个应用程序包含一个属性,使用该应用程序的短名称命名。每个应用程序属性包含一组属性,表示有关应用程序的各种信息。此示例使用应用程序的部署目录,由 [:deploy][:
属性表示。有关 app_short_name
][:deploy_to][:deploy]
的更多信息,请参阅deploy 属性。
对于 deploy
中的各个应用程序,配方执行以下操作:
-
在应用程序
[:deploy_to]
目录的shared/config
子目录中创建名为app_data.yml
的文件。有关 AWS OpsWorks Stacks 如何安装应用程序的更多信息,请参阅Deploy 配方。
-
将应用程序的自定义 JSON 值转换为 YAML,并将格式化数据写入
app_data.yml
。
将数据传递到应用程序
-
将应用程序添加到堆栈并记录其短名称。有关更多信息,请参阅 添加应用程序。
-
将自定义 JSON 以及应用程序的数据添加到
deploy
属性,如上文中所述。有关如何将自定义 JSON 添加到堆栈的更多信息,请参阅使用自定义 JSON。 -
使用基于前例中的代码创建说明书并将配方添加到其中,根据需要修改在自定义 JSON 中使用的属性名称。有关如何创建说明书和配方的更多信息,请参阅说明书和诀窍。如果您已有此堆栈的自定义说明书,则还可以将配方添加到现有的说明书,甚至可以将代码添加到现有的部署说明书。
-
在堆栈上安装说明书。有关更多信息,请参阅 安装自定义说明书。
-
将配方分配给应用服务器层的 Deploy 生命周期事件。 AWS OpsWorks 然后,Stacks 将在每个新实例启动后对其运行配方。有关更多信息,请参阅 执行配方。
-
部署应用程序,这还将安装当前包含您数据的堆栈配置和部署属性。
注意
如果数据文件必须在部署应用程序之前到位,您还可以将配方分配到层的设置生命周期事件,该事件在实例完成启动之后立即发生一次。但是, AWS OpsWorks Stacks 尚未创建部署目录,因此您的配方应在创建数据文件之前明确创建所需的目录。以下示例明确创建应用程序的 /shared/config
目录,然后在该目录中创建数据文件。
node[:deploy].each do |app, deploy|
directory "#{deploy[:deploy_to]}/shared/config" do
owner "deploy"
group "www-data"
mode 0774
recursive true
action :create
end
file File.join(deploy[:deploy_to], 'shared', 'config', 'app_data.yml') do
content YAML.dump(node[:my_app_data][app].to_hash)
end
end
要加载数据,您可以使用类似于以下 Sinatra
#!/usr/bin/env ruby
# encoding: UTF-8
require 'sinatra'
require 'yaml'
get '/' do
YAML.load(File.read(File.join('..', '..', 'shared', 'config', 'app_data.yml')))
End
您可以随时更新自定义 JSON 来更新应用程序的数据值,如下所示。
更新应用程序数据
-
编辑自定义 JSON 来更新数据值。
-
再次部署应用程序,这会指示 AWS OpsWorks Stacks 在堆栈的实例上运行 Deploy 配方。配方将使用来自更新后堆栈配置和部署属性的属性,因此您的自定义配方将使用当前值更新数据文件。