对 Linux 堆栈使用搜索 - AWS OpsWorks

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

对 Linux 堆栈使用搜索

重要

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

此示例基于包含单台 PHP 应用程序服务器的 Linux 堆栈。它使用 Chef 搜索来获取服务器的公有 IP 地址,然后将该地址放入 /tmp 目录下的文件中。实际上,它将从节点对象获取与直接获取属性值 相同的信息,但代码简单得多,并且不依赖堆栈配置和部署属性结构的详细信息。

下面简单总结了为此示例创建堆栈的方式。有关更多信息,请参阅 创建新堆栈

注意

如果您之前尚未在 AWS OpsWorks Stacks 实例上运行自定义配方,则应先完成在 Linux 实例上运行配方示例。

创建堆栈
  1. 打开 AWS OpsWorks Stacks 控制台,然后单击 Add Stack (添加堆栈)

  2. 指定以下设置,接受其他设置的默认值,然后单击 Add Stack

    • 名称 - SearchJSON

    • 默认 SSH 密钥 - Amazon EC2 密钥对

    如果您需要创建 Amazon EC2 密钥对,请参阅 Amazon EC2 密钥对。请注意,该密钥对必须属于与实例相同的 Amazon Web Services Region。此示例使用美国西部(俄勒冈州)区域。

  3. 单击 Add a layer,然后将采用默认设置的 PHP App Server 层添加到堆栈。

  4. 向层添加全天候实例 (采用默认设置) 并启动该实例

设置说明书
  1. opsworks_cookbooks 中创建一个名为 searchjson 的目录并导航到该目录。

  2. 创建一个包含以下内容的 metadata.rb 文件,并将该文件保存到 opstest

    name "searchjson" version "0.1.0"
  3. recipes 中创建 searchjson 目录。

  4. 创建包含以下配方的 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 时,它会将此字符串添加到该文件。

  5. opsworks_cookbooks 创建 .zip 存档,将存档上传到 Amazon S3 存储桶公开存档并记录存档的 URL。有关说明书存储库的更多信息,请参阅说明书存储库

    发送到 Amazon S3 存储桶的内容可能包含客户内容。有关删除敏感数据的更多信息,请参阅如何清空 S3 存储桶?如何删除 S3 存储桶?

您现在可以安装说明书并运行配方。

运行配方
  1. 编辑堆栈以启用自定义说明书,然后指定以下设置。

    • 存储库类型 -Http 存档

    • 存储库 URL -您之前记录的说明书存档 URL

    对其他设置使用默认值,然后单击 Save 更新堆栈配置。

  2. 编辑自定义层配置并向层的设置事件分配 searchjson::default。AWS OpsWorksStacks 将在实例启动后或在您显式触发设置事件时运行配方。

  3. 运行“Update Custom Cookbooks”堆栈命令,这会将当前版本的自定义说明书存储库安装到堆栈的实例上。如果存在早期版本的存储库,此命令会将其覆盖。

  4. 通过运行 Setup 堆栈命令在实例上触发设置事件并运行 searchjson::default 来执行配方。使 Running command setup page 保持打开状态。

配方成功运行后,可以对其进行验证。

验证 searchjson
  1. 第一步是查看 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) ...
  2. 使用 SSH 登录实例并列出 /tmp 的内容,该内容应包含一个名为 ip_addresses 的文件 (其中包含 IP 地址)。