

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

# Chef 11 Linux 堆栈入门
<a name="gettingstarted"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

**注意**  
这部分介绍关于使用 Chef 11 的 Linux 堆栈的入门知识。有关 Chef 12 Linux 堆栈入门的信息，请参阅[入门：Linux](gettingstarted-linux.md)。有关 Chef 12 Windows 堆栈入门的信息，请参阅[入门：Windows](gettingstarted-windows.md)。

基于云的应用程序通常需要一组相关的资源 (应用程序服务器、数据库服务器等等)，且必须集体创建并管理这些资源。此实例集合称为*堆栈*。简单的应用程序堆栈可能如下所示。

![\[Diagram showing users connecting to app servers via internet and load balancer, with a shared database.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/php_walkthrough_arch.png)


基础架构包含以下内容：
+ 一个负载均衡器，用于在各个应用程序服务器之间平均分配来自用户的传入流量。
+ 一组应用程序服务器实例，数量必须足以处理流量。
+ 一个数据库服务器，用于为应用程序服务器提供后端数据存储。

此外，您通常需要一种可将应用程序分配给应用程序服务器、监控堆栈等的方式。

OpsWorks Stacks 提供了一种简单明了的方式来创建和管理堆栈及其关联的应用程序和资源。本章通过在图表中向您展示创建应用程序服务器堆栈的过程，来介绍 OpsWorks Stacks 的基础知识，以及它的一些更加复杂的功能。它使用 OpsWorks Stacks易于遵循的增量开发模型：设置基本堆栈，并在其正常运行后添加组件，直到获得功能齐全的实现。
+ [步骤 1：完成前提条件](gettingstarted-prerequisites.md)演示如何设置以开始演练。
+ [步骤 2：创建简单的应用程序服务器堆栈 - Chef 11](gettingstarted-simple.md)介绍如何创建仅包含一个应用程序服务器的最小堆栈。
+ [步骤 3：添加后端数据存储](gettingstarted-db.md)介绍如何添加数据库服务器并将它连接到应用程序服务器。
+ [第 4 步：横向扩展 MyStack](gettingstarted-scale.md)显示如何通过添加更多应用程序服务器以及添加用于分配入站流量的负载均衡器来扩展堆栈以处理增加的负载。

**Topics**
+ [步骤 1：完成前提条件](gettingstarted-prerequisites.md)
+ [步骤 2：创建简单的应用程序服务器堆栈 - Chef 11](gettingstarted-simple.md)
+ [步骤 3：添加后端数据存储](gettingstarted-db.md)
+ [第 4 步：横向扩展 MyStack](gettingstarted-scale.md)
+ [第 5 步：删除 MyStack](gettingstarted-delete.md)

# 步骤 1：完成前提条件
<a name="gettingstarted-prerequisites"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

完成以下设置步骤，然后您才能开始演练。这些设置步骤包括注册 AWS 帐户、创建管理用户以及为 OpsWorks Stacks 分配访问权限。

如果您已经完成任何[OpsWorks 堆栈入门](gettingstarted_intro.md)演练，则您已满足此演练的先决条件，可以向前跳至[步骤 2：创建简单的应用程序服务器堆栈 - Chef 11](gettingstarted-simple.md)。

**Topics**
+ [注册获取 AWS 账户](#sign-up-for-aws)
+ [创建具有管理访问权限的用户](#create-an-admin)
+ [为您的用户分配服务访问权限](#gettingstarted-prerequisites-permissions)

## 注册获取 AWS 账户
<a name="sign-up-for-aws"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**报名参加 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

## 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的[启用 AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com/singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录 URL。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html)。

## 为您的用户分配服务访问权限
<a name="gettingstarted-prerequisites-permissions"></a>

通过向您的角色或用户添加和权限，启用对 OpsWorks Stacks 服务（以及 Stacks 所依赖的`AWSOpsWorks_FullAccess`相关服务）的`AmazonS3FullAccess`访问权限。 OpsWorks 

有关添加权限的更多信息，请参阅：[添加 IAM 身份权限（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)。

您现已完成所有设置步骤，可[开始此演练](gettingstarted-simple.md)。

# 步骤 2：创建简单的应用程序服务器堆栈 - Chef 11
<a name="gettingstarted-simple"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

一个基本的应用程序服务器堆栈包含一个具有公有 IP 地址的应用程序服务器实例以接收用户请求。应用程序代码和任何相关文件均存储在单独的存储库中，并从该位置部署到服务器。下图阐明了此类堆栈。

![\[Diagram showing application server stack with users, internet, and AWS components.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/php_walkthrough_arch_2.png)


该堆栈拥有以下组件：
+ 一个*层*，它表示一组实例并指定这些实例的配置方式。

  在本例中，层表示一组 PHP App Server 实例。
+ 一个*实例*，它代表一个 Amazon EC2 实例。

  在本例中，实例被配置为运行 PHP 应用程序服务器。图层可以有任意数量的实例。 OpsWorks Stacks 还支持其他几个应用程序服务器。有关更多信息，请参阅 [应用程序服务器层](workinglayers-servers.md)。
+ *应用程序*，其中包含在应用程序服务器上安装应用程序所需的信息。

  代码存储在一个远程存储库中，例如 Git 存储库或 Amazon S3 存储桶。

以下各节介绍如何使用 OpsWorks Stacks 控制台创建堆栈和部署应用程序。您也可以使用 CloudFormation 模板来配置堆栈。有关预置本主题中描述的堆栈的示例模板，请参阅 [AWS S OpsWorks nippets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-opsworks.html)。

**Topics**
+ [步骤 2.1：创建堆栈 - Chef 11](gettingstarted-simple-stack.md)
+ [步骤 2.2：添加 PHP App Server 层 - Chef 11](gettingstarted-simple-layer.md)
+ [步骤 2.3：向 PHP App Server 层添加实例 - Chef 11](gettingstarted-simple-instance.md)
+ [步骤 2.4：创建和部署应用程序 - Chef 11](gettingstarted-simple-app.md)

# 步骤 2.1：创建堆栈 - Chef 11
<a name="gettingstarted-simple-stack"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

您可以通过创建 OpsWorks 堆栈来启动 Stacks 项目，该堆栈充当您的实例和其他资源的容器。堆栈配置指定一些由堆栈的所有实例共享的基本设置，如 Amazon Web Services Region 和默认操作系统。

**注意**  
此页面帮助您创建 Chef 11 堆栈。有关如何创建 Chef 12 堆栈的信息，请参阅[创建堆栈](https://docs.aws.amazon.com/opsworks/latest/userguide/gettingstarted-intro-create-stack.html)。

此页面帮助您在 Chef 11 中创建堆栈。

**创建新堆栈**

1. 

**添加堆栈**

   登录到 [OpsWorks Stacks 控制台](https://console.aws.amazon.com/opsworks/)。如果该账户没有现有堆栈，您将看到 “**欢迎使用 AWS OpsWorks**” 页面；单击 “**添加您的第一个堆栈**”。否则，您将看到 OpsWorks Stacks 控制面板，其中列出了您账户的堆栈；点击**添加**堆栈。  
![\[如果你没有堆栈，你会在 Stacks 控制台中看到首次运行的页面；否则，你会看到账户中所有 OpsWorks 堆栈的列表。\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/firstrun.png)

1. 

**配置堆栈**

   在 **Add Stack** 页面上，选择 **Chef 11 stack** 并指定以下设置：  
**堆栈名称**  
为您的堆栈输入一个名称，可以包含字母数字字符 (a–z、A–Z、0-9) 和连字符 (-)。此演练的示例堆栈名为 **MyStack**。  
**Region**  
选择 美国西部（俄勒冈州） 作为堆栈的区域。

   接受其他设置的默认值并单击 **Add Stack**。有关各种堆栈设置的更多信息，请参阅[创建新堆栈](workingstacks-creating.md)。

# 步骤 2.2：添加 PHP App Server 层 - Chef 11
<a name="gettingstarted-simple-layer"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

尽管堆栈基本上是实例的容器，但您不能直接将实例添加到堆栈。您需要添加一个层 (表示一组相关实例)，然后将实例添加到该层。

层基本上是一个蓝图， OpsWorks Stacks 使用它来创建一组具有相同配置的 Amazon EC2 实例。您在堆栈中为每个相关实例组添加一个层。 OpsWorks 堆栈包括一组内置层，用于表示运行标准软件包（例如 MySQL 数据库服务器或 PHP 应用服务器）的实例组。此外，您还可以创建部分或完全自定义的层以满足特定要求。有关更多信息，请参阅 [自定义堆栈 OpsWorks](customizing.md)。

MyStack 有一层，即内置的 PHP 应用服务器层，它表示一组用作 PHP 应用程序服务器的实例。有关更多信息，包括内置层的说明，请参阅[图层](workinglayers.md)。

**将 PHP 应用服务器层添加到 MyStack**

1. 

**打开“Add Layer”页面**

   创建完堆栈后，Stac OpsWorks ks 会显示 “**堆栈**” 页面。单击 ** Add a layer** 以添加您的第一个层。  
![\[MyStack interface showing layers and instances sections with options to add components.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs2a.png)

1. 

**指定层类型并配置层**

   在 **层类型**框中，选择 **PHP 应用程序服务器**，接受默认 Elastic Load Balancer 设置并单击 **添加层**。创建层后，您可以通过[编辑层](workinglayers-basics-edit.md)来指定其他属性 (如 EBS 卷配置)。  
![\[Add layer interface showing PHP App Server layer type selection and Elastic Load Balancer option.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs3.png)

# 步骤 2.3：向 PHP App Server 层添加实例 - Chef 11
<a name="gettingstarted-simple-instance"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

 OpsWorks Stacks 实例代表一个特定的亚马逊 EC2 实例：
+ 实例的配置指定了一些基本信息，例如 Amazon EC2operating 系统和大小；它可以运行，但作用不大。
+ 该实例的层通过确定要安装哪些软件包以及该实例是否拥有弹性 IP 地址等内容而向该实例添加功能。

OpsWorks Stacks 会在每个与服务交互的实例上安装代理。为了向实例添加层的功能， OpsWorks Stacks 会指示代理运行名为 [Chef recipes](http://docs.chef.io/recipes.html) 的小应用程序，这些应用程序可以安装应用程序和软件包、创建配置文件等。 OpsWorks Stacks 在实例[生命周期](workingcookbook-events.md)的关键时刻运行配方。例如，在实例完成启动后 OpsWorks 运行安装配方以处理诸如安装软件之类的任务；在部署应用程序以安装代码和相关文件时运行 Deploy 配方。

**注意**  
如果你对食谱的工作原理感到好奇，那么所有 OpsWorks Stacks 内置食谱都位于一个公共 GitHub 存储库中：[OpsWorks Cookbook](https://github.com/aws/opsworks-cookbooks) s。您也可以创建自己的自定义配方，并让 OpsWorks Stacks 运行它们，如下文所述。

要将 PHP 应用程序服务器添加到中 MyStack，请将实例添加到您在上一步中创建的 PHP App Server 层。

**向 PHP App Server 层添加另一个实例**

1. 

**打开“Add an Instance”**

   添加完图层后， OpsWorks Stacks 会显示 “**图层**” 页面。在导航窗格中，单击 **Instances**，然后在 **PHP App Server** 下单击 **Add an instance**。

1. 

**配置实例**

   每个实例都有一个由 OpsWorks Stacks 为您生成的默认主机名。在此示例中， OpsWorks Stacks 只是在图层的短名称中添加一个数字。您可以单独配置每个实例，包括覆盖您在创建堆栈时指定的某些默认设置，如可用区或操作系统。对于本演练，只需接受默认设置并单击 **Add Instance** 以将实例添加到该层即可。有关更多信息，请参阅 [实例](workinginstances.md)。  
![\[Form for adding a new PHP App Server instance with hostname, size, and subnet options.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs7.png)

1. 

**启动实例**

   到目前为止，您只是指定了该实例的配置。您必须启动一个实例才能创建正在运行的 Amazon EC2 实例。 OpsWorks 然后，Stacks 使用配置设置在指定的可用区启动 Amazon EC2 实例。有关如何启动实例的详细信息取决于该实例的*扩展类型*。在上一步中，您创建了具有默认扩展类型 (*全天候*) 的实例，该实例必须手动启动，然后一直运行，直至手动停止。您还可以创建基于时间和基于负载的扩展类型， OpsWorks Stacks 会根据计划或当前负载自动启动和停止这些类型。有关更多信息，请参阅 [使用基于时间和基于负载的实例管理负载](workinginstances-autoscaling.md)。

   转到 **PHP App Server** 下的 **php-app1**，并单击该行的 **Actions** 列中的 **start** 以启动实例。  
![\[PHP App Server instance list showing php-app1 stopped with start and delete options.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs8.png)

1. 

**启动期间监控实例的状态**

   启动 Amazon EC2 实例并安装软件包通常需要几分钟。在启动过程中，实例的 **Status** 字段会显示下面一系列值：

   1. 已@@ **请求**- OpsWorks Stacks 已调用亚马逊 EC2服务来创建亚马逊 EC2 实例。

   1. **待处理**- OpsWorks Stacks 正在等待 Amazon EC2 实例启动。

   1. **正在启动**-Amazon EC2 实例正在启动。

   1. **running\$1setup**- OpsWorks Stacks 代理正在运行层的安装配方，用于处理诸如配置和安装软件包之类的任务，以及 Deploy 配方（用于将任何应用程序部署到实例）。

   1. **online** - 实例已准备就绪，可供使用。

   php-app1 联机后，**Instances** 页面应与以下内容类似：  
![\[PHP App Server instance table showing php-app1 online with details like size and IP address.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs9.png)

   该页面首先简要汇总堆栈的所有实例。现在，它显示一个联机实例。在 php-app1 **Actions** 列中，请注意，**stop** (停止实例) 已取代 **start** 和 **delete**。

# 步骤 2.4：创建和部署应用程序 - Chef 11
<a name="gettingstarted-simple-app"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

为了使其 MyStack 更有用，您需要将应用程序部署到 PHP App Server 实例。您将应用程序代码和任何相关文件存储在 Git 之类的存储库中。要将这些文件放到应用程序服务器上，您需要采取以下几个步骤：

**注意**  
本部分中的过程适用于 Chef 11 堆栈。有关如何向 Chef 12 堆栈的层中添加应用程序的信息，请参阅[添加应用程序](workingapps-creating.md)。

1. 创建应用程序。

   应用程序包含 OpsWorks Stacks 从存储库下载代码和相关文件所需的信息。您也可以指定其他信息，如应用程序的域。

1. 将应用程序部署到应用程序服务器。

   部署应用程序时， OpsWorks Stacks 会触发 Deploy 生命周期事件。代理随后会运行该实例的 Deploy 配方，这会将文件下载到合适目录并执行相关任务 (如配置服务器、重启服务等)。

**注意**  
当您创建新实例时， OpsWorks Stacks 会自动将所有现有应用程序部署到该实例。但是，当您创建新应用程序或更新现有应用程序时，必须手动部署该应用程序或对所有现有实例进行更新。

此步骤显示了如何手动将示例应用程序从公有 Git 存储库部署到应用程序服务器。如果要检查应用程序，请转到 [https://github.com/amazonwebservices/opsworks-demo-php-simple-app](https://github.com/amazonwebservices/opsworks-demo-php-simple-app)。本示例中使用的应用程序位于版本 1 分支中。 OpsWorks 堆栈还支持其他几种存储库类型。有关更多信息，请参阅 [应用程序源](workingapps-creating.md#workingapps-creating-source)。

**创建和部署应用程序**

1. 

**打开应用程序页面**

   在导航窗格中，单击 **Apps**，然后在 **Apps** 页面上单击 **Add an app**。  
![\[Apps page showing no apps and an "Add an app" button with a brief description.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs13.png)

1. 

**配置应用程序**

   在 **App** 页上，指定以下值：  
**Name**  
应用程序的名称， OpsWorks Stacks 将其用于显示目的。示例应用程序名为**SimplePHPApp**。 OpsWorks Stacks 还会生成一个简短的名称（在本例中为 simplephpapp），该名称供内部使用和 Deploy 配方使用，如后所述。  
**Type**  
应用程序的类型 (将决定在哪里部署该应用程序)。示例使用的是 **PHP**，这会将该应用程序部署到 PHP App Server 实例。  
**数据来源类型**  
关联的数据库服务器。现在选择 **None**；我们将在[步骤 3：添加后端数据存储](gettingstarted-db.md)中介绍数据库服务器。  
**存储库类型**  
应用程序的存储库类型。示例应用程序存储在 **Git** 存储库中。  
**Repository URL**  
应用程序的存储库 URL。示例 URL 为：**git://github.com/awslabs/opsworks-demo-php-simple-app.git**  
**分支/修订**  
应用程序的分支或版本。本部分演练使用 **version1** 分支。

   将其余设置保留默认值，然后单击 **Add App**。有关更多信息，请参阅 [添加应用程序](workingapps-creating.md)。  
![\[Add App form with settings for name, type, document root, data sources, and application source.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs14.png)

1. 

**打开部署页面**

   要在服务器上安装代码，您必须*部署*应用程序。为此，请在 “简单PHPApp**操作**” 列中单击 “**部署**”。  
![\[Apps table showing SimplePHPApp with deploy, edit, and delete options in the Actions column.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs15.png)

1. 

**部署应用程序**

   部署应用程序时，代理将在 PHP App Server 实例上运行 Deploy 配方 (这将下载和配置应用程序)。

   **Command** 应该已经设置为 **deploy**。对于其他设置，保持默认设置不变，然后单击 **Deploy** 以部署应用程序。  
![\[Deploy app interface with settings for SimplePHPApp and instance selection options.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs16.png)

   完成部署后，**Deployment** 页面将显示 **Status** 为 **Successful**，并且 **php-app1** 旁边会出现一个绿色对勾。

1. 

**简单运行 PHPApp**

   PHPApp Simple 现已安装并准备就绪。要运行它，请在导航窗格中单击 **Instances** 以转到 **Instances** 页面。然后单击 php-app1 实例的公有 IP 地址。  
![\[PHP App Server instance details showing hostname, status, size, and public IP address.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs20.png)

   您应在浏览器中看到如下所示的页面。  
![\[Confirmation page for a simple PHP application running on AWS 云 with PHP version 5.3.20.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs21.png)

**注意**  
本演练假定您将继续执行下一部分并最终在一个会话中完成整个演练。如果你愿意，你可以随时停下来，稍后通过登录 OpsWorks Stacks 并打开堆栈继续操作。但是，您需要为所使用的任何 AWS 资源 (如联机实例) 付费。为避免不必要的费用，您可以停止您的实例，从而终止相应的 EC2实例。当您准备好继续时，可以再次启动该实例。

# 步骤 3：添加后端数据存储
<a name="gettingstarted-db"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

[步骤 2.1：创建堆栈 - Chef 11](gettingstarted-simple-stack.md) 向您展示如何创建为 PHP 应用程序提供服务的堆栈。但是，这是一个非常简单的应用程序，只能显示一些静态文本。生产应用程序通常使用后端数据存储，从而生成类似于下图所示的堆栈配置。

![\[AWS OpsWorks stack architecture diagram showing PHP app, MySQL, and user interactions.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/php_walkthrough_arch_3.png)


本节介绍如何扩展 MyStack 以包括后端 MySQL 数据库服务器。但是您需要做的不仅仅是向堆栈中添加一个 MySQL 服务器。您还必须将应用程序配置为与数据库服务器正常通信。 OpsWorks Stacks 不会为你做这件事；你需要实现一些自定义配方来处理该任务。

**Topics**
+ [步骤 3.1：添加后端数据库](gettingstarted-db-db.md)
+ [步骤 3.2：简单更新 PHPApp](gettingstarted-db-update.md)
+ [简短的题外话：食谱、食谱和堆栈属性 OpsWorks](gettingstarted-db-recipes.md)
+ [步骤 3.3：将自定义食谱添加到 MyStack](gettingstarted-db-cookbooks.md)
+ [步骤 3.4：运行配方](gettingstarted-db-lifecycle.md)
+ [步骤 3.5：部署简单PHPApp，版本 2](gettingstarted-db-deploy.md)
+ [步骤 3.6：简单运行 PHPApp](gettingstarted-db-run.md)

# 步骤 3.1：添加后端数据库
<a name="gettingstarted-db-db"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

新版本的 Simple 将其数据PHPApp 存储在后端数据库中。 OpsWorks Stacks 支持两种类型的数据库服务器：
+ [MySQL OpsWorks 堆栈层](workinglayers-db-mysql.md)是创建托管 MySQL 数据库主服务器的亚马逊 EC2 实例的蓝图。
+ Amazon RDS 服务层提供了一种将 [Amazon RDS 实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)整合到堆栈中的方法。

您还可以使用诸如 Amazon DynamoDB 等其他数据库，或创建自定义层以支持 [MongoDB](http://www.mongodb.org/) 等数据库。有关更多信息，请参阅 [使用后端数据存储](customizing-rds.md)。

本示例使用 MySQL 层。

**将 MySQL 层添加到 MyStack**

1. 在 **Layers** 页面上，单击 **\$1 Layer**。

1. 在 **Add Layer** 页面上，对于 **Layer type**，选择 **MySQL**，接受默认设置，然后单击 **Add Layer**。  
![\[Add Layer interface for MySQL with options to set 根用户 password and apply to all instances.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gsb3.png)

**将实例添加到 MySQL 层**

1. 在 **Layers** 页面的 **MySQL** 行，单击 **Add an instance**。

1. 在 **Instances** 页面的 **MySQL** 下，单击 **Add an instance**。

1. 接受默认值，然后单击 **Add instance**，但尚不启动它。

**注意**  
OpsWorks Stacks 会自动创建一个使用应用程序的简称 simplephpapp 命名的数据库，在本例中为 simplephpapp。如果您想要使用 [Chef 配方](http://docs.chef.io/recipes.html)与数据库交互，那么您需要使用此名称。

# 步骤 3.2：简单更新 PHPApp
<a name="gettingstarted-db-update"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

首先，你需要一个使用后端数据存储PHPApp 的 Simple 的新版本。借助 OpsWorks Stacks，可以轻松地更新应用程序。如果您使用 Git 或 Subversion 存储库，则可以针对每个应用程序版本拥有一个独立的存储库分支。该示例应用程序将存储一个应用程序版本，该应用程序使用 Git 存储库的 version2 分支中的后端数据库。您只需更新应用程序的配置来指定新分支并重新部署应用程序。

**要更新 Simple PHPApp**

1. 

**打开应用程序的“Edit”页面**

   在导航窗格中，单击 “**应用程序**”，然后在 “**简单**” PHPApp 行的 “**操作**” 列中单击 “**编辑**”。

1. 

**更新应用程序的配置**

   更改以下设置。  
**分支/修订**  
此设置指示应用程序的存储库分支。Simple 的第一个版本PHPApp 没有连接到数据库。要使用支持数据库的应用程序版本，请将此值设置为 **version2**。  
**Document root**  
此设置将指定您的应用程序的根文件夹。Simple 的第一个版本PHPApp 使用默认设置，该设置安装`index.php`在服务器的标准根文件夹（`/srv/www`适用于 PHP 应用程序）中。如果您在此处指定子文件夹（仅指定名称，没有前导 “/”），OpsWorks Stacks 会将其附加到标准文件夹路径。Simple 的版本 2 PHPApp 应该会加入`/srv/www/web`，因此请将 “**文档根目录**” 设置为**web**。  
**数据来源类型**  
此设置将数据库服务器与应用程序相关联。该示例使用您在上一步中创建的 MySQL 实例，因此请将**数据源类型**设置为，将**数据库实例**设置为 OpsWorks 您在上一步中创建的实例 **db-master1 (**mysql)。将**数据库名称**留空； OpsWorks Stacks 将在服务器上创建一个以应用程序的短名称 simplephpapp 命名的数据库。

   然后单击 **Save** 以保存新配置。  
![\[Add App form with settings for SimplePHP application and OpsWorks data source.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gsb2.png)

1. 开启 MySQL 实例。

更新应用程序后， OpsWorks Stacks 会在您启动任何新的应用程序服务器实例时自动将新应用程序版本部署到这些实例。但是， OpsWorks Stacks 不会自动将新的应用程序版本部署到现有服务器实例；您必须手动执行此操作，如中所[步骤 2.4：创建和部署应用程序 - Chef 11](gettingstarted-simple-app.md)述。你可以PHPApp 立即部署更新后的 Simple，但对于这个例子，最好稍等片刻。

# 简短的题外话：食谱、食谱和堆栈属性 OpsWorks
<a name="gettingstarted-db-recipes"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

现在，您拥有了应用程序和数据库服务器，但它们还未准备就绪，还不能使用。您仍然需要设置数据库并配置应用程序的连接设置。 OpsWorks Stacks 不会自动处理这些任务，但它确实支持 Chef 食谱、食谱和动态属性。你可以实现两个配方，一个用于设置数据库，一个用于配置应用程序的连接设置，然后让 OpsWorks Stacks 为你运行它们。

phpapp 说明书 (其中包含所需的配方) 已经实施并且准备就绪，可供使用；如果您愿意，您可以直接跳至 [步骤 3.3：将自定义食谱添加到 MyStack](gettingstarted-db-cookbooks.md)。如果您想要了解更多信息，本部分提供了一些关于说明书和配方的背景知识，并介绍了配方的工作原理。要查看说明书，请转至 [phpapp 说明书](https://github.com/amazonwebservices/opsworks-example-cookbooks/tree/master/phpapp)。

**Topics**
+ [配方和属性](#gettingstarted-db-recipes-attributes)
+ [设置数据库](#gettingstarted-db-recipes-dbsetup)
+ [将应用程序连接到数据库](#gettingstarted-db-recipes-appsetup)

## 配方和属性
<a name="gettingstarted-db-recipes-attributes"></a>

Chef 配方基本上是一个专门的 Ruby 应用程序，可在实例上执行任务，例如安装程序包、创建配置文件、执行 shell 命令等。相关配方的组被组织成*说明书*，其中还包含配置文件创建模板等支持文件。

OpsWorks Stacks 有一套支持内置图层的食谱。您也可以用自己的配方创建自定义说明书，以便在您的实例上执行自定义任务。本主题简要介绍配方，并展示如何使用配方来设置数据库并配置应用程序的连接设置。有关说明书和配方的更多信息，请参阅 [说明书和诀窍](workingcookbook.md) 或 [自定义堆栈 OpsWorks](customizing.md)。

配方通常依靠 Chef *属性*来获得输入数据：
+ 其中一些属性由 Chef 定义并提供关于实例的基本信息，例如操作系统。
+ OpsWorks 堆栈定义了一组属性，这些属性包含有关堆栈的信息（例如图层配置）和有关已部署应用程序的信息（例如应用程序存储库）。

  您可以通过向堆栈或部署分配[自定义 JSON](workingstacks-json.md) 的方法向该组添加自定义属性。
+ 您的说明书也可以定义特定于说明书的属性。

  在 `attributes/default.rb` 中定义了 phpapp 说明书属性。

有关 OpsWorks 堆栈属性的完整列表，请参阅[堆栈配置和部署属性：Linux](attributes-json-linux.md)和。[内置说明书属性](attributes-recipes.md)有关更多信息，请参阅 [覆盖属性](workingcookbook-attributes.md)。

属性按层次结构进行组织，可以表示为 JSON 对象。

您通过使用如下所示的 Chef 节点语法将此数据整合到应用程序中：

```
[:deploy][:simplephpapp][:database][:username]
```

`deploy` 节点具有单个应用程序节点 `simplephpapp`，该节点包含有关应用程序数据库、Git 存储库等内容的信息。本示例表示数据库用户名称的值，该值被解析为 `root`。

## 设置数据库
<a name="gettingstarted-db-recipes-dbsetup"></a>

MySQL 层的内置“设置”配方会自动为以应用程序的短名称命名的应用程序创建数据库，因此本示例中已经有一个名为 simplephpapp 的数据库。但是，您需要通过为应用程序创建表来存储其数据，以完成设置。你可以手动创建表，但更好的方法是实现自定义配方来处理任务，然后让 OpsWorks Stacks 为你运行它。本部分介绍了如何实施 `dbsetup.rb` 配方。稍后将介绍让 OpsWorks Stacks 运行配方的过程。

要查看存储库中的配方，请转至 [dbsetup.rb](https://github.com/amazonwebservices/opsworks-example-cookbooks/blob/master/phpapp/recipes/dbsetup.rb)。以下示例显示了 `dbsetup.rb` 代码。

`execute` 是执行指定命令的 *Chef 资源*。在本例中，它是一个用于创建表的 MySQL 命令。`not_if` 指令可确保如果指定表已经存在，则不会运行此命令。有关 Chef 资源的更多信息，请参阅[关于资源和提供程序](https://docs.chef.io/resource.html)。

配方使用之前讨论的节点语法将属性值插入命令字符串中。例如，以下会插入数据库的用户名称。

```
#{deploy[:database][:username]}
```

让我们对这个有些神秘的代码进行解压缩：
+ 对于每个迭代，将 `deploy` 设置为当前应用程序节点，因此它会解析为 `[:deploy][:app_name]`。在本示例中，它会解析为 `[:deploy][:simplephpapp]`。
+ 使用之前所示的部署属性值，整个节点将解析为 `root`。
+ 在 \$1\$1 \$1 中封装该节点，以将其插入到字符串中。

其他大多数节点都以类似方式进行解析。但 `#{node[:phpapp][:dbtable]}` 例外，它由自定义说明书的属性文件定义，并解析为表名称 `urler`。因此在 MySQL 实例上运行的实际命令是：

```
"/usr/bin/mysql 
    -uroot
    -pvjud1hw5v8
    simplephpapp
    -e'CREATE TABLE urler(
       id INT UNSIGNED NOT NULL AUTO_INCREMENT,
       author VARCHAR(63) NOT NULL,
       message TEXT,
       PRIMARY KEY (id))'
"
```

此命令使用部署属性中的凭证和数据库名称来创建一个名为 `urler` 的表，其中包含 ID、作者和消息字段。

## 将应用程序连接到数据库
<a name="gettingstarted-db-recipes-appsetup"></a>

第二个难题是应用程序，它需要数据库密码等连接信息来访问表。Simple PHPApp 实际上只有一个工作文件，而`app.php`只`index.php`需要加载即可`app.php`。

`app.php` 包含 `db-connect.php`，该文件可处理数据库连接，但它不在存储库中。您无法提前创建 `db-connect.php`，因为它根据特定实例来定义数据库。而是由 `appsetup.rb` 配方使用部署属性中的连接数据来生成 `db-connect.php`。

要查看存储库中的配方，请转至 [appsetup.rb](https://github.com/amazonwebservices/opsworks-example-cookbooks/blob/master/phpapp/recipes/appsetup.rb)。以下示例显示了 `appsetup.rb` 代码。

像 `dbsetup.rb` 一样，`appsetup.rb` 会迭代 `deploy` 节点中的应用程序，simplephpapp 也同样。它运行包含 `script` 资源和 `template` 资源的代码块。

`script` 资源会安装 [Composer](http://www.getcomposer.org)，它是 PHP 应用程序的依存关系管理器。然后将运行 Composer 的 `install` 命令将示例应用程序的依赖项安装到应用程序的根目录中。

`template` 资源生成 `db-connect.php` 并将其放到 `/srv/www/simplephpapp/current` 中。注意以下几点：
+ 配方使用条件语句来指定文件所有者，这取决于实例的操作系统。
+ 只有当指定目录存在时，`only_if` 指令才会指示 Chef 生成模板。

`template` 资源可对其内容和结构与关联文件基本相同、但包含各种数据值占位符的模板执行操作。`source` 参数指定模板 `db-connect.php.erb`，该模板在 phpapp 说明书的 `templates/default` 目录中，其中包含以下内容：

当 Chef 处理该模板时，它会用模板资源中相应变量的值替换 `<%= =>` 占位符，这些变量值又从部署属性中提取。因此，生成的文件将是：

# 步骤 3.3：将自定义食谱添加到 MyStack
<a name="gettingstarted-db-cookbooks"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

您将自定义说明书存储在存储库中，与存储应用程序的方法非常相似。每个堆栈都可以有一个存储库，其中包含一组自定义说明书。然后，您可以指 OpsWorks 示 Stacks 在堆栈的实例上安装您的自定义食谱。

1. 单击导航窗格中的 **Stack** 以查看当前堆栈的页面。

1. 单击 **Stack Settings**，然后单击 **Edit**。

1. 按如下方式修改堆栈配置。
   + **使用自定义 Chef 说明书** **是**
   + **Repository type** - **Git**
   + **Repository URL (存储库 URL)** - **git://github.com/amazonwebservices/opsworks-example-cookbooks.git**

1. 单击 **Save** 以更新堆栈配置。  
![\[Configuration options for custom Chef cookbooks with Git repository settings.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gsb6.png)

OpsWorks 然后，Stacks 会将食谱存储库的内容安装到堆栈的所有实例上。如果您创建新实例， OpsWorks Stacks 会自动安装食谱存储库。

**注意**  
如果您需要更新任何食谱或向存储库中添加新的食谱，则无需触摸堆栈设置即可完成。 OpsWorks Stacks 将在所有新实例上自动安装更新的食谱。但是， OpsWorks Stacks 不会自动在堆栈的在线实例上安装更新的食谱。你必须通过运行 OpsWorks stac `Update Cookbooks` k 命令明确指示 Stacks 更新食谱。有关更多信息，请参阅 [运行堆栈命令](workingstacks-commands.md)。

# 步骤 3.4：运行配方
<a name="gettingstarted-db-lifecycle"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

获得自定义说明书后，您需要在相应实例上运行配方。您可以手动[运行这些配方](workingcookbook-manual.md)。但是，通常需要在实例生命周期中的可预测点运行配方，例如在实例启动后或者在您部署应用程序时。本节介绍一种简单得多的方法：让 OpsWorks Stacks 在适当的时间自动为你运行它们。

OpsWorks Stacks 支持一系列[生命周期事件](workingcookbook-events.md)，可简化运行配方。例如，“设置”事件在实例完成启动后发生，“部署”事件在部署应用程序时发生。每个层都有一组与每个生命周期事件关联的内置配方。当实例上发生生命周期事件时，代理会为实例的每个层运行关联的配方。要让 OpsWorks Stacks 自动运行自定义配方，请将其添加到相应层的相应生命周期事件中，代理将在内置配方完成后运行配方。

在此示例中，你需要在 My SQLinstance 和 PHP App Server 实例`appsetup.rb`上运行两个配方。`dbsetup.rb`

**注意**  
您可以使用*cookbook\$1name*:: *recipe\$1name* 格式在控制台上指定配方，其中*recipe\$1name*不包含.rb 扩展名。例如，您可以把 `dbsetup.rb` 作为 **phpapp::dbsetup**。

**将自定义配方分配给生命周期事件**

1. 在 **层** 页面上，对于 MySQL，单击 **配方**，然后单击 **编辑**。

1.  在 **Custom Chef recipes** 部分中，对于 **Deploy**，输入 [**phpapp::dbsetup**](gettingstarted-db-recipes.md#gettingstarted-db-recipes-dbsetup)。  
![\[Custom Chef recipes section with Repository URL and three configuration steps.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gsb6a.png)

1. 单击 **\$1** 图标将配方分配给事件，然后单击 **Save** 以保存新层配置。

1. 返回 **Layers (层)** 页面，然后重复该步骤将 **phpapp::appsetup** 分配给 **PHP App Server (PHP 应用程序服务器)** 层的 **Deploy (部署)** 事件。

# 步骤 3.5：部署简单PHPApp，版本 2
<a name="gettingstarted-db-deploy"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

最后一步是部署新版本的 Simple PHPApp。

**要部署 Simple PHPApp**

1. 在 “**应用程序**” 页面上，单击 “**简单PHPApp**应用程序” 的 “**操作**” 中的 “**部署**”。  
![\[Apps page showing SimplePHPApp with deploy, edit, and delete options in the Actions column.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gsb6aa.png)

1. 接受默认设置，然后单击 **Deploy**。  
![\[Deploy App interface with settings for SimplePHPApp and instance selection options.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gs17a.png)

   单击 **Deploy App** 页面上的 **Deploy** 时，会触发“部署”生命周期事件，从而通知代理来运行“部署”配方。默认情况下，您会在所有堆栈实例上触发该事件。内置“部署”配方仅向该应用程序类型的相应实例 (在本案例中为 PHP App Server 实例) 部署应用程序。但是，在其他实例上触发“部署”事件的方法通常非常有用，这样可以让实例对应用程序部署进行响应。在本案例中，您还需要在 MySQL 实例上触发部署以设置数据库。

   注意以下几点：
   + PHP App Server 实例上的代理会运行该层的内置配方，然后运行 `appsetup.rb`，该文件可以配置应用程序的数据库连接。
   + MySQL 实例上的代理不会安装任何文件，但它会运行 `dbsetup.rb` 来创建 urler 表。

   当部署完成后，**Deployment** 页面上的 **Status** 将变为 **successful**。

# 步骤 3.6：简单运行 PHPApp
<a name="gettingstarted-db-run"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

部署状态更改为**成功**后，您可以运行新的 Sim PHPApp ple 版本，如下所示。

**要运行 Simple PHPApp**

1. 在 **Instances** 页面上，单击 **php-app1** 行中的公有 IP 地址。

   您会在浏览器中看到以下页面。  
![\[Text input field labeled "Your Thoughts" with a "Share Your Thought" button above.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gsb7.png)

1. 单击**分享您的想法**，然后在**您的想法**中键入类似 **Hello world\$1** 的内容，在**您的名字**中键入您的名字。然后单击 **Submit Your Thought** 将消息添加到数据库。  
![\[Form with success message, text input fields for thought and name, and submit buttons.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gsb8.png)

1. 单击 **Go Back** 以查看数据库中的所有消息。

# 第 4 步：横向扩展 MyStack
<a name="gettingstarted-scale"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

MyStack 当前只有一台应用程序服务器。生产堆栈可能会需要多个应用程序服务器来处理传入流量和负载均衡器，从而将传入流量均匀地分布到应用程序服务器上。架构与以下内容类似：

![\[AWS OpsWorks stack architecture with load balancer, application servers, and RDS instance.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/php_walkthrough_arch_4.png)


OpsWorks 堆栈可以轻松扩展堆栈。本节介绍如何通过向 Elastic Load Balancing 负载均衡器添加第二个全天候 PHP App Server 实例 MyStack 并将两个实例置于 Elastic Load Balancing 负载均衡器后面来扩展堆栈 您可以轻松扩展程序以添加任意数量的全天候实例，也可以使用基于时间或负载的实例让 Stacks 自动扩展您的 OpsWorks 堆栈。有关更多信息，请参阅 [使用基于时间和基于负载的实例管理负载](workinginstances-autoscaling.md)。

# 步骤 4.1：添加负载均衡器
<a name="gettingstarted-scale-elb"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

Elastic Load Balancing 是一项 AWS 服务，可自动将传入的应用程序流量分配到多个亚马逊 EC2 实例。除了分发流量之外，Elastic Load Balancing 还执行以下操作：
+ 检测运行状况不佳的 Amazon EC2 实例。

  它将流量重新路由至其余运行正常的实例，直至运行不正常的实例恢复。
+ 自动扩展请求处理容量以响应传入流量

**注意**  
负载均衡器有两种用途。一个显而易见的用途是使应用程序服务器上的负载达到均衡。此外，许多站点倾向于将其应用程序服务器和数据库与直接用户访问隔离开。使用 OpsWorks Stacks，您可以通过在具有公有子网和私有子网的虚拟私有云 (VPC) 中运行堆栈来实现此目的，如下所示。  
将应用程序服务器和数据库置于私有子网中，VPC 中的其他实例可以访问该私有子网，但用户不能访问。
将用户流量定向到公有子网中的负载均衡器，然后由负载均衡器将流量转发到私有子网中的应用程序服务器，并向用户返回响应。
有关更多信息，请参阅 [在 VPC 中运行堆栈](workingstacks-vpc.md)。要获取将本演练中的示例扩展到在 VPC 中运行的 CloudFormation 模板，请下载该[`OpsWorksVPCtemplates.zip`文件](samples/OpsWorksVPCtemplates.zip)。

尽管 Elastic Load Balancing 通常称为层，但其工作方式与其他内置层略有不同。您无需创建层并向其添加实例，而是使用 Amazon EC2 控制台创建 Elastic Load Balancing 负载均衡器，然后将其连接到现有层之一（通常是应用程序服务器层）。 OpsWorks 然后，堆栈将图层的现有实例注册到该服务，并自动添加任何新实例。以下过程介绍如何将负载均衡器添加到 MyStack的 PHP App Server 层。

**注意**  
OpsWorks 堆栈不支持 Application Load Balancer。您只能将 Classic Load Balancer 与 OpsWorks 堆栈一起使用。

**将负载均衡器附加到 PHP App Server 层**

1. 使用 Amazon EC2 控制台为创建新的负载均衡器 MyStack。详细信息取决于您的账户是否支持 EC2 Classic。有关更多信息，请参阅 [Elastic Load Balancing 入门](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/load-balancer-getting-started.html)。在运行 **Create Load Balancer** 向导时，按如下所示配置负载均衡器：  
**定义负载均衡器**  
为负载均衡器分配一个易于识别的名称（例如 PHP-LB），使其更容易在堆栈控制台中 OpsWorks 找到。然后选择 **Continue** 以接受其余设置的默认值。  
如果您从 **Create LB Inside** 菜单中选择包含一个或多个子网的 VPC，则必须为要使用负载均衡器路由流量的每个可用区选择一个子网。  
**分配安全组**  
如果您的账户支持默认 VPC，则该向导将显示此页以确定负载均衡器的安全组。它不显示 EC2 经典版的此页面。  
对于本演练，请选择 **default VPC security group**。  
**配置安全设置**  
如果您在 **Define Load Balancer** 页面上选择 **HTTPS** 作为 **Load Balancer Protocol**，请在此页面上配置证书、密码和 SSL 协议设置。对于本演练，请接受默认值并选择 **Configure Health Check**。  
**配置运行状况检查**  
将 Ping 路径设置为 **/** 并接受其余设置的默认值。  
**添加 EC2 实例**  
选择**继续**； OpsWorks Stacks 会自动向负载均衡器注册实例。  
**添加标签**  
添加标签，以帮助您查找。每个标签都是一个键值对；例如，为了进行本演练，您可以将 **Description** 指定为键，将 **Test LB** 指定为值。  
**审核**  
检查您的选择，选择 **Create**，然后选择 **Close**，这将启动负载均衡器。

1. 如果在启动负载均衡器后您的账户支持默认 VPC，则必须确保其安全组具有合适的传入规则。默认规则不接受任何入站流量。

   1. 在 Amazon EC2 导航窗格中选择 “**安全组**”。

   1. 选择 **default VPC security group**

   1. 在 **Inbound** 选项卡上，选择 **Edit**。

   1. 在本演练中，将 **Source** 设置为 **Anywhere**，这将指示负载均衡器接受来自任何 IP 地址的传入流量。

1. 返回 OpsWorks Stacks 控制台。在 **Layers** 页面上，选择层的 **Network** 链接，然后选择 **Edit**。

1. 在 **Elastic Load Balancing** 下，选择您在步骤 1 中创建的负载均衡器，然后选择 **Save**。  
![\[Dropdown menu for Elastic Load Balancer selection with options "Available ELBs" and "None".\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/elb_select.png)

   将负载均衡器连接到该层后， OpsWorks Stacks 会自动注册该层的当前实例，并在新实例上线时添加这些实例。

1. 在 **Layers** 页面上，单击负载均衡器的名称以打开其详细信息页面。注册完成且实例通过运行状况检查后， OpsWorks Stacks 会在负载均衡器页面上的实例旁边显示一个绿色复选标记。  
![\[Elastic Load Balancing details page showing one EC2 instance in US-west-2a with InService status.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/elb_properties3.png)

现在，您可以PHPApp 通过向负载均衡器发送请求来运行 Simple。

**PHPApp 通过负载均衡器运行 Simple**

1. 再次打开负载均衡器的详细信息页面 (如果尚未打开的话)。

1. 在属性页面上，验证实例的运行状况检查状态，然后单击负载均衡器的 DNS 名称以运行 Simple PHPApp。负载均衡器会将请求转发到 PHP App Server 实例并返回响应，响应应与单击 PHP App Server 实例的公有 IP 地址时获得的响应完全相同。  
![\[Elastic Load Balancing settings showing DNS name for PHP-LB in US West region.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/elb_properties2.png)

**注意**  
OpsWorks 堆栈还支持 HAProxy 负载均衡器，这可能对某些应用程序有优势。有关更多信息，请参阅 [HAProxy OpsWorks 堆叠层](layers-haproxy.md)。

# 步骤 4.2：添加 PHP 应用服务器实例
<a name="gettingstarted-scale-instances"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

现在，负载均衡器已布置到位，您可以通过向 PHP App Server 层添加更多实例的方法来扩展堆栈。从您的角度来看，整个操作是无缝的。每次新的 PHP App Server 实例上线时， OpsWorks Stacks 都会自动将其注册到负载均衡器并部署 SimplePHPApp，这样服务器就可以立即开始处理传入流量。为简洁起见，本主题介绍了如何添加一个额外 PHP App Server 实例，不过您可以使用相同的方法根据需要添加多个实例。

**向 PHP App Server 层添加另一个实例**

1. 在“Instances”页面上，单击 **PHP App Server** 下的 **\$1 Instance**。

1. 接受默认设置，然后单击 **Add Instance**。

1. 单击 **start** 以启动实例。

# 步骤 4.3：监控 MyStack
<a name="gettingstarted-scale-monitor"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

OpsWorks Stacks 使用 Amazon CloudWatch 为堆栈提供指标，并在 “**监控**” 页面上汇总这些指标，以方便您使用。您可以查看整个堆栈、指定层或指定实例的指标。

**要监控 MyStack**

1. 在导航窗格中，单击 **Monitoring**，这会显示一组图表，其中包含每个层的平均指标。您可以使用 **CPU System**、**Memory Used** 和 **Load** 的菜单，以显示不同的相关指标。  
![\[Monitoring dashboard showing CPU, memory, load, and process metrics over time for system layers.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/monitor_stack.png)

1. 单击 **PHP App Server** 以查看每个层实例的指标。  
![\[Dashboard showing CPU, memory, load, and processes metrics for Layer PHP App Server over time.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/monitor_layer.png)

1. 单击 **php-app1** 以查看该实例的指标。您可以通过移动滑块的方法来查看任何特定时间点的指标。  
![\[Dashboard showing CPU, memory, load, and process metrics for a PHP application instance.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/monitor_instance.png)

**注意**  
OpsWorks Stacks 还支持 Ganglia 监控服务器，这可能对某些应用程序有优势。有关更多信息，请参阅 [Ganglia 层](workinglayers-ganglia.md)。

# 第 5 步：删除 MyStack
<a name="gettingstarted-delete"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

一旦您开始使用诸如 Amazon EC2 实例之类的 AWS 资源，就会根据使用量向您收费。如果您现在已完成，则应停止实例，这样就不会产生任何不必要的费用。如果您不再需要堆栈，则可将其删除。

**要删除 MyStack**

1. 

**停止所有实例**

   在 **Instances** 页面上，单击 **Stop All Instances**，然后在要求您确认操作时单击 **Stop**。  
![\[Confirmation dialog asking if user wants to stop the stack, warning about data loss.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gse1.png)

   在您单击 “**停止**” 后， OpsWorks Stacks 会终止关联的 Amazon EC2 实例，但不会终止任何关联资源，例如弹性 IP 地址或 Amazon EBS 卷。

1. 

**删除所有实例**

   停止实例只会终止关联的 Amazon EC2 实例。当实例处于已停止状态时，您必须删除每个实例。在 **PHP App Server** 层中，单击 php-app1 实例的 **Actions** 列中的 **delete**。  
![\[PHP App Server table showing two instances with status, size, and actions including delete option.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gse2.png)

   OpsWorks 然后，Stacks 会要求您确认删除，并向您显示所有相关资源。您可以选择保留这些资源中的任意资源，或保留所有这些资源。此示例没有依赖资源，因此只需单击 **Delete**。

   对 php-app2 和 **MySQL** 实例 db-master1 重复此过程。请注意，db-master1 具有关联的 Amazon Elastic Block Store 卷 (默认情况下已选定)。将其保持选定状态可删除卷以及实例。

1. 

**删除层。**

   在 **Layers** 页面上，单击 **Delete**，然后单击 **Delete** 以进行确认。  
![\[PHP App Server layer with options for General Settings, Recipes, Network, EBS Volumes, and Security.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gse4.png)

   对 **MySQL** 层重复此过程。

1. 

**删除应用程序**

   在 “**应用程序**” 页面上，单击 “**简单PHPApp**应用程序” 的 “**操作**” 列中的 “**删除**”，然后单击 “**删除**” 进行确认。  
![\[Confirmation dialog for deleting SimplePHPApp, warning of configuration loss.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gse5.png)

1. 

**删除 MyStack**

   在 **Stack** 页面上，单击 **Delete Stack**，然后单击 **Delete** 以进行确认。  
![\[Confirmation dialog for deleting MyStack, warning of settings loss with Cancel and Delete options.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/gse6.png)

现在，您已经完成了本演练。