在 Vagrant 上模拟堆栈配置和部署属性 - AWS OpsWorks

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

在 Vagrant 上模拟堆栈配置和部署属性

重要

这些区域有: AWS OpsWorks Stacks 该服务已于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请联系 AWS Support 团队开启 AWS re: post 或通过 AWS 高级支持

注意

本主题仅适用于 Linux 实例。Test Kitchen 尚不支持 Windows,因此你将在上面运行所有 Windows 示例 AWS OpsWorks 堆叠实例。

AWS OpsWorks 对于每个生命周期事件,Stacks 会将堆栈配置和部署属性添加到堆栈中每个实例的节点对象。这些属性可提供堆栈配置 (包括每个层及其联机实例的配置、每个已部署的应用程序的配置等) 的快照。由于这些属性位于节点对象中,因此任何配方都可以访问它们;大多数配方都是 AWS OpsWorks 堆栈实例使用其中一个或多个属性。

在 Vagrant 盒子中运行的实例不是由管理的 AWS OpsWorks 堆栈,因此默认情况下,其节点对象不包含任何堆栈配置和部署属性。但是,您可以向 Test Kitchen 环境添加一组合适的属性。然后,Test Kitchen 将属性添加到实例的节点对象中,你的配方可以像在节点上一样访问这些属性 AWS OpsWorks 堆栈实例。

本主题介绍如何获取合适的堆栈配置和部署属性的一个副本,在实例上设置这些属性,然后访问它们。

注意

如果你使用 Test Kitchen 对你的配方进行测试,fauxhai 提供了一种模拟堆栈配置和部署的替代方法。JSON

设置说明书
  1. 创建 opsworks_cookbooks 的名为 printjson 的子目录并导航到该子目录。

  2. 按照示例 1:安装软件包中所述初始化并配置 Test Kitchen。

  3. 将两个子目录添加到 printjsonrecipesenvironments

您可以通过向具有合适的定义的说明书添加属性文件来模拟堆栈配置和部署属性,但更好的方法是使用 Test Kitchen 环境。有两种基本方法:

  • 将属性定义添加到 .kitchen.yml

    如果您只有几个属性,那么这种方法最有用。有关更多信息,请参阅 kitchen.yml

  • 在一个环境文件中定义属性并在 .kitchen.yml 中引用该文件。

    对于堆栈配置和部署属性,这种方法通常更可取,因为环境文件已经是JSON格式化的。你可以从合适的JSON格式中获取属性的副本 AWS OpsWorks 堆叠实例然后将其粘贴进去即可。所有示例都使用一个环境文件。

为食谱创建堆栈配置和部署属性的最简单方法是创建一个经过适当配置的堆栈,然后将生成的属性从实例复制为JSON。为了便于管理您的 Test Kitchen 环境文件,您可以对其JSON进行编辑,使其仅包含食谱所需的属性。本章中的示例基于中的堆栈Chef 11 Linux 堆栈入门,该堆栈是一个简单的PHP应用程序服务器堆栈,包含负载平衡器、PHP应用程序服务器和 My SQL 数据库服务器。

创建堆栈配置和部署 JSON
  1. 按照 MyStack 中所述进行创建Chef 11 Linux 堆栈入门,包括部署 S implePHPApp。如果您愿意,可以省略中调用的第二个 PHP App Server 实例第 4 步:横向扩展 MyStack;这些示例不使用这些属性。

  2. 如果您尚未这样做,请启动php-app1实例,然后使用登录SSH

  3. 在终端窗口中,运行以下代理 cli 命令:

    sudo opsworks-agent-cli get_json

    此命令以JSON格式将实例的最新堆栈配置和部署属性打印到终端窗口。

  4. 将复制JSON到.json文件中,然后将其保存在工作站上方便的位置。详细信息取决于您的SSH客户。例如,如果您TTY在 Windows 上使用 Pu,则可以运行该Copy All to Clipboard命令,该命令会将终端窗口中的所有文本复制到 Windows 剪贴板。之后,您可以将内容粘贴到 .json 文件并编辑该文件以删除无关的文本。

  5. 根据需要 MyStack JSON进行编辑。堆栈配置和部署属性有很多,说明书通常仅使用其中的一小部分。为了使您的环境文件易于管理,您可以对其进行编辑,JSON使其保留原始结构,但仅包含您的食谱实际使用的属性。

    此示例使用的是经过大量编辑的版本 MyStack JSON,其中仅包含两个['opsworks']['stack']属性,['id]['name']。创建如下所示 MyStack JSON的经过编辑的版本:

    { "opsworks": { "stack": { "name": "MyStack", "id": "42dfd151-6766-4f1c-9940-ba79e5220b58", }, }, }

要将其JSON放入实例的节点对象中,您需要将其添加到 Test Kitchen 环境中。

将堆栈配置和部署属性添加到 Test Kitchen 环境
  1. 创建一个包含以下内容的名为 test.json 的环境文件并将该文件保存到说明书的 environments 文件夹。

    { "default_attributes": { "opsworks" : { "stack" : { "name" : "MyStack", "id" : "42dfd151-6766-4f1c-9940-ba79e5220b58" } } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }

    环境文件具有以下元素:

    • default_attributes— JSON 格式中的默认属性。

      这些属性将使用default属性类型添加到节点对象,所有堆栈配置和部署JSON属性都使用该类型。此示例使用前面JSON显示的堆栈配置和部署的编辑版本。

    • chef_type-将此元素设置为 environment

    • json_class-将此元素设置为 Chef::Environment

  2. 编辑 .kitchen.yml 以定义 Test Kitchen 环境,如下所示。

    --- driver: name: vagrant provisioner: name: chef_solo environments_path: ./environments platforms: - name: ubuntu-12.04 suites: - name: printjson provisioner: solo_rb: environment: test run_list: - recipe[printjson::default] attributes:

    将以下元素添加到 kitchen init 创建的默认 .kitchen.yml 来定义环境。

    provisioner

    添加以下元素。

    • name-将此元素设置为 chef_solo

      要复制 AWS OpsWorks 更紧密地堆叠环境,你可以使用 Chef 客户端本地模式而不是 Ch ef solo 模式。本地模式是一个 Chef 客户端选项,该选项使用在实例上本地运行的轻量级版本的 Chef 服务器 (Chef Zero) 替代远程服务器。它使您的配方能够在不连接到远程服务器的情况下使用 Chef 服务器功能 (如搜索或数据包)。

    • environments_path-包含环境文件的说明书子目录,本示例中为 ./environments

    suites:provisioner

    加上 environment 元素设置为环境文件名称的 solo_rb 元素,再减去 .json 扩展名。本示例将 environment 设置为 test

  3. 创建一个包含以下内容的名为 default.rb 的配方文件并将该文件保存到说明书的 recipes 目录。

    log "Stack name: #{node['opsworks']['stack']['name']}" log "Stack id: #{node['opsworks']['stack']['id']}"

    此配方仅记录您添加到环境的两个堆栈配置和部署值。尽管配方在 Virtual Box 中本地运行,但你可以使用与配方在 Virtual Box 上运行时相同的节点语法来引用这些属性 AWS OpsWorks 堆栈实例。

  4. 运行 kitchen converge。您应看到类似于以下内容的日志输出。

    ... Converging 2 resources Recipe: printjson::default * log[Stack name: MyStack] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack name: MyStack] action write (printjson::default line 1) [2014-07-01T23:14:09+00:00] INFO: Stack name: MyStack * log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write (printjson::default line 2) [2014-07-01T23:14:09+00:00] INFO: Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58 ...