AWS OpsWorks
用户指南 (API 版本 2013-02-18)

AWS OpsWorks 堆栈

基于云的计算通常涉及 AWS 资源组,如 Amazon EC2 实例和 Amazon Relational Database Service (RDS) 实例,这些实例必须被共同创建和管理。例如,Web 应用程序通常需要应用程序服务器、数据库服务器、负载均衡器等。该组实例通常称为堆栈;一个简单的应用程序服务器堆栈可能像下面这样:

除了创建实例和安装必要的软件包外,您通常需要通过某种方式向应用程序服务器分发应用程序、监控堆栈的性能、管理安全性和权限,等等。

AWS OpsWorks Stacks 提供了一种简单而灵活的创建和管理堆栈及应用程序的方式。

以下是使用 AWS OpsWorks Stacks 的基本应用程序服务器堆栈可能的样子。它包含一组在 Elastic Load Balancing 负载均衡器背后运行的应用程序服务器,并且带一个后端 Amazon RDS 数据库服务器。

尽管相对简单,但该堆栈展示了所有关键 AWS OpsWorks Stacks 功能。下面介绍了这些功能是如何结合在一起的。

堆栈

堆栈 是核心 AWS OpsWorks Stacks 组件。它基本上是 AWS 资源 (Amazon EC2 实例、Amazon RDS 数据库实例等) 的容器,这些资源具有一个的共同目的,在逻辑上应一起被管理。堆栈帮助您将这些资源作为一个组来管理,同时它还定义了一些默认配置设置,如实例的操作系统和 AWS 区域。如果您想要隔离一些堆栈组件以避免用户直接交互,可以在 VPC 中运行堆栈。

可通过添加一个或多个 来定义堆栈的组成。层代表一组用于特定目的 (如提供应用程序服务或承载数据库服务器) 的 Amazon EC2 实例。

您可以通过修改包的默认配置、添加 Chef 配方来执行诸如安装附加软件包等任务的方式自定义或扩展层。

对于所有堆栈,AWS OpsWorks Stacks 都包括服务层,它们代表以下 AWS 服务:

  • Amazon Relational Database Service

  • Elastic Load Balancing

  • Amazon Elastic Container Service

层让您能够完全控制安装哪些软件包、如何配置它们以及如何部署应用程序等。

配方和生命周期事件

层依靠 Chef 配方来处理诸如在实例上安装软件包、部署应用程序、运行脚本等任务。AWS OpsWorks Stacks 的重要功能之一是一组生命周期事件 — Setup、Configure、Deploy、Undeploy 和 Shutdown,这些事件会在适当的时间自动在每个实例上运行一组指定的配方。

每个层都可以有一组配方分配给每个生命周期事件,它们会为该事件和该层处理各种任务。例如,在属于某 Web 服务器层的实例完成启动后,AWS OpsWorks Stacks 执行以下操作。

  1. 运行该层的 Setup 配方,这会执行诸如安装和配置 Web 服务器之类的任务。

  2. 运行该层的 Deploy 配方,这会将该层的应用程序从存储库部署到实例并执行相关任务,如重启服务等。

  3. 在堆栈中的每个实例上运行 Configure 配方,以便每个实例可根据需要调整其配置来容纳新实例。

    例如,在运行负载均衡器的实例上,Configure 配方可以修改该负载均衡器的配置以包括新实例。

如果一个实例属于多个层,AWS OpsWorks Stacks 会为每个层运行配方,这样,您就可以有一个支持 PHP 应用程序服务器以及 MySQL 数据库服务器的实例。

如果您已实施了配方,则可以将每个配方分配给适当的层和事件,而 AWS OpsWorks Stacks 会自动在适当的时间运行它们。您也可以随时手动运行配方。

实例

一个实例 代表一个计算资源,如一个 Amazon EC2 实例。它定义资源的基本配置,如操作系统和大小。其他配置设置,例如弹性 IP 地址或 Amazon EBS 卷都由实例的层来定义。层的配方通过执行诸如安装和配置软件包和部署应用程序等任务来完成配置。

您可以使用 AWS OpsWorks Stacks 创建实例并将其添加到层。当您启动实例时,AWS OpsWorks Stacks 会使用实例及其层指定的配置设置启动 Amazon EC2 实例。Amazon EC2 实例完成启动之后,AWS OpsWorks Stacks 安装一个代理来处理实例和服务之间的通信,以及运行适当的配方来响应生命周期事件。

AWS OpsWorks Stacks 支持以下实例类型,它们有各自的启动和停止方式。

  • 全天候实例 手动启动并运行到您停止它们为止。

  • 基于时间的实例 由 AWS OpsWorks Stacks 根据指定的每日和每周计划运行。

    它们允许您的堆栈自动调整实例的数量以顺应可预测的使用模式。

  • 基于负载的实例 由 AWS OpsWorks Stacks 基于指定的负载指标 (如 CPU 利用率) 自动启动和停止。

    它们允许您的堆栈自动调整实例的数量以顺应传入流量的变化。基于负载的实例仅可用于基于 Linux 的堆栈。

AWS OpsWorks Stacks 支持实例自动修复。如果代理停止了与服务器的通信,AWS OpsWorks Stacks 会自动停止并重新启动实例。

您还可以将基于 Linux 的计算资源整合到在 AWS OpsWorks Stacks 外部创建的堆栈中。

  • 直接使用 Amazon EC2 控制台、CLI 或 API 创建的 Amazon EC2 实例。

  • 您自己的硬件上运行的本地部署 实例,包括在虚拟机上运行的实例。

