本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对 Linux 堆栈使用搜索
重要
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre
此示例基于包含单台 PHP 应用程序服务器的 Linux 堆栈。它使用 Chef 搜索来获取服务器的公有 IP 地址,然后将该地址放入 /tmp
目录下的文件中。实际上,它将从节点对象获取与直接获取属性值 相同的信息,但代码简单得多,并且不依赖堆栈配置和部署属性结构的详细信息。
下面简单总结了为此示例创建堆栈的方式。有关更多信息,请参阅 创建新堆栈。
注意
如果你之前没有在 AWS OpsWorks Stacks 实例上运行过自定义配方,你应该先看一下这个在 Linux 实例上运行配方例子。
创建堆栈
-
打开 AWS OpsWorks Stacks 控制台
,然后单击 Add Stack (添加堆栈)。 -
指定以下设置,接受其他设置的默认值,然后单击 Add Stack。
-
名称 - SearchJSON
-
默认 SSH 密钥 - Amazon EC2 密钥对
如果您需要创建 Amazon EC2 密钥对,请参阅 Amazon EC2 密钥对。请注意,该密钥对必须属于与实例相同的 Amazon Web Services Region。此示例使用美国西部(俄勒冈州)区域。
-
-
单击 Add a layer,然后将采用默认设置的 PHP App Server 层添加到堆栈。
设置说明书
-
在
opsworks_cookbooks
中创建一个名为searchjson
的目录并导航到该目录。 -
创建一个包含以下内容的
metadata.rb
文件,并将该文件保存到opstest
。name "searchjson" version "0.1.0"
-
在
recipes
中创建searchjson
目录。 -
创建包含以下配方的
default.rb
文件,并将该文件保存到recipes
目录。phpserver = search(:node, "layers:php-app").first Chef::Log.info("**********The public IP address is: '#{phpserver[:ip]}'**********") file "/tmp/ip_addresses" do content "#{phpserver[:ip]}" mode 0644 action :create end
Linux 堆栈仅支持
node
搜索索引。配方使用此索引获取php-app
层中实例的列表。由于已知层只有一个实例,配方只需将第一个实例分配给phpserver
。如果层具有多个实例,您可枚举这些实例以检索必需信息。每个列表项均为一个包含一组实例属性的哈希表。ip
属性设置为实例的公有 IP 地址,因此您可在后续配方代码中将此地址表示为phpserver[:ip]
。在将消息添加到 Chef 日志后,配方将使用
file
资源创建一个名为 ip_addresses
的文件。content
属性设置为phpserver[:ip]
的字符串表示形式。当 Chef 创建ip_addresses
时,它会将此字符串添加到该文件。 -
为
opsworks_cookbooks
创建.zip
存档,将存档上传到 Amazon S3 存储桶,公开存档并记录存档的 URL。有关说明书存储库的更多信息,请参阅说明书存储库。发送到 Amazon S3 存储桶的内容可能包含客户内容。有关删除敏感数据的更多信息,请参阅如何清空 S3 存储桶?或如何删除 S3 存储桶?。
您现在可以安装说明书并运行配方。
运行配方
-
编辑堆栈以启用自定义说明书,然后指定以下设置。
-
存储库类型 -Http 存档
-
存储库 URL -您之前记录的说明书存档 URL
对其他设置使用默认值,然后单击 Save 更新堆栈配置。
-
-
编辑自定义图层配置并分配searchjson::default给图层的 Setup 事件。 AWS OpsWorks 堆栈将在实例启动后或您明确触发安装事件后运行配方。
-
运行“Update Custom Cookbooks”堆栈命令,这会将当前版本的自定义说明书存储库安装到堆栈的实例上。如果存在早期版本的存储库,此命令会将其覆盖。
-
通过运行 Setup 堆栈命令在实例上触发设置事件并运行
searchjson::default
来执行配方。使 Running command setup page 保持打开状态。
配方成功运行后,可以对其进行验证。
验证 searchjson
-
第一步是查看 Chef 日志以了解最新的设置事件。在 Running command setup page 上,单击 php-app1 实例 Log 列中的 show,显示日志。向下滚动以查找您的日志消息 (接近中间位置),该日志消息与以下内容类似。
... [2014-09-05T17:08:41+00:00] WARN: Previous bash[logdir_existence_and_restart_apache2]: ... [2014-09-05T17:08:41+00:00] WARN: Current bash[logdir_existence_and_restart_apache2]: ... [2014-09-05T17:08:41+00:00] INFO: **********The public IP address is: '192.0.2.0'********** [2014-09-05T17:08:41+00:00] INFO: Processing directory[/etc/sysctl.d] action create (opsworks_initial_setup::sysctl line 1) ...
-
使用 SSH 登录实例并列出
/tmp
的内容,该内容应包含一个名为ip_addresses
的文件 (其中包含 IP 地址)。