在您注册其中一个实例后,它会变成一个 AWS OpsWorks Stacks 实例,您可以像管理用 AWS OpsWorks Stacks 创建的实例那样管理它。

应用程序

您将应用程序和相关文件存储在存储库中,如 Amazon S3 存储桶。每个应用程序由一个 app 表示,它指定应用程序的类型,并包含将应用程序从存储库部署到您的实例所需的信息,如存储库 URL 和密码。当您部署应用程序时,AWS OpsWorks Stacks 触发 Deploy 事件,在堆栈的实例上运行 Deploy 配方。

您可以通过下列方式来部署应用程序:

  • 自动 - 当您启动实例时,AWS OpsWorks Stacks 自动运行实例的 Deploy 配方。

  • 手动 - 如果您有新的应用程序或打算更新现有应用程序,可以手动运行在线实例的 Deploy 配方。

通常,您会让 AWS OpsWorks Stacks 在整个堆栈上运行 Deploy 配方,这将允许其他层的实例适当修改其配置。不过,您可以将部署限制为一个实例子集,例如,如果您要测试新的应用程序以便将其部署到每个应用程序服务器实例的话。

自定义您的堆栈

AWS OpsWorks Stacks 提供了各种自定义层的方法来满足您的特定要求:

  • 您可以修改 AWS OpsWorks Stacks 配置软件包的方式,方法是重写代表各种配置设置的属性,甚至重写用于创建配置文件的模板。

  • 您可以扩展现有层,方法是提供您自己的配方来执行诸如运行脚本或安装和配置非标准软件包等任务。

所有堆栈都可以包含一个或多个层,最开始只有最低限度的一组配方。您通过实施配方向层添加功能以处理诸如安装软件包、部署应用程序等任务。您将您的自定义配方和相关文件打包为一个或多个说明书,并将说明书存储在诸如 Amazon S3 或 Git 等存储库中。

您可以手动运行配方,但 AWS OpsWorks Stacks 也可以通过对五个生命周期事件的支持让您实现该过程的自动化:

  • Setup 发生在成功启动后的新实例上。

  • Configure 发生在堆栈的所有实例上 (在实例上线或离线时)。

  • Deploy 发生在部署应用程序时。

  • Undeploy 发生在删除应用程序时。

  • Shutdown 发生在停止实例时。

每个层可以有任意数量的配方分配给每个事件。当层的实例上发生生命周期事件时,AWS OpsWorks Stacks 运行关联的配方。例如,当应用程序服务器实例上发生 Deploy 事件时,AWS OpsWorks Stacks 会运行层的 Deploy 配方来下载应用程序或执行相关任务。

资源管理

您可以将其他 AWS 资源 (如弹性 IP 地址) 纳入您的堆栈。您可以使用 AWS OpsWorks Stacks 控制台或 API 向堆栈注册资源,将注册的资源附加到实例或从实例分离,并将资源从一个实例移到另一个实例。

安全和权限

AWS OpsWorks Stacks 与 AWS Identity and Access Management (IAM) 集成,提供了强大的方式来控制用户如何访问 AWS OpsWorks Stacks,包括:

  • 单个用户如何与每个堆栈交互,例如,他们能否创建堆栈资源 (如层和实例),或者,能否使用 SSH 或 RDP 连接到堆栈的 Amazon EC2 实例。

  • AWS OpsWorks Stacks 如何代表您与 AWS 资源 (如 Amazon EC2 实例) 交互。

  • 运行在 AWS OpsWorks Stacks 实例上的应用程序如何访问 AWS 资源,如 Amazon S3 存储桶。

  • 如何管理用户的公有 SSH 密钥和 RDP 密码并连接到实例。

监控和日志记录

AWS OpsWorks Stacks 提供了多种功能来帮助您监控堆栈和排查堆栈和任何配方问题。对于所有堆栈:

  • AWS OpsWorks Stacks 为 Linux 堆栈提供一组自定义 CloudWatch 指标,这些指标在 Monitoring 页面上汇总,以方便您使用。

    AWS OpsWorks Stacks 支持用于 Windows 堆栈的标准 CloudWatch 指标。您可以使用 CloudWatch 控制台对它们进行监控。

  • CloudTrail 日志,其中记录您的 AWS 账户中由 AWS OpsWorks Stacks 发出或代表其发出的 API 调用。

  • 事件日志,其中列出您的堆栈中的所有事件。

  • Chef 日志,其中详细记录每个实例上每个生命周期事件的细节,例如,运行了哪些配方以及发生了哪些错误。

基于 Linux 的堆栈也可以包含一个 Ganglia 主层,您可以使用它来收集和显示您的堆栈中实例的详细监控数据。

CLI、软件开发工具包和 AWS CloudFormation 模板

除了控制台,AWS OpsWorks Stacks 也支持可用于执行任何操作的命令行界面 (CLI) 和多语言软件开发工具包。请考虑以下功能:

  • AWS OpsWorks Stacks CLI 是 AWS CLI 的一部分,可用于从命令行执行任何操作。

    AWS CLI 支持多种 AWS 服务,可安装在 Windows、Linux 或 OS X 系统上。

  • AWS OpsWorks Stacks 包括在适用于 Windows PowerShell 的 AWS 工具中,可用于从 Windows PowerShell 命令行执行任何操作。

  • AWS OpsWorks Stacks 软件开发工具包包括在 AWS 软件开发工具包中,可供用以下语言实现的应用程序使用:JavaJavaScript (基于浏览器和 Node.js)、.NETPHPPython (boto)Ruby

您也可以使用 AWS CloudFormation 模板来预配置堆栈。相关的一些示例请参阅 AWS OpsWorks 代码段